void BufWrite(int blkno, void* pData) { Buf* find = BufFind(blkno); Buf* pNewBuf; // HIT if (find != NULL) { if (find->state == BUF_STATE_CLEAN && find->state != -1) { // Move to Dirty list. find->state = BUF_STATE_DIRTY; BufDeleteBuf(find); BufInsertToTail(find, blkno, BUF_LIST_DIRTY); } LruInsert(find); memmove(find->pMem, pData, strlen(pData) + 1); } // MISS else { // Create New Buffer pNewBuf = BufGetNewBuffer(); pNewBuf->blkno = blkno; pNewBuf->state = BUF_STATE_DIRTY; BufInsertToTail(pNewBuf, pNewBuf->blkno, BUF_LIST_DIRTY); LruInsert(pNewBuf); memmove(pNewBuf->pMem, pData, strlen(pData) + 1); } }
void BufWrite(int blkno, void* pData) { Buf* pBuf; pBuf = BufFind(blkno); if( pBuf == NULL ) { char ptr_tmp_data[BLOCK_SIZE]; BufRead(blkno, ptr_tmp_data); pBuf = BufFind(blkno); } removeClean(blkno); if( ! existDirty(blkno) ) { insertDirty(pBuf); } removeLru(blkno); insertLru(pBuf); copyBlock((char*)pData, (char*)pBuf->pMem); }
void BufRead(int blkno, void* pData) { Buf* find = BufFind(blkno); Buf* pNewBuf; // HIT if (find != NULL) { LruInsert(find); //pData = find->pMem; memmove(pData, find->pMem, strlen(find->pMem) + 1); } // MISS else { // Create New Buffer pNewBuf = BufGetNewBuffer(); pNewBuf->blkno = blkno; pNewBuf->state = BUF_STATE_CLEAN; DevReadBlock(blkno, pNewBuf->pMem); BufInsertToTail(pNewBuf, pNewBuf->blkno, BUF_LIST_CLEAN); LruInsert(pNewBuf); memmove(pData, pNewBuf->pMem, strlen(pNewBuf->pMem) + 1); } }
void BufRead(int blkno, void* pData) { Buf* pBuf; pBuf = BufFind(blkno); if( pBuf != NULL ) { removeLru(blkno); insertLru(pBuf); copyBlock((char*)pBuf->pMem, (char*)pData); return; } pBuf = popFree(); pBuf->blkno = blkno; //pBuf->pMem = (void*)malloc(BLOCK_SIZE); DevReadBlock(blkno, (char*)pBuf->pMem); insertHash(pBuf); insertClean(pBuf); removeLru(blkno); insertLru(pBuf); copyBlock((char*)pBuf->pMem, (char*)pData); }
int StringBrowser::SelectionIndex (int index) { return BufFind(index, strbuf, strcount, selbuf, selcount); }