Пятница, 26.04.2024, 06:04
Приветствую Вас Гость

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

Главная » Статьи » S3DecoderLib

S3DecoderLib: Вспомогательные типы данных и функции

Вспомогательные типы данных и функции

 

[ Стабильный билд • Языковые параметры (локализации) • FNV хэш-функции • Чтение 7BITSTR ]

 

Програмный модуль и версия

DBPF2Utils.pas, rev.120825
S3PackUtils.pas, rev.120825

 

Типы данных

 

record TDBPF2TGI - запись TGI

Запись {ResourceType-ResourceGroup-Instance} (TGI), Instance разделен на две 32-разрядные части для удобства работы.
type
  TDBPF2TGI = packed record
    ResourceType: DWORD; // тип ресурса, см. http://www.modthesims.info/wiki.php?title=Sims_3:PackedFileTypes
    ResourceGroup: DWORD; // группа, старший байт набор флагов???
    InstanceHi: DWORD;
    InstanceLo: DWORD; // экземпляр 32+32bit
  end;

array TDBPF2TGIs - массив записей TGI

type
  TDBPF2TGIs = packed array of TDBPF2TGI;

class TDBPF2TGIList - список TGI без дубликатов

type
  TDBPF2TGIList = class
  // список TGI без дубликатов
    protected
      FItems: TDBPF2TGIs;
      FCount: integer; // число записей в индекcной таблице
      function Alloc: integer; // добавляет запись в индексную таблицу и возвращает ее индекс
    public
      constructor Create; // контруктор класса
      destructor Destroy; override; // деструктор класса

      function Add(AResourceType: DWORD; AResourceGroup: DWORD; AInstanceHi: DWORD; AInstanceLo: DWORD): boolean;
        // добавляет запись, возвращает true - если запись добавлена, false - если уже существует
      function Find(AResourceType: DWORD; AResourceGroup: DWORD; AInstanceHi: DWORD; AInstanceLo: DWORD): integer;
        // возвращает индекс записи или -1
      procedure Clear; // очищает таблицу

      property Items: TDBPF2TGIs read FItems; // декодированная индексная таблица
      property Count: integer read FCount; // число записей в индекcной таблице
  end;

Функции

 

Вычисление хэша FNV

function FNV64(s: string): UInt64; overload; // вычисляет FNV64 для ASCII строки
function FNV32(s: string): DWORD; overload; // вычисляет FNV32 для ASCII строки
function FNV64(a: TBytes; ABegin: integer =0; AEnd: integer =0): UInt64; overload; // вычисляет FNV64 для массива байт
function FNV32(a: TBytes; ABegin: integer =0; AEnd: integer =0): DWORD; overload; // вычисляет FNV32 для массива байт
function FNV64(f: TStream; ABegin: integer =96; AEnd: integer =0): UInt64; overload; // вычисляет FNV64 для потока

Вычисление циклической контрольной суммы (CRC) sims3pack

function CRC(a: TBytes; ABegin: integer = 0; AEnd: integer = 0;
  Seed: UInt64 = $00FFFFFFFFFFFFFF): UInt64; overload; // вычисляет CRC для массива байт
function CRC(f: TStream; ABegin: integer = 0; AEnd: integer = 0;
  Seed: UInt64 = $00FFFFFFFFFFFFFF): UInt64; overload; // вычисляет CRC для потока
function CompareCRC(u: UInt64; s: string; ARaiseException: boolean = false): boolean;
  // сравнивает контрольную сумму в виде числа и строки, при необходимости порождает исключение ES3CRCError

Работа с путями к папкам

Требуют JEDI для компиляции. PathDelimiter - в Windows (бэк-слэш '\')

function TS3SavesPath: string; // возвращает путь к сейвам TS3, заканчивается PathDelimiter
function TS3Addon0Path: string; // возвращает путь к TS3, заканчивается PathDelimiter
function AppRunPath: string; // возвращает путь к программе, заканчивается PathDelimiter

Работа со строками

function Read7BitStr(AStream: TStream): string; // читает строку .NET с текущей позиции потока
function ReadWordStr(AStream: TStream): string; // читает строку предваренную длиной с текущей позиции потока

Исключения

 

Вычисление циклической контрольной суммы (CRC) sims3pack

type
  ES3CRCError = class (ES3PackDecoderError);
Категория: S3DecoderLib | Добавил: crazylab (27.09.2013)
Просмотров: 718