/// <summary> Saves key value index to stream. </summary> public static void Save(KeyValueIndex index, Stream stream) { using (var writer = new BinaryWriter(stream)) { writer.Write(index._capacity); writer.Write(index.PrefixLength); var buckets = index._buckets; for (int i = 0; i < buckets.Length; i++) { writer.Write(buckets[i]); } } }
/// <summary> Creates instance of <see cref="KeyValueStore"/>. </summary> /// <param name="index">Index.</param> /// <param name="usage">Usage.</param> /// <param name="stream">Stream.</param> public KeyValueStore(KeyValueIndex index, KeyValueUsage usage, Stream stream) { _prefixLength = index.PrefixLength; _stream = stream; // TODO configure consts _index = index; _usage = usage; // NOTE buffer size limited to byte.MaxValue which affect max string size _byteBuffer = new byte[256]; _charBuffer = new char[256]; // NOTE skip header _nextOffset = 2; stream.Seek(_nextOffset, SeekOrigin.Begin); }
/// <summary> Loads key value index from stream. </summary> public static KeyValueIndex Load(Stream stream) { using (var reader = new BinaryReader(stream)) { var capacity = reader.ReadInt32(); var prefixLength = reader.ReadInt32(); var index = new KeyValueIndex(capacity, prefixLength); var buckets = index._buckets; for (int i = 0; i < buckets.Length; i++) { buckets[i] = reader.ReadUInt32(); } return(index); } }