void operator()(GNode node, list<GNode>& workList) {
   Node &nData = graph.getData(node);
   for (Graph::edge_iterator ei = graph.edge_begin(node),ee=graph.edge_end(node);
     ei != ee; ei++) {
     GNode neigh = graph.getEdgeDst(ei);
     Node &neighData = graph.getData(neigh);
     if (neighData.component > nData.component) { 
       neighData.component = nData.component;
       if (schedule == FIFO) {
           workList.emplace_back(neigh);
       } else {       
           workList.emplace_front(neigh);
       }
     }
   }
 }
Example #2
0
 void set(int key, int value) {
     auto iter = mm.find(key);
     if(iter != mm.end()){
         iter->second->second = value;
         ll.splice(ll.begin(), ll, iter->second); // move the record
     }
     else {
         if(mm.size() == cap){
             auto back = ll.back(); // NOTICE: back() returns a reference
             mm.erase(back.first);
             ll.pop_back();
         }
         ll.emplace_front(key, value);
         mm[key] = ll.begin();
     }
 }
Example #3
0
 void set(int key, int value) {
     auto found_iter = m_map.find(key);
     if (found_iter != m_map.end()) //key exists
     {
         m_list.splice(m_list.begin(), m_list, found_iter->second); //move the node corresponding to key to front
         found_iter->second->second = value;                        //update value of the node
         return;
     }
     if (m_map.size() == m_capacity) //reached capacity
     {
        int key_to_del = m_list.back().first; 
        m_list.pop_back();            //remove node in list;
        m_map.erase(key_to_del);      //remove key in map
     }
     m_list.emplace_front(key, value);  //create new node in list
     m_map[key] = m_list.begin();       //create correspondence between key and node
 }
Example #4
0
void ofxWidget::updateVisibleWidgetsList() {

	if (!ofxWidget::bVisibleListDirty)
		return;

	//ofLogNotice() << "vList Update cache miss";

	// build a list of visible widgets based on all widgets
	// TODO: only rebuild this list if visiblility list on adding/removing and 
	// parenting widgets, and on changing widget visiblity, of course.
	sVisibleWidgets.clear();

	for (auto it = sAllWidgets.crbegin(); it != sAllWidgets.crend(); ++it) {
		if (auto p = it->lock()) {
			if (p->mVisible) {
				sVisibleWidgets.emplace_front(*it);
			} else {
				std::advance(it, p->mNumChildren);
			}
		}
	}
	ofxWidget::bVisibleListDirty = false;
}
    void set(int key, int value) {
        // lookup
        auto found = _lookup.find(key);

        // found key
        if (found != _lookup.end()) {
            // set value
            found->second->second = value;
            // move to head
            _lru.splice(_lru.begin(), _lru, found->second);
        }
        // not found
        else {
            // insert
            _lru.emplace_front(key, value);
            _lookup[key] = _lru.begin();

            // remove lru
            if (_lookup.size() > _capacity) {
                _lookup.erase(_lru.back().first);
                _lru.pop_back();
            }
        }
    }
Example #6
0
void LRUCache::append(int key, int value) {
    lst_.emplace_front(key, value);
    pair<hash_iterator, bool> ret = 
        hash_map_.insert(hash_value_type(key, lst_.begin()));
    if (!ret.second) ret.first->second = lst_.begin();
}
Example #7
0
 void _add(K key, V&& value) {
   lru.emplace_front(key, std::move(value)); // can't move key because we access it below
   contents[key] = lru.begin();
   trim_cache();
 }