Ejemplo n.º 1
0
        private static K **GetNextPtr(K *ptr)
        {
            UIntPtr num = new UIntPtr(ptr);

            num += (sizeof(K) + sizeof(V));
            return((K **)num);
        }
Ejemplo n.º 2
0
        private void Resize(int targetSize)
        {
            K **newData = (K **)UnsafeUtility.Malloc(targetSize * 8, 16, data->alloc);

            UnsafeUtility.MemClear(newData, targetSize * 8);
            K **oldPtr = (K **)data->start;

            for (int i = 0; i < data->capacity; ++i)
            {
                K *currentPtr = oldPtr[i];
                while (currentPtr != null)
                {
                    AddTo(*currentPtr, *GetV(currentPtr), targetSize, newData);
                    currentPtr = *GetNextPtr(currentPtr);
                }
                currentPtr = oldPtr[i];
                while (currentPtr != null)
                {
                    K *next = *GetNextPtr(currentPtr);
                    UnsafeUtility.Free(currentPtr, data->alloc);

                    currentPtr = next;
                }
            }
            UnsafeUtility.Free(data->start, data->alloc);
            data->start    = newData;
            data->capacity = targetSize;
        }
Ejemplo n.º 3
0
        private static K **GetNextPtr(K *ptr)
        {
            ulong num = (ulong)ptr;

            num += (ulong)(sizeof(K) + sizeof(V));
            return((K **)num);
        }
Ejemplo n.º 4
0
        public void Remove(K key)
        {
            int index      = Mathf.Abs(key.GetHashCode()) % data->capacity;
            K **currentPtr = GetK(index);

            while ((*currentPtr) != null)
            {
                K **next = GetNextPtr(*currentPtr);
                if (equalFunc.Run(ref **currentPtr, ref key))
                {
                    K *prev = *currentPtr;
                    *currentPtr = *next;
                    UnsafeUtility.Free(prev, data->alloc);
                    data->length--;
                    return;
                }
                else
                {
                    currentPtr = next;
                }
            }
        }
Ejemplo n.º 5
0
        public void Remove(K key)
        {
            Func <K, K, bool> equalsFunc = MUnsafeUtility.GetObject <Func <K, K, bool> >(this.equalsFunc);
            int index      = Mathf.Abs(key.GetHashCode()) % data->capacity;
            K **currentPtr = GetK(index);

            while ((*currentPtr) != null)
            {
                K **next = GetNextPtr(*currentPtr);
                if (equalsFunc(**currentPtr, key))
                {
                    K *prev = *currentPtr;
                    *currentPtr = *next;
                    UnsafeUtility.Free(prev, data->alloc);
                    data->length--;
                    return;
                }
                else
                {
                    currentPtr = next;
                }
            }
        }
Ejemplo n.º 6
0
        private void Resize(int targetSize)
        {
            K **newData = (K **)MUnsafeUtility.Malloc(targetSize * 8, data->alloc);

            UnsafeUtility.MemClear(newData, targetSize * 8);
            K **oldPtr = (K **)data->start;

            for (int i = 0; i < data->capacity; ++i)
            {
                K *currentPtr = oldPtr[i];
                while (currentPtr != null)
                {
                    K *nextPtr = *GetNextPtr(currentPtr);
                    //AddTo(*currentPtr, *GetV(currentPtr), targetSize, newData);
                    int hashCode = Mathf.Abs((*currentPtr).GetHashCode()) % targetSize;
                    *GetNextPtr(currentPtr) = newData[hashCode];
                    newData[hashCode]       = currentPtr;
                    currentPtr = nextPtr;
                }
            }
            UnsafeUtility.Free(data->start, data->alloc);
            data->start    = newData;
            data->capacity = targetSize;
        }
Ejemplo n.º 7
0
 private static V *GetV(K *ptr)
 {
     return((V *)(ptr + 1));
 }
Ejemplo n.º 8
0
 public HRESULT get_Key([NativeTypeName("K_abi *")] K *key)
 {
     return(((delegate * unmanaged <IKeyValuePair <K, V> *, K *, int>)(lpVtbl[6]))((IKeyValuePair <K, V> *)Unsafe.AsPointer(ref this), key));
 }
Ejemplo n.º 9
0
 public HRESULT get_Key([NativeTypeName("K_abi *")] K *value)
 {
     return(((delegate * unmanaged <IMapChangedEventArgs <K> *, K *, int>)(lpVtbl[7]))((IMapChangedEventArgs <K> *)Unsafe.AsPointer(ref this), value));
 }