Beispiel #1
0
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);
	}
}
Beispiel #2
0
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);
}
Beispiel #3
0
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);
	}
}
Beispiel #4
0
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);
}
Beispiel #5
0
int StringBrowser::SelectionIndex (int index) {
    return BufFind(index, strbuf, strcount, selbuf, selcount);
}