Exemplo n.º 1
0
 public ThreadSafeTypeKeyReferenceHashTable(ReadOnlySpan <Entry> entries, double loadFactor) : this(entries.Length, loadFactor)
 {
     foreach (ref readonly var entry in entries)
     {
         var     code  = entry.Key.GetHashCode() & bitMask;
         ref var array = ref pairArrayArray[code];
         HashTableHelper.Add(ref array, entry);
     }
Exemplo n.º 2
0
 public UInt16KeyByteArrayValueHashTable(ReadOnlySpan <Entry> entries, double loadFactor)
 {
     keys    = new ushort[HashTableHelper.CalcSize(entries.Length, loadFactor)][];
     values  = new byte[keys.Length][][];
     bitMask = (uint)(keys.Length - 1);
     foreach (ref readonly var entry in entries)
     {
         var     code     = entry.Key & bitMask;
         ref var keyArray = ref keys[code];
         HashTableHelper.Add(ref keyArray, entry.Key);
         ref var valueArray = ref values[code];
Exemplo n.º 3
0
        public unsafe ThreadSafeTypeKeyFormatterHashTable(ReadOnlySpan <Entry> entries, double loadFactor = 0.45d)
        {
            typeArrayArray = entries.Length == 0 ? new Type[256][] : new Type[HashTableHelper.CalcSize(entries.Length, loadFactor)][];

            bitMask = typeArrayArray.Length - 1;
            shift   = 0;
            var maxCount = 0;

            foreach (ref readonly var entry in entries)
            {
                var     entryKey = entry.Key;
                var     code     = entryKey.GetHashCode() & bitMask;
                ref var array    = ref typeArrayArray[code];
                HashTableHelper.Add(ref array, entryKey);

                if (maxCount < array.Length)
                {
                    maxCount = array.Length;
                }
            }