Ejemplo n.º 1
0
/*!\brief Remove an edge between two nodes. Can remove isolated nodes
 * 1) Test if both nodes of the edge exist
 * 2) Remove edges
 * 3) Remove isolated nodes
 */
int DirectionalGraph::eraseEdge( const node_type &fromNode,
	const node_type &toNode, const bool removeIsolatedNodes ){
	/* 1) Test if both nodes of the edge exist */
	if( nodes.find(fromNode) == nodes.end() ){
		return 1;
	}

	if( nodes.find(toNode) == nodes.end() ){
		return 2;
	}

	/* 2) Remove edges */
	outArrows[fromNode].erase(toNode);
	inArrows[toNode].erase(fromNode);

	/* 3) Remove isolated nodes */
	if( removeIsolatedNodes ){
		if( (outArrows[fromNode].size() == 0)
			&& (inArrows[fromNode].size() == 0) ){
			eraseNode(fromNode);
		}

		if( (outArrows[toNode].size() == 0)
			&& (inArrows[toNode].size() == 0) ){
			eraseNode(toNode);
		}
	}

	return 0;
}
Ejemplo n.º 2
0
void ContentLayer::popNode(Layout *node) {
	auto it = _nodes.find(node);
	if (it == _nodes.end()) {
		return;
	}

	node->retain();
	_nodes.erase(it);

	node->onPopTransitionBegan(this, false);
	if (!_nodes.empty()) {
		_nodes.back()->onForegroundTransitionBegan(this, node);
	}
	auto tit = _exitTransitions.find(node);
	if (tit != _exitTransitions.end()) {
		node->runAction(action::callback(tit->second, [this, node] {
			eraseNode(node);
			node->onPop(this, false);
			if (!_nodes.empty()) {
				_nodes.back()->onForeground(this, node);
			}
			node->release();
		}));
	} else {
		eraseNode(node);
		node->onPop(this, false);
		if (!_nodes.empty()) {
			_nodes.back()->onForeground(this, node);
		}
		node->release();
	}
}
Ejemplo n.º 3
0
void ContentLayer::replaceTopNode(Layout *node, Transition *enterTransition, Transition *exitTransition) {
	if (!_nodes.empty()) {
		auto back = _nodes.back();
		back->retain();
		_nodes.popBack();
		back->onPopTransitionBegan(this, false);

		auto tit = _exitTransitions.find(back);
		if (tit != _exitTransitions.end()) {
			safe_retain(node);
			safe_retain(enterTransition);
			safe_retain(exitTransition);
			back->runAction(action::callback(tit->second, [this, back, node, enterTransition, exitTransition] {
				eraseNode(back);
				back->onPop(this, false);
				back->release();
				pushNode(node, enterTransition, exitTransition);
				safe_release(node);
				safe_release(enterTransition);
				safe_release(exitTransition);
			}));
		} else {
			eraseNode(back);
			back->onPop(this, false);
			back->release();
			pushNode(node, enterTransition, exitTransition);
		}
	}
}
Ejemplo n.º 4
0
void Tetgen::cleanBadTetra(double min_value)
{
	Node* nd;
	Tetra* itet;
	double mindens,minvolm;

	mindens = cr_crowd->getCurrentMinDensity();
	minvolm = mindens * mindens * mindens * rate_minvolm;

	int n = getSize();
	for(int i = 0; i < n; i++)
	{
		itet = getTetra(i);

		if(itet->getVolume() > minvolm &&
		   itet->getValue() > min_value)
			continue;

		for(int j = 0; j < 4; j++)
		{
			nd = itet->getNode(j);
			if(nd->getType() == 0 )
				continue;
			if(eraseNode(nd))
				break;
		}
		n = getSize();
	}
}
Ejemplo n.º 5
0
int main(int argc, char* argv[]){
    char buffer[BUFFER_SIZE];
    int index, pages;
    int requests = 0;
    int faults = 0;
    
    if(argc < 1){
        printf("Too many arguments. Please look at documentation to compile.\n");
        return 0;
    }

    sscanf(argv[1], "%d", &pages);

    Set* set = create(pages);

    FILE* fp = fopen("out.txt", "w");
    assert(fp != NULL);
    
    while(fgets(buffer, sizeof(buffer), stdin) != NULL) {

        if(!isdigit((int)buffer[0]))
            continue;

        sscanf(buffer, "%d", &index);

        requests++;
        if(findNode(set, index) >= 0){
            setRef(set, index, requests);
        }
        else{
            if(getSize(set) == pages)
                eraseNode(set, findMin(set));

            insertNode(set, index, 0);
            setRef(set, index, requests);
            faults++;
            assert(fprintf(fp, "%d \n", index) >= 0);
        }

    } // while
    fclose(fp);
    free(set); 
    printf("Number of page requests: %d \nNumber of page faults: %d \n", requests, faults);
    return 1;
}
Ejemplo n.º 6
0
void MatchTrie::eraseNode(MatchTrie::TrieNode *&node){
	if (!node) return;
	for (int i = 0; i < 4; i ++) eraseNode(node -> next[i]);
	delete node;
	node = 0;
}
Ejemplo n.º 7
0
MatchTrie::~MatchTrie(){
	eraseNode(_root);
}
Ejemplo n.º 8
0
/*!\brief Remove a node with the id of the node from a node iterator */
bool DirectionalGraph::eraseNode( const node_iterator &node ){
	if( nodes.find(*node) == nodes.end() )
		return false;

	return eraseNode(*node);
}