00190 {
00191 ULONG Hash = 0;
00192 unsigned int i;
00193 PFULL_PTR_TO_REFID_ELEMENT XlatTableEntry;
00194
00195 TRACE("(%p, 0x%x, %p)\n", pXlatTables, RefId, pPointer);
00196
00197
00198 for (i = 0; i < sizeof(pPointer); i++)
00199 Hash = (Hash * 3) ^ ((unsigned char *)&pPointer)[i];
00200
00201 XlatTableEntry = HeapAlloc(GetProcessHeap(), 0, sizeof(*XlatTableEntry));
00202 XlatTableEntry->Next = pXlatTables->PointerToRefId.XlatTable[Hash & pXlatTables->PointerToRefId.HashMask];
00203 XlatTableEntry->Pointer = pPointer;
00204 XlatTableEntry->RefId = RefId;
00205 XlatTableEntry->State = 0;
00206 pXlatTables->PointerToRefId.XlatTable[Hash & pXlatTables->PointerToRefId.HashMask] = XlatTableEntry;
00207
00208
00209 expand_pointer_table_if_necessary(pXlatTables, RefId);
00210 if (pXlatTables->RefIdToPointer.NumberOfEntries > RefId)
00211 pXlatTables->RefIdToPointer.XlatTable[XlatTableEntry->RefId] = pPointer;
00212 }