Каталог статей
Главная » Статьи » S3DecoderLib |
S3DecoderLib: Вспомогательные типы данных и функции
|
Вспомогательные типы данных и функции [ Стабильный билд • Языковые параметры (локализации) • FNV хэш-функции • Чтение 7BITSTR ]
Програмный модуль и версия DBPF2Utils.pas, rev.120825S3PackUtils.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) | |
Просмотров: 757 |