Каталог статей
Главная » Статьи » S3DecoderLib |
S3DecoderLib: Работа с таблицами строк
|
Работа с таблицами строк [ Стабильный билд • ResourceType STBL • Вспомогательные типы данных и функции • Языковые параметры (локализации) ]
Програмный модуль и версия DBPF2STBL.pas, rev.120825
Вспомогательные типы данных
record TDBPF2STBLHeader - заголовок STBL type TDBPF2STBLHeader = packed record // from http://www.modthesims.info/wiki.php?title=Sims_3:0x220557DA Sig: packed array[0..3] of BYTE; // 'STBL' = 0x4C425453 Ver: BYTE; // версия = 2 Reserved1: packed array[0..1] of BYTE; // 0 ??? Count: DWORD; // число записей в таблице Reserved2: packed array[0..5] of BYTE; // 0 ??? end; // TSTBLHeader record record TDBPF2STBLRecord - запись STBL type TDBPF2STBLRecord = packed record Hash64: UInt64; // QWORD // fnv64 хэш локализуемой строки Lenght: DWORD; // длина замещающей строки Str: packed array of char; // замещающая строка end; // TSTBLRecord record class TDBPF2STBLItem - класс-обертка для записи Класс "Обертывает" запись данных, представляя текстовую строку в виде строки Delphitype TDBPF2STBLItem = class // класс-обертка для записи private protected FHash: UInt64; // QWORD // fnv64 хэш локализуемой строки FValue: string; public property Hash: UInt64 read FHash write FHash; property Value: string read FValue write FValue; end; Свойства Hash: UInt64 – хэш исходной строки, чтение/запись; Value: string – строка замены, чтение/запись;
array TDBPF2STBLItems - массив записей type TDBPF2STBLItems = packed array of TDBPF2STBLItem; Основные типы данных
class TDBPF2STBL - таблица STBL type TDBPF2STBL = class(TDBPF2ItemDecoder) // see private protected FHeader: TDBPF2STBLHeader; // заголовок записи FItems: TDBPF2STBLItems; // индексная таблица FCount: integer; function Alloc: TDBPF2STBLItem; // добавляет запись в индексную таблицу и возвращает ее public constructor Create(AStream: TStream = nil); // декодирует данные записи destructor Destroy; override; procedure Decode(AStream: TStream); override; // декодирует данные записи procedure New(AStream: TStream); // связывает поток декодирования, создает пустую индексную таблицу procedure Commit; // кодирует данные записи procedure Clear; // очищает таблицу procedure Add(AHash: UInt64; Str: string); function Find(AHash: UInt64): string; property Count: integer read FCount; property Stream: TStream write Decode; property Items: TDBPF2STBLItems read FItems; end; class TDBPF2STBLFinder - поддержка локализации строк Класс TDBPF2STBLFinder обеспечивает кэшированный поиск строк локализации по алгоритму: 1. Ищем в прокэшированной таблице строк для заданной локали. 2. Если нечего не нашли декодируем другую таблицу строк для заданной локали и ищем в ней. 3. Если нечего не нашли повторяем шаги 1 и 2 для локали по умолчанию 0 ("en-us"). type TDBPF2STBLFinder = class private protected FTblAct, FTblDef: TDBPF2STBL; FIActHi, FIActLo: DWORD; FIDefHi, FIDefLo: DWORD; FLocale: integer; FDecoder: TDBPF2Decoder; procedure SetDecoder(v: TDBPF2Decoder); procedure SetLocale(v: integer); public constructor Create(ALocaleId: integer; ADecoder: TDBPF2Decoder = nil); destructor Destroy(); override; procedure Reset; function Find(AHash: UInt64): string; overload; function Find(S: string): string; overload; property Decoder: TDBPF2Decoder read FDecoder write SetDecoder; property Locale: integer read FLocale write SetLocale; end; Свойства Decoder: DWORD – декодер (TDBPF2Decoder), с загруженным первичным потоком, чтение/запись; Locale – идентификатор локали согласно приложению 2;
Методы constructor Create(ALocaleId: integer; ADecoder: TDBPF2Decoder = nil) – конструктор класса; destructor Destroy; override – деструктор класса;
procedure Reset – сбрасывает кэширование; function Find(AHash: UInt64): string; overload – возвращает строку по ее хэшу; function Find(S: string): string; overload – возвращает строку по значение нелокализованной строки;
Функции function IsSTBL(AResourceType: DWORD): boolean; // возвращает true, если AResourceType STBL function LocaleId(InstanceHi: DWORD): integer; // возвращает Id локали по InstanceHi ресурса function FindLocalization(DBPF2Decoder: TDBPF2Decoder; AHash: UInt64; Locale: integer): string; // ищет локализацию по хэшу, устарело, // т.к. при нескольких вызовах работает гораздо медленнее TDBPF2STBLFinder.Find | |
Категория: S3DecoderLib | Добавил: crazylab (28.09.2013) | |
Просмотров: 787 |