private static K **GetNextPtr(K *ptr) { UIntPtr num = new UIntPtr(ptr); num += (sizeof(K) + sizeof(V)); return((K **)num); }
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; }
private static K **GetNextPtr(K *ptr) { ulong num = (ulong)ptr; num += (ulong)(sizeof(K) + sizeof(V)); return((K **)num); }
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; } } }
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; } } }
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; }
private static V *GetV(K *ptr) { return((V *)(ptr + 1)); }
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)); }
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)); }