コード例 #1
0
ファイル: pageCache.c プロジェクト: baskard/stasis
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);
    }
  }
}
コード例 #2
0
ファイル: hashtable.cpp プロジェクト: osmode/poe
	// '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++;
		}

		
	}
コード例 #3
0
ファイル: pageCache.c プロジェクト: baskard/stasis
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;
      }
    }
  }
}
コード例 #4
0
ファイル: LinkedList.cpp プロジェクト: joelmacias/linkedlist
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++; 
}