예제 #1
0
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;
}
예제 #2
0
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;
}
예제 #3
0
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;
}
예제 #4
0
파일: scanner.c 프로젝트: bjs007/DataBase
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);
    }
}