Каталог статей
Главная » Статьи » S3DecoderLib |
S3DecoderLib: Sims3Pack. Типы данных
|
Формат Sims3Pack и его декодирование: Часть практическая, типы данных [ Стабильный билд • Описание формата • Реализация декодера ]
Програмный модуль и версия S3PackDecoder.pas, rev.120825
Типы данных
record TS3PackHeader – заголовок файла sims3pack Вспомогательный тип данныхtype TS3PackHeader = packed record // заголовок файла SigLength: DWORD; // длина сигнатуры ??? Sig: packed array[0..6] of BYTE; // "TS3Pack" Version: WORD; // версия ??? Shift: DWORD; // относительное смещение секции данных после заголовка end; // TS3PackHeader record Поля SigLength: DWORD – размер сигнатуры, 7 байт Sig: packed array[0..6] of BYTE; – содержит текст "TS3Pack" Version: WORD – версия заголовка ??? Shift: DWORD – задает относительное смещение секции данных после заголовка, для получения абсолютного смещения к нему нужно прибавить 17 байт заголовка ( = sizeof(TS3PackHeader) ). Для декодирования файла важны два поля Sig и Shift.
class TS3PackItem – индексная запись Класс записи содержит информацию об одной записи (файла) данных и механизм ее декодирования (работы с вторичным потоком); type TS3PackItem = class protected FFileName: string; // имя файла FLength: cardinal; // размер записи (файла) FOffset: cardinal; // относительное смещение от начала секции данных FCRC: string; // контрольная сумма FGUID: string; // глобальный идентификатор FContentType: string; // тип данных FStream: TStream; // ссылка на вторичный поток FOwner: TS3PackDecoder; // ссылка на владельца записи public constructor Create(AOwner: TS3PackDecoder); // конструктор класса destructor Destroy; override; // деструктор класса procedure FreeStream; // освобождает вторичный поток procedure UnlinkStream; // удаляет ссылку на вторичный поток procedure Decode(AStream: TStream); // декодирует данные записи function Decoded: boolean; // проверяет запись на декодированность property FileName: string read FFileName; // имя файла property Length: cardinal read FLength; // размер файла property Offset: cardinal read FOffset; // относительное смещение начала файла property CRC: string read FCRC; // контрольная сумма property GUID: string read FGUID; // глобальный идентификатор property ContentType: string read FContentType; // тип данных property Stream: TStream read FStream write Decode; end; Свойства FileName: string – имя файла, только чтение; Length: cardinal – длина файла, только чтение; Offset: cardinal – относительное смещение от начала секции данных, только чтение; CRC: string – контрольная сумма, только чтение; GUID: string – GUID, только чтение; ContentType: string – тип данных, только чтение; Stream: TStream – ссылка на вторичный поток, чтение/запись;
Методы constructor Create(AOwner: TS3PackDecoder) – конструктор класса, как аргумент получает декодер, индексной таблице которого принадлежит запись; destructor Destroy; override – виртуальный деструктор, освобождает вторичный поток и запись, вместо него нужно использовать Free;
procedure FreeStream – освобождает вторичный поток (вызывает его Free), то же что и Stream:= nil, но работает быстрее; procedure UnlinkStream – удаляет ссылку на вторичный поток, но не удаляет его, необходимо вызывать ее, а не FreeStream, если поток использовался в TDBPF2Decoder как первичный; procedure Decode(AStream: TStream) – декодирует запись, то же что и Stream:= AStream, но работает быстрее, если запись уже декодирована, то вначале освобождает старый вторичный поток; function Decoded: boolean – возвращает true, если запись уже декодирована;
Прочие типы
Исключения type ES3PackDecoderError = class (Exception); // базовый класс ошибки декодера ES3PackHeaderError = class (ES3PackDecoderError); // ошибка заголовка
ES3PackHeaderError – генерируется методом TS3PackDecoder.Decode при неверном заголовке; | |
Категория: S3DecoderLib | Добавил: crazylab (26.09.2013) | |
Просмотров: 782 |