pexe
Version:
The Windows Executables Viewer
46 lines (41 loc) • 1.55 kB
text/typescript
import DataBlock from "./dataBlock";
// Общий класс позволяющий описать структуру секции (множество DataType)
export default abstract class DataSection {
// Поля секции
protected fields: Object = {}
// Вложенные блоки
protected to: Object = {}
// Проходится по всем полям объекта fields и заполняет структуру
// Затем рекурсивно проходит по всем вложенным секциям
parse(data: DataBlock, offset = 0) {
for (let name in this.fields) {
const block = (<any>this.fields)[name] as DataBlock
block.setBytes(data.data, offset, block.data.length)
offset += block.data.length
}
for (let name in this.to) {
const section = (<any>this.to)[name] as DataSection
section.parse(data, offset)
offset += section.totalLength()
}
return this
}
// Размер собственных полей
fieldsLength() {
let size = 0
for (let name in this.fields) {
const block = (<any>this.fields)[name] as DataBlock
size += block.data.length
}
return size
}
// Размер всей структуры включая собственные поля и поля вложенных секций
totalLength() {
let size = this.fieldsLength()
for (let name in this.to) {
const section = (<any>this.to)[name] as DataSection
size += section.totalLength()
}
return size
}
}