MCPcopy Create free account
hub / github.com/ImageEngine/cortex / allocate

Method allocate

src/IECore/StreamIndexedIO.cpp:2307–2370  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2305}
2306
2307uint64_t StreamIndexedIO::Index::allocate( uint64_t sz )
2308{
2309 uint64_t loc = 0;
2310
2311 FreePagesSizeMap::iterator it = m_freePagesSize.find( sz );
2312
2313 if (it == m_freePagesSize.end())
2314 {
2315 it = m_freePagesSize.upper_bound( sz );
2316 }
2317
2318 if (it != m_freePagesSize.end())
2319 {
2320 assert( it->first >= sz );
2321 assert( m_freePagesOffset.find(it->second->m_offset) != m_freePagesOffset.end() );
2322
2323 uint64_t pageSize = it->first;
2324 FreePage *page = it->second;
2325
2326 assert( page );
2327 assert( page->m_size == it->first );
2328
2329 pageSize -= sz;
2330
2331 if (pageSize == 0)
2332 {
2333 /// Page now used entirely, so delete from the free pages list
2334 m_freePagesSize.erase(it);
2335 m_freePagesOffset.erase( page->m_offset );
2336
2337 assert( m_freePagesOffset.size() == m_freePagesSize.size() );
2338
2339 loc = page->m_offset;
2340 delete page;
2341 }
2342 else
2343 {
2344 /// Adjust the page to account for the consumed space, and reinsert into the sorted structures
2345 m_freePagesSize.erase( it );
2346 m_freePagesOffset.erase( page->m_offset );
2347
2348 assert( m_freePagesOffset.size() == m_freePagesSize.size() );
2349
2350 loc = page->m_offset;
2351
2352 addFreePage( page->m_offset+sz, page->m_size-sz );
2353
2354 delete page;
2355
2356
2357 }
2358
2359 assert( m_freePagesOffset.size() == m_freePagesSize.size() );
2360 }
2361 else
2362 {
2363 loc = m_next;
2364

Callers

nothing calls this directly

Calls 4

findMethod · 0.45
endMethod · 0.45
eraseMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected