Esempio n. 1
0
 public void UnPackMap <TKey, TValue>(uint tag, string name, bool require, IDictionary <TKey, TValue> val)
 {
     val.Clear();
     if (SkipToTag(tag))
     {
         SdpPackDataType type = UnPackHead(ref tag);
         if (type == SdpPackDataType.SdpPackDataType_Map)
         {
             uint iSize = Unpack32();
             if (val == null)
             {
                 val = new Dictionary <TKey, TValue>((int)iSize);
             }
             ISerializer keySer = Sdp.GetSerializer <TKey>();
             ISerializer valSer = Sdp.GetSerializer <TValue>();
             for (var i = 0; i < iSize; ++i)
             {
                 TKey   key   = Activator.CreateInstance <TKey>();
                 TValue value = Activator.CreateInstance <TValue>();
                 key   = (TKey)keySer.Read(this, 0, require, key);
                 value = (TValue)valSer.Read(this, 0, require, value);
                 if (val.ContainsKey(key))
                 {
                     val.Remove(key);
                 }
                 val.Add(key, value);
             } //for
         }     //if
     }         //if
 }
Esempio n. 2
0
        static void Main(string[] args)
        {
            TestSdp sdp = new TestSdp();

            sdp.Values.Add(1);
            sdp.iValue   = 127;
            sdp.strValue = "1";
            sdp.KeyValues.Add(1, DateTime.Now);
            TestSdp sdp2 = new TestSdp();

            sdp2.Deserialize(Sdp.Serializer(sdp));

            //List<int> list = new List<int>() { 1, 21, 3, 4 };
            //List<int> ls2 = Sdp.Deserialize<List<int>>(Sdp.Serializer(list));

            //DateTime now = DateTime.Parse("2017/3/19");
            //Console.WriteLine(CalNextWeekDay(now, 7, 24));

            //List<eTest> list = new List<eTest>() { eTest.eFirst, eTest.eSecond };
            //List<eTest> ls2 = Sdp.Deserialize<List<eTest>>(Sdp.Serializer(list));

            /*
             * eTest test = (eTest)0x2106;
             * Console.WriteLine(test.ToString());
             * Console.ReadKey();
             */
            Console.ReadKey();
        }
Esempio n. 3
0
 public void Visit <T>(uint tag, string name, bool require, ref List <T> val)
 {
     if (require || val.Count > 0)
     {
         PackHead(tag, SdpPackDataType.SdpPackDataType_Vector);
         PackNum32((uint)val.Count);
         ISerializer ser = Sdp.GetSerializer <T>();
         foreach (var t in val)
         {
             ser.Write(t, this, 0, true);
         }
     }
 }
Esempio n. 4
0
 public void Visit <TKey, TValue>(uint tag, string name, bool require, ref Dictionary <TKey, TValue> val)
 {
     if (require || val.Count > 0)
     {
         PackHead(tag, SdpPackDataType.SdpPackDataType_Map);
         PackNum32((uint)val.Count);
         ISerializer keySer = Sdp.GetSerializer <TKey>();
         ISerializer valSer = Sdp.GetSerializer <TValue>();
         foreach (var pair in val)
         {
             keySer.Write(pair.Key, this, 0, true);
             valSer.Write(pair.Value, this, 0, true);
         }
     }
 }
Esempio n. 5
0
        public bool UnPack <T>(ref T val, uint tag)
        {
            var ser = Sdp.GetSerializer <T>();

            if (val == null)
            {
                val = Activator.CreateInstance <T>();
            }
            if (ser != null)
            {
                val = (T)ser.Read(this, tag, true, val);
                return(true);
            }
            else
            {
                Type type = typeof(T);
                if (type.IsEnum)
                {
                    VisitEunm(tag, null, true, ref val);
                    return(true);
                }
                else
                {
                    if (Sdp.IsContainer(type))
                    {
                        Type[]   genericTypes = type.GetGenericArguments();
                        object[] args         = new object[] { tag, null, true, val };
                        if (genericTypes.Length == 1)
                        {
                            _UnPackList.MakeGenericMethod(genericTypes).Invoke(this, args);
                            return(true);
                        }
                        else if (genericTypes.Length == 2)
                        {
                            _UnPackMap.MakeGenericMethod(genericTypes).Invoke(this, args);
                            return(true);
                        }
                    }
                }
            }
            return(false);
        }
Esempio n. 6
0
 public void Visit <T>(uint tag, string name, bool require, ref List <T> val)
 {
     if (SkipToTag(tag))
     {
         SdpPackDataType type = UnPackHead(ref tag);
         if (type == SdpPackDataType.SdpPackDataType_Vector)
         {
             uint iSize = Unpack32();
             if (val == null)
             {
                 val = new List <T>((int)iSize);
             }
             ISerializer ser = Sdp.GetSerializer <T>();
             for (uint i = 0; i < iSize; ++i)
             {
                 T t = Activator.CreateInstance <T>();
                 t = (T)ser.Read(this, 0, require, t);
                 val.Add(t);
             } //for
         }     //if
     }         //if
 }