int runTestCase(CASE* c, linked_list* list) { int retval = 0; switch(c->op) { case ADD_FRONT: retval = addToHead(list, &(c->value)); break; case ADD_BACK: retval = addToTail(list, &(c->value)); break; case REMOVE_FRONT: retval = *((int*) removeFromHead(list)); break; case REMOVE_BACK: retval = *((int*) removeFromTail(list)); break; case SIZE: retval = list -> size; break; } if (retval != c->expected) { printf("failure, want %d, got %d\n", c->expected, retval); return FAILURE; } return SUCCESS; }
BM_Frame *findLRU(BM_BufferPool *const bm) { // Retrieve management data BM_MgmtData *mgmtData = bm->mgmtData; RC lruResult = RC_OK; BM_Frame *frame; BM_Node *head = mgmtData->head; frame = removeFromTail(head)->frame; return frame; }
BM_Frame *findFIFO(BM_BufferPool *const bm) { // Retrieve management data BM_MgmtData *mgmtData = bm->mgmtData; RC fifoResult = RC_OK; BM_Frame *frame = NULL; BM_Node *head = mgmtData->head; // Do we have a head or do we need to create a list? if(head == NULL){ head = newNode(&mgmtData->framePool[0]); int i; for (i = 0; i < bm->numPages; i++) { BM_Frame *checkFrame = &mgmtData->framePool[i]; frame = &mgmtData->framePool[i]; insertAtHead(&head, frame); } mgmtData->head = head; } //in use frame = removeFromTail(head)->frame; while(frame->fixCount == 1){ insertAtHead(&head, frame); frame = removeFromTail(head)->frame; } //must write data before using if (frame->isDirty && frame->fixCount == 0) { RC writeBlockResult = writeBlock(frame->pageNum, &mgmtData->fh, frame->memPage); mgmtData->ioWrites++; frame->isDirty = FALSE; } return frame; }
void pop(TableManager *tableManager, Pager *dp, int pageno) { if (dp->prev==0 && dp->next==0) return; if (pageno == tableManager->pageNo){ removeFromHead(tableManager, dp, pageno); } else if (dp->next == 0){ removeFromTail(tableManager, dp, pageno); } else if (dp->next != 0 && dp->prev != 0){ removeFromMiddle(tableManager, dp, pageno); } }