protected DatFile BuildGenericDatFile(DatFileAttribute attribute) { DatHeader header = new DatHeader(Convert.ToUInt32(attribute.Translations.Count)); List <IndexTableRecord> indexTableRecords = new List <IndexTableRecord>(); List <ValueTableRecord> valueTableRecords = new List <ValueTableRecord>(); List <KeyTableRecord> keyTableRecords = new List <KeyTableRecord>(); foreach (Translation translation in attribute.Translations) { ValueTableRecord valueTableRecord = new ValueTableRecord(translation.Value); valueTableRecords.Add(valueTableRecord); KeyTableRecord keyTableRecord = new KeyTableRecord(translation.Key); keyTableRecords.Add(keyTableRecord); IndexTableRecord indexTableRecord = new IndexTableRecord( translation.Crc32, Convert.ToUInt32(keyTableRecord.Key.Length), Convert.ToUInt32(valueTableRecord.Value.Length)); indexTableRecords.Add(indexTableRecord); } IndexTable indexTable = new IndexTable(indexTableRecords); ValueTable valueTable = new ValueTable(valueTableRecords); KeyTable keyTable = new KeyTable(keyTableRecords); return(new DatFile(header, indexTable, valueTable, keyTable)); }
private IndexTable BuildIndexTable(byte[] bytes, uint keyCount) { List <IndexTableRecord> indexTable = new List <IndexTableRecord>(); for (int i = 0; i < keyCount; i++) { uint crc32 = BitConverter.ToUInt32(bytes, _currentOffset); _currentOffset += sizeof(uint); uint keyLength = BitConverter.ToUInt32(bytes, _currentOffset); _currentOffset += sizeof(uint); uint valueLength = BitConverter.ToUInt32(bytes, _currentOffset); _currentOffset += sizeof(uint); IndexTableRecord indexTableRecord = new IndexTableRecord(crc32, valueLength, keyLength); indexTable.Add(indexTableRecord); } return(new IndexTable(indexTable)); }
protected DatFile FromHolderInternal([NotNull] List <Tuple <string, string> > content) { DatHeader datHeader = new DatHeader(Convert.ToUInt32(content.Count)); List <IndexTableRecord> indexTableRecords = new List <IndexTableRecord>(); List <ValueTableRecord> valueTableRecords = new List <ValueTableRecord>(); List <KeyTableRecord> keyTableRecords = new List <KeyTableRecord>(); foreach (Tuple <string, string> keyValuePair in content) { if (null == keyValuePair) { continue; } string key = keyValuePair.Item1?.Replace("\0", string.Empty) ?? string.Empty; string value = keyValuePair.Item2; if (StringUtility.IsNullEmptyOrWhiteSpace(key)) { throw new DatFileContentInvalidException( $"A key may never be null. Provided key-value-pair {keyValuePair.Item1}:{keyValuePair.Item2}"); } if (null == value) { value = ""; } ValueTableRecord valueTableRecord = new ValueTableRecord(value); KeyTableRecord keyTableRecord = new KeyTableRecord(key); IndexTableRecord indexTableRecord = new IndexTableRecord(ChecksumUtility.GetChecksum(key), Convert.ToUInt32(key.Length), Convert.ToUInt32(value.Length)); valueTableRecords.Add(valueTableRecord); keyTableRecords.Add(keyTableRecord); indexTableRecords.Add(indexTableRecord); } IndexTable indexTable = new IndexTable(indexTableRecords); ValueTable valueTable = new ValueTable(valueTableRecords); KeyTable keyTable = new KeyTable(keyTableRecords); return(new DatFile(datHeader, indexTable, valueTable, keyTable)); }