コード例 #1
0
ファイル: TreeKeys.cs プロジェクト: Isuroku/Cascade
        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);
        }
コード例 #2
0
ファイル: TreeKeys.cs プロジェクト: Isuroku/Cascade
        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);
        }
コード例 #3
0
ファイル: Variant.cs プロジェクト: Isuroku/Cascade
        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);
        }
コード例 #4
0
ファイル: Variant.cs プロジェクト: Isuroku/Cascade
        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}");
        }
コード例 #5
0
ファイル: Variant.cs プロジェクト: Isuroku/Cascade
        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);
        }
コード例 #6
0
ファイル: TreeKeys.cs プロジェクト: Isuroku/Cascade
        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);
        }