Beispiel #1
0
        public static Dictionary <Tkey, Tval> ReadMap <Tkey, Tval>(SpanStream r)
            where Tkey : unmanaged
            where Tval : unmanaged
        {
            // sum of bitsizes of each member
            uint cardinality = r.ReadUInt32();
            int  numElements = r.ReadInt32();

            BitSet available = new BitSet(ReadArray <UInt32>(r));
            BitSet deleted   = new BitSet(ReadArray <UInt32>(r));

            int keySize   = Marshal.SizeOf <Tkey>();
            int valueSize = Marshal.SizeOf <Tval>();

            Dictionary <Tkey, Tval> map = new Dictionary <Tkey, Tval>(numElements);

            for (int i = 0; i < numElements; i++)
            {
                if (!available.Contains(i))
                {
                    continue;
                }
                unsafe
                {
                    fixed(byte *pKey = r.ReadBytes(keySize))
                    fixed(byte *pVal = r.ReadBytes(valueSize))
                    {
                        Tkey key = *(Tkey *)pKey;
                        Tval val = *(Tval *)pVal;

                        map.Add(key, val);
                    }
                }
            }

            return(map);
        }
Beispiel #2
0
        public static byte[] ReadBuffer(SpanStream r)
        {
            int numBytes = r.ReadInt32();

            return(r.ReadBytes(numBytes));
        }