Esempio n. 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);
        }
Esempio n. 2
0
        public static T[] ReadArray <T>(SpanStream r) where T : unmanaged
        {
            uint numElements = r.ReadUInt32();

            T[] arr = new T[numElements];

            int tSize = Marshal.SizeOf <T>();

            for (int i = 0; i < numElements; i++)
            {
                unsafe
                {
                    fixed(byte *data = r.ReadBytes(tSize))
                    {
                        T element = *(T *)data;

                        arr.SetValue(element, i);
                    }
                }
            }

            return(arr);
        }
Esempio n. 3
0
        public static byte[] ReadBuffer(SpanStream r)
        {
            int numBytes = r.ReadInt32();

            return(r.ReadBytes(numBytes));
        }