Skip to content

Commit

Permalink
Clear names
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexanderOMara committed Nov 20, 2024
1 parent 7e53284 commit 863c605
Show file tree
Hide file tree
Showing 12 changed files with 160 additions and 160 deletions.
48 changes: 24 additions & 24 deletions macro.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,69 +7,69 @@ import type { Struct } from './struct.ts';
* @param littleEndian Little endian, big endian, or default to swap.
* @returns New struct of the same type and memory, different endian.
*/
export function endianSwap<T extends Struct>(
struct: T,
export function endianSwap<S extends Struct>(
struct: S,
littleEndian: boolean | null = null,
): T {
): S {
return new struct.constructor(
struct.buffer,
struct.byteOffset,
littleEndian ?? !struct.littleEndian,
) as T;
) as S;
}

/**
* Get byte offset of member.
*
* @param StructT Struct constructor.
* @param StructC Struct constructor.
* @param name Member name.
* @returns Byte offset.
*/
export function byteOffset<T extends typeof Struct>(
StructT: T,
name: Exclude<keyof T['prototype'], keyof Struct>,
export function byteOffset<C extends typeof Struct>(
StructC: C,
name: Exclude<keyof C['prototype'], keyof Struct>,
): number {
return StructT.MEMBERS[name].byteOffset;
return StructC.MEMBERS[name].byteOffset;
}

/**
* Get byte length of member.
*
* @param StructT Struct constructor.
* @param StructC Struct constructor.
* @param name Member name.
* @returns Byte length.
*/
export function byteLength<T extends typeof Struct>(
StructT: T,
name: Exclude<keyof T['prototype'], keyof Struct>,
export function byteLength<C extends typeof Struct>(
StructC: C,
name: Exclude<keyof C['prototype'], keyof Struct>,
): number {
return StructT.MEMBERS[name].byteLength;
return StructC.MEMBERS[name].byteLength;
}

/**
* Get little endian flag of member.
*
* @param StructT Struct constructor.
* @param StructC Struct constructor.
* @param name Member name.
* @returns Little endian, big endian, or default.
*/
export function littleEndian<T extends typeof Struct>(
StructT: T,
name: Exclude<keyof T['prototype'], keyof Struct>,
export function littleEndian<C extends typeof Struct>(
StructC: C,
name: Exclude<keyof C['prototype'], keyof Struct>,
): boolean | null {
return StructT.MEMBERS[name].littleEndian;
return StructC.MEMBERS[name].littleEndian;
}

/**
* Get type of member.
*
* @param StructT Struct constructor.
* @param StructC Struct constructor.
* @param name Member name.
* @returns Type.
*/
export function getType<T extends typeof Struct>(
StructT: T,
name: Exclude<keyof T['prototype'], keyof Struct>,
export function getType<C extends typeof Struct>(
StructC: C,
name: Exclude<keyof C['prototype'], keyof Struct>,
): string | typeof Struct {
return StructT.MEMBERS[name].Type;
return StructC.MEMBERS[name].Type;
}
16 changes: 8 additions & 8 deletions member.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,26 @@ import type { Struct } from './struct.ts';
/**
* Set member info.
*
* @param StructT Struct constructor.
* @param StructC Struct constructor.
* @param name Member name.
* @param byteOffset Byte offset.
* @param byteLength Byte length.
* @param littleEndian Little endian, big endian, or default.
* @param Type Member type.
* @returns Byte length.
*/
export function member<T extends typeof Struct>(
StructT: T,
name: Members<T>,
export function member<C extends typeof Struct>(
StructC: C,
name: Members<C>,
byteOffset: number,
byteLength: number,
littleEndian: boolean | null,
Type: string | typeof Struct,
): number {
const o: { [p: PropertyKey]: Member } = Object.hasOwn(StructT, 'MEMBERS')
? StructT.MEMBERS
: (StructT as { MEMBERS: T['MEMBERS'] }).MEMBERS = Object
.create(StructT.MEMBERS);
const o: { [p: PropertyKey]: Member } = Object.hasOwn(StructC, 'MEMBERS')
? StructC.MEMBERS
: (StructC as { MEMBERS: C['MEMBERS'] }).MEMBERS = Object
.create(StructC.MEMBERS);
o[name] = { byteOffset, byteLength, littleEndian, Type };
return byteLength;
}
16 changes: 8 additions & 8 deletions member/f16.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,20 @@ import { member } from '../member.ts';
/**
* Member float16.
*
* @param StructT Struct constructor.
* @param StructC Struct constructor.
* @param name Member name.
* @param byteOffset Byte offset.
* @param littleEndian Little endian, big endian, or default.
* @returns Byte length.
*/
export function memberF16<T extends typeof Struct>(
StructT: T,
name: MembersExtends<T, number>,
export function memberF16<C extends typeof Struct>(
StructC: C,
name: MembersExtends<C, number>,
byteOffset: number,
littleEndian: boolean | null = null,
): number {
Object.defineProperty(StructT.prototype, name, {
get(this: T['prototype']): number {
Object.defineProperty(StructC.prototype, name, {
get(this: C['prototype']): number {
const { dataView } = this as unknown as {
dataView: DataView & {
getFloat16?: (
Expand All @@ -34,7 +34,7 @@ export function memberF16<T extends typeof Struct>(
? dataView.getFloat16(byteOffset, le)
: getFloat16(dataView, byteOffset, le);
},
set(this: T['prototype'], value: number): void {
set(this: C['prototype'], value: number): void {
const { dataView } = this as unknown as {
dataView: DataView & {
setFloat16?: (
Expand All @@ -56,5 +56,5 @@ export function memberF16<T extends typeof Struct>(
}
},
});
return member(StructT, name, byteOffset, 2, littleEndian, 'f16');
return member(StructC, name, byteOffset, 2, littleEndian, 'f16');
}
16 changes: 8 additions & 8 deletions member/f32.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,32 +5,32 @@ import { member } from '../member.ts';
/**
* Member float32.
*
* @param StructT Struct constructor.
* @param StructC Struct constructor.
* @param name Member name.
* @param byteOffset Byte offset.
* @param littleEndian Little endian, big endian, or default.
* @returns Byte length.
*/
export function memberF32<T extends typeof Struct>(
StructT: T,
name: MembersExtends<T, number>,
export function memberF32<C extends typeof Struct>(
StructC: C,
name: MembersExtends<C, number>,
byteOffset: number,
littleEndian: boolean | null = null,
): number {
Object.defineProperty(StructT.prototype, name, {
get(this: T['prototype']): number {
Object.defineProperty(StructC.prototype, name, {
get(this: C['prototype']): number {
return this.dataView.getFloat32(
byteOffset,
littleEndian ?? this.littleEndian,
);
},
set(this: T['prototype'], value: number): void {
set(this: C['prototype'], value: number): void {
this.dataView.setFloat32(
byteOffset,
value,
littleEndian ?? this.littleEndian,
);
},
});
return member(StructT, name, byteOffset, 4, littleEndian, 'f32');
return member(StructC, name, byteOffset, 4, littleEndian, 'f32');
}
16 changes: 8 additions & 8 deletions member/f64.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,32 +5,32 @@ import { member } from '../member.ts';
/**
* Member float64.
*
* @param StructT Struct constructor.
* @param StructC Struct constructor.
* @param name Member name.
* @param byteOffset Byte offset.
* @param littleEndian Little endian, big endian, or default.
* @returns Byte length.
*/
export function memberF64<T extends typeof Struct>(
StructT: T,
name: MembersExtends<T, number>,
export function memberF64<C extends typeof Struct>(
StructC: C,
name: MembersExtends<C, number>,
byteOffset: number,
littleEndian: boolean | null = null,
): number {
Object.defineProperty(StructT.prototype, name, {
get(this: T['prototype']): number {
Object.defineProperty(StructC.prototype, name, {
get(this: C['prototype']): number {
return this.dataView.getFloat64(
byteOffset,
littleEndian ?? this.littleEndian,
);
},
set(this: T['prototype'], value: number): void {
set(this: C['prototype'], value: number): void {
this.dataView.setFloat64(
byteOffset,
value,
littleEndian ?? this.littleEndian,
);
},
});
return member(StructT, name, byteOffset, 8, littleEndian, 'f64');
return member(StructC, name, byteOffset, 8, littleEndian, 'f64');
}
32 changes: 16 additions & 16 deletions member/i16.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,65 +5,65 @@ import { member } from '../member.ts';
/**
* Member int16.
*
* @param StructT Struct constructor.
* @param StructC Struct constructor.
* @param name Member name.
* @param byteOffset Byte offset.
* @param littleEndian Little endian, big endian, or default.
* @returns Byte length.
*/
export function memberI16<T extends typeof Struct>(
StructT: T,
name: MembersExtends<T, number>,
export function memberI16<C extends typeof Struct>(
StructC: C,
name: MembersExtends<C, number>,
byteOffset: number,
littleEndian: boolean | null = null,
): number {
Object.defineProperty(StructT.prototype, name, {
get(this: T['prototype']): number {
Object.defineProperty(StructC.prototype, name, {
get(this: C['prototype']): number {
return this.dataView.getInt16(
byteOffset,
littleEndian ?? this.littleEndian,
);
},
set(this: T['prototype'], value: number): void {
set(this: C['prototype'], value: number): void {
this.dataView.setInt16(
byteOffset,
value,
littleEndian ?? this.littleEndian,
);
},
});
return member(StructT, name, byteOffset, 2, littleEndian, 'i16');
return member(StructC, name, byteOffset, 2, littleEndian, 'i16');
}

/**
* Member uint16.
*
* @param StructT Struct constructor.
* @param StructC Struct constructor.
* @param name Member name.
* @param byteOffset Byte offset.
* @param littleEndian Little endian, big endian, or default.
* @returns Byte length.
*/
export function memberU16<T extends typeof Struct>(
StructT: T,
name: MembersExtends<T, number>,
export function memberU16<C extends typeof Struct>(
StructC: C,
name: MembersExtends<C, number>,
byteOffset: number,
littleEndian: boolean | null = null,
): number {
Object.defineProperty(StructT.prototype, name, {
get(this: T['prototype']): number {
Object.defineProperty(StructC.prototype, name, {
get(this: C['prototype']): number {
return this.dataView.getUint16(
byteOffset,
littleEndian ?? this.littleEndian,
);
},
set(this: T['prototype'], value: number): void {
set(this: C['prototype'], value: number): void {
this.dataView.setUint16(
byteOffset,
value,
littleEndian ?? this.littleEndian,
);
},
});
return member(StructT, name, byteOffset, 2, littleEndian, 'u16');
return member(StructC, name, byteOffset, 2, littleEndian, 'u16');
}
Loading

0 comments on commit 863c605

Please sign in to comment.