Ejemplo n.º 1
0
        public void Serialize(object obj, BinaryDataWriter writer, IBaseline <TKey> baseline)
        {
            IBinaryObjectCollection <TKey> collections = (IBinaryObjectCollection <TKey>)obj;

            List <TKey> baseKeys = new List <TKey>(baseline.BaselineKeys);

            foreach (TKey key in collections.Keys)
            {
                BinaryDataWriter itemWriter   = writer.TryWriteNode(_keySize);
                Baseline <byte>  itemBaseline = baseline.GetOrCreateBaseline <Baseline <byte> >(key, _itemSerializer.Count, out bool isNew);

                _itemSerializer.Serialize(collections[key], itemWriter, itemBaseline);
                if (itemWriter.Length > 0 || isNew)
                {
                    _writer.Write(writer, key);
                    itemWriter.PushNode();
                }

                baseKeys.Remove(key);
            }

            if (baseKeys.Count <= 0)
            {
                return;
            }

            _writer.Write(writer, _reservedKey);

            foreach (TKey key in baseKeys)
            {
                _writer.Write(writer, key);
                baseline.DestroyBaseline(key);
            }
        }
Ejemplo n.º 2
0
        public void Update(object obj, BinaryDataReader reader)
        {
            IBinaryObjectCollection <TKey> collection = (IBinaryObjectCollection <TKey>)obj;

            while (reader.Position < reader.Length)
            {
                TKey key = _writer.Read(reader);
                if (_reservedKey.Equals(key))
                {
                    break;
                }

                using (BinaryDataReader itemReader = reader.ReadNode())
                {
                    if (!collection.TryGetValue(key, out object value))
                    {
                        value = _itemCreator();
                        collection.Add(key, value);
                    }
                    _itemSerializer.Update(value, itemReader);
                }
            }

            while (reader.Position < reader.Length)
            {
                collection.Remove(_writer.Read(reader));
            }
        }
Ejemplo n.º 3
0
        public void Serialize(object obj, BinaryDataWriter writer)
        {
            IBinaryObjectCollection <TKey> collection = (IBinaryObjectCollection <TKey>)obj;

            foreach (TKey key in collection.Keys)
            {
                if (_reservedKey.Equals(key))
                {
                    throw new ArgumentException();
                }

                BinaryDataWriter itemWriter = writer.TryWriteNode(_keySize);
                _itemSerializer.Serialize(collection[key], itemWriter);
                _writer.Write(writer, key);
                itemWriter.PushNode();
            }
        }