public void Serialize(object obj, BinaryDataWriter writer, IBaseline baseline)
 {
     for (int i = 0; i < _items.Count && i < byte.MaxValue; i++)
     {
         _items[i].Serialize(obj, writer, baseline);
     }
 }
Example #2
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);
            }
        }
        public void Serialize(object obj, BinaryDataWriter writer, IBaseline <byte> baseline)
        {
            Property <T> property = _getter(obj);

            if (baseline[_index] == property.Version)
            {
                return;
            }

            baseline[_index] = property.Version;
            writer.WriteByte(_index);
            _writer.Write(writer, property.Value);
        }
        public void Serialize(object obj, BinaryDataWriter writer, IBaseline <byte> baseline)
        {
            T   value    = _getter(obj);
            int hash     = _writer.GetHashCode(value);
            int baseHash = baseline[_index];

            if (baseHash == 0 && Equals(value, default) || baseHash == hash)
            {
                return;
            }
            baseline[_index] = hash;
            writer.WriteByte(_index);
            _writer.Write(writer, value);
        }
Example #5
0
        public void Serialize(object obj, BinaryDataWriter writer, IBaseline <TKey> baseline)
        {
            BinaryDataWriter     childWriter  = writer.TryWriteNode(sizeof(byte));
            Baseline <TChildKey> itemBaseline = baseline.GetOrCreateBaseline <Baseline <TChildKey> >(_index, _valuesCount, out bool isNew);

            _serializer.Serialize(_getter(obj), childWriter, itemBaseline);

            if (childWriter.Length <= 0 && !isNew)
            {
                return;
            }

            WriteKey(_index, writer);
            childWriter.PushNode();
        }
Example #6
0
        public override void Serialize(object obj, BinaryDataWriter writer, IBaseline <byte> baseline)
        {
            int value    = (int)Getter(obj);
            int baseHash = baseline[Index];

            if (baseHash == 0 && value == default || baseHash == value)
            {
                return;
            }

            baseline[Index] = value;

            writer.WriteByte(Index);
            writer.WriteInt(value);
        }
Example #7
0
 void IBinarySerializer.Serialize(object obj, BinaryDataWriter writer, IBaseline baseline)
 {
     Serialize(obj, writer, (IBaseline <TKey>)baseline);
 }
Example #8
0
 public OtherClass(IBaseline instance)
 {
     GenericInstance = instance;
 }
Example #9
0
 public abstract void Serialize(object obj, BinaryDataWriter writer, IBaseline <byte> baseline);