/********************************************************************** * TABBinBlockManager::AllocNewBlock() * * Returns and reserves the address of the next available block, either a * brand new block at end of file, or recycle a garbage block if one is * available. **********************************************************************/ GInt32 TABBinBlockManager::AllocNewBlock(CPL_UNUSED const char* pszReason) { // Try to reuse garbage blocks first if (GetFirstGarbageBlock() > 0) { int nRetValue = PopGarbageBlock(); #ifdef DEBUG_VERBOSE CPLDebug("MITAB", "AllocNewBlock(%s, %s) = %d (recycling garbage block)", m_szName, pszReason, nRetValue); #endif return nRetValue; } // ... or alloc a new block at EOF if (m_nLastAllocatedBlock==-1) m_nLastAllocatedBlock = 0; else { CPLAssert(m_nBlockSize); m_nLastAllocatedBlock+=m_nBlockSize; } #ifdef DEBUG_VERBOSE CPLDebug("MITAB", "AllocNewBlock(%s, %s) = %d", m_szName, pszReason, m_nLastAllocatedBlock); #endif return m_nLastAllocatedBlock; }
/********************************************************************** * TABBinBlockManager::AllocNewBlock() * * Returns and reserves the address of the next available block, either a * brand new block at end of file, or recycle a garbage block if one is * available. **********************************************************************/ GInt32 TABBinBlockManager::AllocNewBlock() { // Try to reuse garbage blocks first if (GetFirstGarbageBlock() > 0) return PopGarbageBlock(); // ... or alloc a new block at EOF if (m_nLastAllocatedBlock==-1) m_nLastAllocatedBlock = 0; else m_nLastAllocatedBlock+=m_nBlockSize; return m_nLastAllocatedBlock; }