Ejemplo n.º 1
0
        public void Deserialize(MGRBData input)
        {
            foreach (var c in input.c)
            {
                Container con = null;
                if (c.t == CTYPE.ALLONES)
                {
                    con = new BitmapContainer(true);
                }
                else if (c.t == CTYPE.BITMAP)
                {
                    List <ulong> list    = new List <ulong>();
                    var          dataLen = c.d.Length;
                    for (int i = 0; i < dataLen; i += 8)
                    {
                        list.Add(ToULong(c.d, i));
                    }
                    con = new BitmapContainer(list.ToArray());
                }
                else if (c.t == CTYPE.OFFSET)
                {
                    List <ushort> list    = new List <ushort>();
                    var           dataLen = c.d.Length;
                    for (int i = 0; i < dataLen; i += 2)
                    {
                        list.Add(ToUShort(c.d, i));
                    }
                    con = new OffsetContainer(list);
                }
                else if (c.t == CTYPE.INV)
                {
                    List <ushort> list    = new List <ushort>();
                    var           dataLen = c.d.Length;
                    for (int i = 0; i < dataLen; i += 2)
                    {
                        list.Add(ToUShort(c.d, i));
                    }
                    con = new InvertedContainer(list);
                }
                //else
                //{
                //    List<ushort> list = new List<ushort>();
                //    var dataLen = c.d.Length;
                //    for (int i = 0; i < dataLen; i += 2)
                //    {
                //        list.Add(ToUShort(c.d, i));
                //    }
                //    con = new OffsetContainerSL(list);
                //}
                _containers.Add(c.i, con);
            }
            var k = _containers.Keys();
            var l = k.Length - 1;

            if (l >= 0)
            {
                _size = (k[l] << 16) + _containers.GetValue(l).Size;
            }
        }
Ejemplo n.º 2
0
        public MGRBData Serialize()
        {
            var d = new MGRBData();

            foreach (var c in _containers)
            {
                var cd = new CData();
                {
                    cd.i = (ushort)c.Key;
                    if (c.Value is BitmapContainer)
                    {
                        var bm = c.Value as BitmapContainer;
                        cd.t = CTYPE.BITMAP;
                        if (bm.ALLONE)
                        {
                            cd.t = CTYPE.ALLONES;
                        }
                        else
                        {
                            // get data
                            cd.d = ToByteArray(bm.Values());
                        }
                    }
                    else if (c.Value is OffsetContainer)
                    {
                        var of = c.Value as OffsetContainer;
                        cd.t = CTYPE.OFFSET;
                        cd.d = ToByteArray(of.Values());
                    }
                    else if (c.Value is InvertedContainer)
                    {
                        var inv = c.Value as InvertedContainer;
                        cd.t = CTYPE.INV;
                        cd.d = ToByteArray(inv.Values());
                    }
                    //else
                    //{
                    //    var of = c.Value as OffsetContainerSL;
                    //    cd.t = CTYPE.OFFSETSL;
                    //    var b = new byte[cd.d.Length];
                    //    int k = 0;
                    //    foreach (var i in of._values)
                    //    {
                    //        Buffer.BlockCopy(GetBytes(i.Key, false), 0, b, k, 2);
                    //        k += 2;
                    //    }
                    //    cd.d = b;
                    //}

                    d.c.Add(cd);
                }
            }
            return(d);
        }