public int BinaryDeserialize(byte[] ioBuffer, int inOffset) { int offset = inOffset; offset = BinarySerializeUtils.Deserialize(ioBuffer, offset, out _name); offset = BinarySerializeUtils.Deserialize(ioBuffer, offset, out bool is_array); IsArray = is_array; offset = BinarySerializeUtils.Deserialize(ioBuffer, offset, out short size); _values.Clear(); for (int i = 0; i < size; i++) { offset = AddValue(ioBuffer, offset); } offset = BinarySerializeUtils.Deserialize(ioBuffer, offset, out size); _keys.Clear(); for (int i = 0; i < size; i++) { CKey child = CreateChild(this, string.Empty); offset = child.BinaryDeserialize(ioBuffer, offset); } return(offset); }
public int GetMemorySize() { int res = BinarySerializeUtils.GetStringMemorySize(Name); res += 1; //IsArray //2 байта - количество значений res += 2; //значения: for (int i = 0; i < _values.Count; i++) { IKeyValue val = _values[i]; res += val.GetMemorySize(); } //2 байта - количество подключей res += 2; //значения: for (int i = 0; i < _keys.Count; i++) { res += _keys[i].GetMemorySize(); } return(res); }
public int BinarySerialize(byte[] ioBuffer, int inOffset) { int offset = inOffset; offset = BinarySerializeUtils.Serialize((byte)VariantType, ioBuffer, offset); switch (VariantType) { case EValueType.Bool: case EValueType.Byte: offset = BinarySerializeUtils.Serialize((byte)_ulong_value1, ioBuffer, offset); break; case EValueType.Short: case EValueType.UShort: offset = BinarySerializeUtils.Serialize((ushort)_ulong_value1, ioBuffer, offset); break; case EValueType.Int: case EValueType.UInt: case EValueType.Float: offset = BinarySerializeUtils.Serialize((uint)_ulong_value1, ioBuffer, offset); break; case EValueType.Long: case EValueType.ULong: case EValueType.Double: offset = BinarySerializeUtils.Serialize(_ulong_value1, ioBuffer, offset); break; case EValueType.String: offset = BinarySerializeUtils.Serialize(ToString(), ioBuffer, offset); break; default: throw new ArgumentException($"Unknow type of value: {VariantType}"); } return(offset); }
public int GetMemorySize() { int res = 1; //byte for type switch (VariantType) { case EValueType.Bool: return(res + sizeof(bool)); case EValueType.Byte: return(res + sizeof(byte)); case EValueType.Short: return(res + sizeof(short)); case EValueType.UShort: return(res + sizeof(ushort)); case EValueType.Int: return(res + sizeof(int)); case EValueType.UInt: return(res + sizeof(uint)); case EValueType.Long: return(res + sizeof(long)); case EValueType.ULong: return(res + sizeof(ulong)); case EValueType.Float: return(res + sizeof(float)); case EValueType.Double: return(res + sizeof(double)); case EValueType.String: return(res + BinarySerializeUtils.GetStringMemorySize((string)_objref)); } throw new ArgumentException($"Unknow type of value: {VariantType}"); }
public static int BinaryDeserialize(byte[] ioBuffer, int inOffset, out Variant outValue) { int offset = inOffset; offset = BinarySerializeUtils.Deserialize(ioBuffer, offset, out byte vt); EValueType valueType = (EValueType)vt; ulong ulong_value = 0; string str = null; switch (valueType) { case EValueType.Bool: case EValueType.Byte: offset = BinarySerializeUtils.Deserialize(ioBuffer, offset, out byte byte_value); ulong_value = byte_value; break; case EValueType.Short: case EValueType.UShort: offset = BinarySerializeUtils.Deserialize(ioBuffer, offset, out ushort ushort_value); ulong_value = ushort_value; break; case EValueType.Int: case EValueType.UInt: case EValueType.Float: offset = BinarySerializeUtils.Deserialize(ioBuffer, offset, out uint uint_value); ulong_value = uint_value; break; case EValueType.Long: case EValueType.ULong: case EValueType.Double: offset = BinarySerializeUtils.Deserialize(ioBuffer, offset, out ulong_value); break; case EValueType.String: offset = BinarySerializeUtils.Deserialize(ioBuffer, offset, out str); break; default: throw new ArgumentException($"Unknow type of value: {valueType}"); } outValue = new Variant(); outValue._flags = (byte)valueType; outValue._ulong_value1 = ulong_value; outValue._objref = str; return(offset); }
public int BinarySerialize(byte[] ioBuffer, int inOffset) { int offset = inOffset; offset = BinarySerializeUtils.Serialize(_name, ioBuffer, offset); offset = BinarySerializeUtils.Serialize(IsArray, ioBuffer, offset); if (_values.Count > ushort.MaxValue) { throw new ArgumentException($"Key {GetPath()} has too many values (>{ushort.MaxValue})!"); } offset = BinarySerializeUtils.Serialize((ushort)_values.Count, ioBuffer, offset); for (int i = 0; i < _values.Count; i++) { IKeyValue val = _values[i]; offset = val.BinarySerialize(ioBuffer, offset); } if (_keys.Count > ushort.MaxValue) { throw new ArgumentException($"Key {GetPath()} has too many child keys (>{ushort.MaxValue})!"); } offset = BinarySerializeUtils.Serialize((ushort)_keys.Count, ioBuffer, offset); //значения: for (int i = 0; i < _keys.Count; i++) { IKey key = _keys[i]; offset = key.BinarySerialize(ioBuffer, offset); } return(offset); }