private IEnumerable <KeyValuePair <TKey, TemplateTableLoadData <TKey, TValue> > > LoadDelayed() { TKey[] keys; int[] valueLengths; byte[] valueBuf; TemplateTableBsonPackIO <TKey> .LoadHeader(_stream, out keys, out valueLengths, out valueBuf); var valueBufOffset = 0; for (var i = 0; i < keys.Length; i++) { var ms = new MemoryStream(valueBuf, valueBufOffset, valueLengths[i]); valueBufOffset += valueLengths[i]; var valueFunc = _referenceTable.TryGetFunc(keys[i]); yield return(new KeyValuePair <TKey, TemplateTableLoadData <TKey, TValue> >( keys[i], new TemplateTableLoadData <TKey, TValue>(_ => { using (var reader = new BsonReader(ms)) { if (valueFunc != null) { var value = valueFunc(); _serializer.Populate(reader, value); return value; } else { return _serializer.Deserialize <TValue>(reader); } } }))); } }
public IEnumerable <KeyValuePair <TKey, TemplateTableLoadData <TKey, TValue> > > LoadNow() { TKey[] keys; int[] valueLengths; byte[] valueBuf; TemplateTableBsonPackIO <TKey> .LoadHeader(_stream, out keys, out valueLengths, out valueBuf); var valueBufOffset = 0; for (var i = 0; i < keys.Length; i++) { var ms = new MemoryStream(valueBuf, valueBufOffset, valueLengths[i]); valueBufOffset += valueLengths[i]; TValue value = _referenceTable.TryGet(keys[i]); using (var reader = new BsonReader(ms)) { if (value != null) { _serializer.Populate(reader, value); } else { value = _serializer.Deserialize <TValue>(reader); } } yield return(new KeyValuePair <TKey, TemplateTableLoadData <TKey, TValue> >( keys[i], new TemplateTableLoadData <TKey, TValue>(value))); } }
public void SaveTo(TemplateTable <TKey, TValue> table, Stream stream) { var itemList = table.Select(i => { JToken token; using (var writer = new JTokenWriter()) { _serializer.Serialize(writer, i.Value); token = writer.Token; } return(new KeyValuePair <TKey, JToken>(i.Key, token)); }); TemplateTableBsonPackIO <TKey> .Save(itemList, stream); }