예제 #1
0
        public static CheckedRet <V> TryGet <K, V> (this Dictionary <K, V> dic, K key)
        {
            var r1 = default(V);
            var r2 = dic.TryGetValue(key, out r1);

            return(CheckedRet <V> .Gen(r2, r1));
        }
예제 #2
0
        public static CheckedRet <object> Deserial(ByteList bytes)
        {
            var size = bytes.DropInt32();

            if (bytes.Count != size)
            {
                return(CheckedRet <object> .Fail());
            }
            var ret = new Trfm();

            for (int i = 0; i < 3; i++)
            {
                var _size  = bytes.DropInt32();
                var _bytes = bytes.DropRange(0, _size);
                var _obj   = Serializer.Deserialize <Vec3>(_bytes);
                if (_obj.Key == false)
                {
                    return(CheckedRet <object> .Fail());
                }
                ret.mVal [i] = _obj.Value;
            }

            // 小数点に関わるため、ハッシュチェックはしない(できない)
            return(CheckedRet <object> .Gen(true, ret));
        }
예제 #3
0
        public CheckedRet <T> Pop()
        {
            if (Count < 1)
            {
                return(CheckedRet <T> .Fail());
            }
            var r = this [0];

            RemoveAt(0);
            return(CheckedRet <T> .Gen(true, r));
        }
예제 #4
0
        public static CheckedRet <T> Deserialize <T> (ByteList bytes)
        {
            var v = Instance.Implement.Deserial(bytes);

            if (v.Key == false)
            {
                return(CheckedRet <T> .Fail());
            }
            try {
                var val = (T)v.Value;
                return(CheckedRet <T> .Gen(true, val));
            } catch (Exception e) {
                DebugLog.Error.Print("parse fail<{0}>{1}", typeof(T).Name, e);
                return(CheckedRet <T> .Fail());
            }
        }
예제 #5
0
        public static CheckedRet <object> Deserial(ByteList bytes)
        {
            var size = bytes.DropInt32();

            if (bytes.Count != size)
            {
                return(CheckedRet <object> .Fail());
            }

            var ret = new Vec3();

            for (int i = 0; i < 3; i++)
            {
                ret.mVal [i] = bytes.DropFloat();
            }
            int hash = bytes.DropInt32();

            if (hash != ret.GetHashCode())
            {
                return(CheckedRet <object> .Fail());
            }
            return(CheckedRet <object> .Gen(true, ret));
        }
예제 #6
0
        public static CheckedRet <object> Deserial(ByteList bytes)
        {
            var size = bytes.DropInt32();

            if (bytes.Count != size)
            {
                throw new Exception("1");
                //   return CheckedRet<object>.Fail();
            }
            var ret = new Msg();

            var dic_size = bytes.DropInt32();

            for (int i = 0; i < dic_size; i++)
            {
                var k_l = bytes.DropInt32();
                var k   = Serializer.Deserialize <string>(bytes.DropRange(0, k_l));
                if (k.Key == false)
                {
                    throw new Exception("5");
                }
                var v_l = bytes.DropInt32();
                var v   = Serializer.Deserialize <string>(bytes.DropRange(0, v_l));
                if (v.Key == false)
                {
                    throw new Exception("6");
                }
                ret.Set(k.Value, v.Value);
            }

            var data_size = bytes.DropInt32();
            var h_s       = 0;

            if (data_size < 4)
            {
                h_s = bytes.DropInt32();
                if (ret.GetHashCode() != h_s)
                {
                    throw new Exception("2:" + ret.ToJson());
                }
                return((ret.GetHashCode() != h_s)
                    ? CheckedRet <object> .Fail()
                    : CheckedRet <object> .Gen(true, ret));
            }

            var data_bytes = bytes.DropRange(0, data_size);
            var obj        = Serializer.Deserialize <object>(data_bytes);

            if (obj.Key == false)
            {
                throw new Exception("3");
                //return CheckedRet<object>.Fail();
            }
            ret.mObjectData = obj.Value;

            h_s = bytes.DropInt32();
            if (ret.GetHashCode() != h_s)
            {
                throw new Exception("4");
            }

            return((ret.GetHashCode() != h_s)
                ? CheckedRet <object> .Fail()
                : CheckedRet <object> .Gen(true, ret));
        }