MCPcopy Create free account
hub / github.com/WheretIB/nullc / GetBasePointer

Method GetBasePointer

NULLC/translation/runtime.cpp:1179–1205  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1177 return false;
1178 }
1179 void* GetBasePointer(void* ptr)
1180 {
1181 if(!sortedPages.size() || ptr < sortedPages[0] || ptr > (char*)sortedPages.back() + sizeof(MyLargeBlock))
1182 return NULL;
1183 // Binary search
1184 unsigned int lowerBound = 0;
1185 unsigned int upperBound = sortedPages.size() - 1;
1186 unsigned int pointer = 0;
1187 while(upperBound - lowerBound > 1)
1188 {
1189 pointer = (lowerBound + upperBound) >> 1;
1190 if(ptr < sortedPages[pointer])
1191 upperBound = pointer;
1192 if(ptr > sortedPages[pointer])
1193 lowerBound = pointer;
1194 }
1195 if(ptr < sortedPages[pointer])
1196 pointer--;
1197 if(ptr > (char*)sortedPages[pointer] + sizeof(MyLargeBlock))
1198 pointer++;
1199 MyLargeBlock *best = sortedPages[pointer];
1200
1201 if(ptr < best || ptr > (char*)best + sizeof(MyLargeBlock))
1202 return NULL;
1203 unsigned int fromBase = (unsigned int)(intptr_t)((char*)ptr - (char*)best->page);
1204 return (char*)best->page + (fromBase & ~(elemSize - 1)) + 4;
1205 }
1206 void Mark(unsigned int number)
1207 {
1208 __assert(number < 128);

Callers

nothing calls this directly

Calls 1

sizeMethod · 0.45

Tested by

no test coverage detected