コード例 #1
0
        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);
                        }
                    }
                })));
            }
        }
コード例 #2
0
        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)));
            }
        }
コード例 #3
0
        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);
        }