void cacheInsertPage (Page * ret) { bufferSize++; assert(!ret->inCache); ret->inCache ++; if(cache_state == FULL) { middleInsert(ret); } else { if(bufferSize == stasis_buffer_manager_size/* - 1*/) { /* Set up page kick mechanism. */ Page *iter; cache_state = FULL; headInsert(ret); assert(ret->next != ret && ret->prev != ret); /* split up queue: * "in all cases studied ... fixing the primary region to 30% ... * resulted in the best performance" */ repMiddle = repHead; for(pageid_t i = 0; i < stasis_buffer_manager_size / 3; i++ ) { repMiddle->pinCount = 1; repMiddle = repMiddle->next; } for( iter = repMiddle; iter; iter = iter->next ) { iter->pinCount = 2; } } else { /* Just insert it. */ headInsert(ret); assert(ret->next != ret && ret->prev != ret); assert(ret->next != ret && ret->prev != ret); } } }
// 'put' inserts a word in the hash table as a string // step 1: search hash table to existence of string 's' // step 2: if not already in hash table, add it and // increment HashTable::counter void HashTable::put(string s) { bool does_not_already_exist = true; for(int i = 0; i < SIZE; i++) { if( search(hashArray[i], s) != NULL) does_not_already_exist = false; } if( does_not_already_exist == true ) { headInsert(hashArray[counter], s); counter++; } }
void cacheHitOnPage(Page * ret) { /* The page may not be in cache if it is about to be freed. */ if(ret->inCache && cache_state == FULL) { /* we need to worry about page sorting */ /* move to head */ if( ret != repHead ) { qRemove(ret); headInsert(ret); assert(ret->next != ret && ret->prev != ret); if( ret->pinCount == 2 ) { /* keep first queue same size */ repMiddle = repMiddle->prev; repMiddle->pinCount = 2; ret->pinCount = 1; } } } }
void LinkedList::insertAtPosition(node* newNode, int index){ if (index <= 0) { std::cout << "\nIndex to insert cannot be less than 1\n"; return; } if(index > listLength+1){ std::cout << "\nIndex is larger than list size\n"; return; } index--; if (index == 0) { std::cout << "\nInserting at head\n"; headInsert(newNode); return; } if (index == listLength){ std::cout << "\nInserting at tail\n"; tailInsert(newNode); return; } node* current = head -> next; node* previous = head; for (int i = 1; i <= index; i++) { if (index == i) { newNode->next = current; previous->next= newNode; break; } previous = current; current = current -> next; } listLength++; }