PropertyStringTableHeader ReadHeader() { using (LockRead()) { m_Fs.Seek(0, SeekOrigin.Begin); return(PropertyStringTableHeader.FromBinary(m_Br)); } }
void Create(int stringCount, int averageStringLength = DefaultAverageStringSize) { var header = new PropertyStringTableHeader(); header.version = Version; header.count = 0; header.symbolSlots = Math.Max(stringCount * HashFactor, 1); var bytesPerString = GetStringByteSize(averageStringLength); header.allocatedStringBytes = stringCount * bytesPerString; header.usedStringBytes = StringLengthByteSize; var buffer = new byte[Marshal.SizeOf <PropertyStringTableHeader>() + GetSymbolsByteSize(header.symbolSlots) + header.allocatedStringBytes]; TransactionUtils.SerializeInto(header, buffer, 0); using (var fs = File.Open(filePath, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite | FileShare.Delete)) fs.Write(buffer, 0, buffer.Length); }
void Create(int stringCount, int averageStringLength = DefaultAverageStringSize) { var header = new PropertyStringTableHeader(); header.version = Version; header.count = 0; header.symbolSlots = Math.Max(stringCount * HashFactor, 1); var bytesPerString = GetStringByteSize(averageStringLength); header.allocatedStringBytes = stringCount * bytesPerString; header.usedStringBytes = StringLengthByteSize; var buffer = new byte[GetSymbolsByteSize(header.symbolSlots) + header.allocatedStringBytes]; using (var bw = new BinaryWriter(File.Open(filePath, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite | FileShare.Delete))) { header.ToBinary(bw); bw.Write(buffer); } }
public PropertyStringTableView(PropertyStringTable stringTable, bool delayedSync) { m_StringTable = stringTable; m_Disposed = false; m_DelayedSync = delayedSync; using (LockRead()) { m_Fs = File.Open(stringTable.filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite | FileShare.Delete); m_Br = new BinaryReader(m_Fs, PropertyStringTable.encoding, true); m_Bw = new BinaryWriter(m_Fs, PropertyStringTable.encoding, true); } stringTable.RegisterStringTableChangedHandler(HandleStringTableChanged); m_Header = ReadHeader(); using (LockUpgradeableRead()) { if (m_Header.version != PropertyStringTable.Version) { Clear(); } } }
public PropertyStringTableView(PropertyStringTable stringTable, bool delayedSync) { m_StringTable = stringTable; m_Disposed = false; m_DelayedSync = delayedSync; m_SymbolBuffer = new byte[PropertyStringTable.SymbolByteSize]; m_StringBuffer = new byte[PropertyStringTable.DefaultAverageStringSize * sizeof(char)]; m_HeaderBuffer = new byte[Marshal.SizeOf <PropertyStringTableHeader>()]; using (LockRead()) { m_Fs = File.Open(stringTable.filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite | FileShare.Delete); } stringTable.RegisterStringTableChangedHandler(HandleStringTableChanged); m_Header = ReadHeader(); using (LockUpgradeableRead()) { if (m_Header.version != PropertyStringTable.Version) { Clear(); } } }
void NotifyStringTableChanged(PropertyStringTableHeader newHeader) { m_StringTable.NotifyStringTableChanged(newHeader); }
void HandleStringTableChanged(PropertyStringTableHeader newHeader) { using (LockWrite()) m_Header = newHeader; }
public void NotifyStringTableChanged(PropertyStringTableHeader newHeader) { using (LockUpgradeableRead()) m_StringTableChanged?.Invoke(newHeader); }