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); } }
private byte[] _NullBuffer() { var idCount = Varint.GetByteCount(0); var buffer = new byte[idCount]; Varint.NumberToBuffer(buffer, 0, 0); return(buffer); }
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); } }
public static int NumberToBuffer(byte[] buffer, int offset, int value) { return(Varint.NumberToBuffer(buffer, offset, (ulong)value)); }
int IKeyDescriber.ToBuffer(Type type, byte[] buffer, int begin) { int id = _Get(type); return(Varint.NumberToBuffer(buffer, begin, id)); }