void smPrintBlocks(Structure_Manager *pSM) { void *pCurBlock, *pNextBlock; printf("blocks for SM %p size %" UIntfmt "\n",pSM,(UInteger)SM_NewBlockSize(*pSM)); pCurBlock = SM_CurBlock(*pSM); while ( IsNonNULL(pCurBlock) ) { printf("Block %p\n",pCurBlock); pNextBlock = SMBlk_NextBlock(pCurBlock); // mem_dealloc(pCurBlock,SM_NewBlockSize(*pSM),TABLE_SPACE); pCurBlock = pNextBlock; } }
void smFreeBlocks(Structure_Manager *pSM) { void *pCurBlock, *pNextBlock; pCurBlock = SM_CurBlock(*pSM); while ( IsNonNULL(pCurBlock) ) { pNextBlock = SMBlk_NextBlock(pCurBlock); mem_dealloc(pCurBlock,SM_NewBlockSize(*pSM),TABLE_SPACE); pCurBlock = pNextBlock; } SM_CurBlock(*pSM) = SM_NextStruct(*pSM) = SM_LastStruct(*pSM) = NULL; SM_AllocList(*pSM) = SM_FreeList(*pSM) = NULL; }
void smAllocateBlock(Structure_Manager *pSM) { void *pNewBlock; pNewBlock = mem_calloc(SM_NewBlockSize(*pSM),1,TABLE_SPACE); // if ( IsNULL(pNewBlock) ) // xsb_resource_error_nopred("memory","[smAllocateBlock] Out of memory in allocation of %s block\n", // SM_StructName(*pSM)); SMBlk_NextBlock(pNewBlock) = SM_CurBlock(*pSM); SM_CurBlock(*pSM) = pNewBlock; SM_NextStruct(*pSM) = SMBlk_FirstStruct(pNewBlock); SM_LastStruct(*pSM) = SMBlk_LastStruct(pNewBlock, SM_StructSize(*pSM), SM_StructsPerBlock(*pSM)); dbg_smPrint(LOG_STRUCT_MANAGER, *pSM,"after block allocation"); }
void smAllocateBlock(Structure_Manager *pSM) { void *pNewBlock; dbg_smPrint(LOG_STRUCT_MANAGER, *pSM,"before block allocation"); pNewBlock = malloc(SM_NewBlockSize(*pSM)); if ( IsNULL(pNewBlock) ) xsb_abort("[smAllocateBlock] Out of memory in allocation of %s block\n", SM_StructName(*pSM)); SMBlk_NextBlock(pNewBlock) = SM_CurBlock(*pSM); SM_CurBlock(*pSM) = pNewBlock; SM_NextStruct(*pSM) = SMBlk_FirstStruct(pNewBlock); SM_LastStruct(*pSM) = SMBlk_LastStruct(pNewBlock, SM_StructSize(*pSM), SM_StructsPerBlock(*pSM)); dbg_smPrint(LOG_STRUCT_MANAGER, *pSM,"after block allocation"); }