Exemple #1
0
        int ITypeDescriber.ToBuffer(object instance, byte[] buffer, int begin)
        {
            try
            {
                var set    = _GetSet(instance);
                var offset = begin;
                offset += Varint.NumberToBuffer(buffer, offset, set.TotalLength);
                offset += Varint.NumberToBuffer(buffer, offset, set.ValidLength);


                for (int i = 0; i < set.ValidObjects.Length; i++)
                {
                    var index = set.ValidObjects[i].Index;
                    var obj   = set.ValidObjects[i].Object;
                    offset += Varint.NumberToBuffer(buffer, offset, index);
                    var objType   = obj.GetType();
                    var describer = _TypeSet.Get(objType);
                    offset += _TypeSet.Get().ToBuffer(objType, buffer, offset);
                    offset += describer.ToBuffer(obj, buffer, offset);
                }

                return(offset - begin);
            }
            catch (Exception ex)
            {
                throw new DescriberException(typeof(ArrayDescriber), _Type, "ToBuffer", ex);
            }
        }
Exemple #2
0
        private byte[] _NullBuffer()
        {
            var idCount = Varint.GetByteCount(0);
            var buffer  = new byte[idCount];

            Varint.NumberToBuffer(buffer, 0, 0);
            return(buffer);
        }
Exemple #3
0
        int ITypeDescriber.ToBuffer(object instance, byte[] buffer, int begin)
        {
            try
            {
                int offset      = begin;
                var validFields = _Fields.Select(
                    (field, index) => new
                {
                    field,
                    index
                }).Where(validField => object.Equals(_GetDescriber(validField.field).Default, validField.field.GetValue(instance)) == false)
                                  .ToArray();

                offset += Varint.NumberToBuffer(buffer, offset, validFields.Length);


                foreach (var validField in validFields)
                {
                    var index = validField.index;
                    offset += Varint.NumberToBuffer(buffer, offset, index);
                    var field     = validField.field;
                    var value     = field.GetValue(instance);
                    var valueType = value.GetType();
                    offset += _TypeSet.Get().ToBuffer(valueType, buffer, offset);
                    var describer = _TypeSet.Get(valueType);
                    offset += describer.ToBuffer(value, buffer, offset);
                }


                return(offset - begin);
            }
            catch (Exception ex)
            {
                throw new DescriberException(typeof(ClassDescriber), _Type, "ToBuffer", ex);
            }
        }
Exemple #4
0
 public static int NumberToBuffer(byte[] buffer, int offset, int value)
 {
     return(Varint.NumberToBuffer(buffer, offset, (ulong)value));
 }
Exemple #5
0
        int IKeyDescriber.ToBuffer(Type type, byte[] buffer, int begin)
        {
            int id = _Get(type);

            return(Varint.NumberToBuffer(buffer, begin, id));
        }