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

Method GetBasePointer

NULLC/StdLib.cpp:147–173  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

145 return false;
146 }
147 void* GetBasePointer(void* ptr)
148 {
149 if(!sortedPages.size() || ptr < sortedPages[0] || ptr > (char*)sortedPages.back() + sizeof(MyLargeBlock))
150 return NULL;
151 // Binary search
152 unsigned int lowerBound = 0;
153 unsigned int upperBound = sortedPages.size() - 1;
154 unsigned int pointer = 0;
155 while(upperBound - lowerBound > 1)
156 {
157 pointer = (lowerBound + upperBound) >> 1;
158 if(ptr < sortedPages[pointer])
159 upperBound = pointer;
160 if(ptr > sortedPages[pointer])
161 lowerBound = pointer;
162 }
163 if(ptr < sortedPages[pointer])
164 pointer--;
165 if(ptr > (char*)sortedPages[pointer] + sizeof(MyLargeBlock))
166 pointer++;
167 MyLargeBlock *best = sortedPages[pointer];
168
169 if(ptr < best || ptr > (char*)best + sizeof(MyLargeBlock))
170 return NULL;
171 unsigned int fromBase = (unsigned int)(intptr_t)((char*)ptr - (char*)best->page);
172 return (char*)best->page + (fromBase & ~(elemSize - 1)) + sizeof(markerType);
173 }
174 void Mark(unsigned int number)
175 {
176 assert(number <= 1);

Callers

nothing calls this directly

Calls 1

sizeMethod · 0.45

Tested by

no test coverage detected