Пример #1
0
    void set(int key, int value) {
        if (key_node_table.count(key)) { //found in the cache
            Node* node = key_node_table[key];
            node->value = value;
            key_node_table[key] = node;

            node->prev->next = node->next;
            node->next->prev = node->prev;

            appendTail(node);
            return;
        }
        else { //not in the cache
            if (key_node_table.size() == cap) { //if full, remove one
                //remove head
                Node* tmp = head->next;
                head->next = head->next->next;
                head->next->prev = head;
                key_node_table.erase(tmp->key);
            } 
            //else if not full, skip remvoving

            Node* node = new Node(key, value);
            appendTail(node);
            key_node_table[key] = node;
        }
    }
Пример #2
0
inline void XmlNode::appendContents(std::ostream& ss) const
{
    appendHead(ss);
    appendValue(ss);
    appendChildren(ss);
    appendTail(ss);
}
Пример #3
0
int main(){
	InitStack(&stack0);
	InitStack(&stack1);
	int origin[] = {1,2,3,4,5,6};
	int length = sizeof(origin)/sizeof(int);
	int i=0;
	int testNum = 3;
	for(i=0;i<testNum;i++){
		appendTail(origin[i]);
	}
	for(i=0;i<testNum;i++){
		printf("%d",deleteHead());
	}
	
	for(i=testNum;i<length;i++){
		appendTail(origin[i]);
	}
	for(i=testNum;i<length;i++){
		printf("%d",deleteHead());
	}
	
}
Пример #4
0
    int get(int key) {
        if (key_node_table.count(key) == 0) //not found
            return -1;
        else { //touch the node, and return value with the ht
            Node* node = key_node_table[key];
            //remove node from the list
            node->prev->next = node->next;
            node->next->prev = node->prev;

            appendTail(node);
            return node->value;
        }

    }