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; } }
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); }