-
Notifications
You must be signed in to change notification settings - Fork 0
/
definition_record.ts
52 lines (42 loc) · 1.31 KB
/
definition_record.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import { BinaryReader } from "./deps.ts";
import { FIELDS } from "./fields.ts";
import { DataField } from "./data_field.ts";
import { DataRecord, valid } from "./data_record.ts";
import { FieldDefinition } from "./field_definition.ts";
export class DefinitionRecord {
localNum: number;
reserved: number;
architecture: number;
globalMsgNum: number;
fieldDefinitions: FieldDefinition[];
dataRecords: DataRecord[];
constructor(io: BinaryReader, localNum: number) {
this.localNum = localNum;
this.reserved = io.readUint8();
this.architecture = io.readUint8();
const littleEndian = this.architecture === 0;
this.globalMsgNum = io.readUint16(littleEndian);
const numFields = io.readUint8();
this.fieldDefinitions = new Array(numFields);
for (let i = 0; i < numFields; i++) {
this.fieldDefinitions[i] = new FieldDefinition(io);
}
this.dataRecords = [];
}
isLittleEndian(): boolean {
return this.architecture === 0;
}
valid(): [number, DataField][][] {
const fields = FIELDS[this.globalMsgNum];
if (fields === undefined) {
return [];
}
return this.dataRecords.map((dataRecord: DataRecord) => {
return valid(dataRecord).filter((dr: [number, DataField]) => {
if (dr[0] in fields) {
return dr;
}
});
});
}
}