Четверг, 23.11.2017, 06:33
Приветствую Вас Гость

Каталог статей

Главная » Статьи » 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)
Просмотров: 146