Ejemplo n.º 1
0
int main(int argc, const char * argv[])
{
    struct Graph *g = NULL;
    g = Graph(g);
    
    Graph_addNode(g, "a");
    Graph_addNode(g, "b");
    Graph_addNode(g, "c");
    Graph_addNode(g, "d");
    Graph_addNode(g, "e");
    
    
        
    Graph_addEdge(g, 0, 1, 1);
    Graph_addEdge(g, 1, 0, 1);
    
    Graph_addEdge(g, 1, 2, 1);
    Graph_addEdge(g, 2, 1, 1);
    
    Graph_addEdge(g, 2, 3, 1);
    Graph_addEdge(g, 3, 2, 1);
    
    Graph_addEdge(g, 3, 4, 1);
    Graph_addEdge(g, 4, 3, 1);
    
    Graph_addEdge(g, 1, 3, 3);
    Graph_addEdge(g, 3, 1, 3);
    
    
    Graph_printGraph(g);
    
    return 0;
}
Ejemplo n.º 2
0
Archivo: graph.c Proyecto: caot/ogdl-c
Graph Graph_md (Graph g, char * path)
{
    char e[256], last[256], *p;
    Graph up=0, node;
    int i,n;
    
    if (!g || !path || !path[0]) return 0;
    
    p = path;
    last[0] = 0;    /* used also to distinguish between x.[n] and x[n] */
    
    while ( (p=Path_element(p,e)) )
    {
        if (e[0] == '[') {

            n = atoi(e+1);  

            if (!last[0]) {
                if (n < 0 || !e[1])     /* allow [0], but not [] */
                    return 0;           /* is a syntax error, but ... */    
                if (g->size > n)
                    g = g->nodes[n];
                else 
		    return 0;		/* not allowed: cannot create unnamed nodes */
            }
            else {
                if (!up) return 0;
                
                if (e[1] == 0)          /* this means [] */
                    return 0;		/* not allowed */
                
                else if (n>=0) {
                    for (i=0; i<up->size; i++) {
                        node = up->nodes[i];
                        if (!strncmp(node->name,last,256)) {
                            if (!n--) {
                                g = node;
                                break;
                            }
                        }
                    }                
                }
                last[0] = 0;
            }
        }
        else if (e[0] == '.')
            last[0] =  0;
        else {
            up = g;
            if (! (g=Graph_getNode(g,e))) {
                node = Graph_new(e);
		Graph_addNode(g,node);
		g = node;
	    }
            strncpy(last,e,255);
        }
    }
    return g;

}
Ejemplo n.º 3
0
Archivo: graph.c Proyecto: caot/ogdl-c
int Graph_set (Graph g, char * path, Graph v)
{
    Graph node;
    
    if (!g || !path || !path[0]) return 1;
    
    node = Graph_get(g,path);

    if (node) {
        if (!node->size)
	    Graph_addNode(node,v);
	else
	    node->nodes[0] = v;    /* XXX memory leak ! */
	return 0;
    }
    
    node = Graph_md(g,path);        
    Graph_addNode(node,v);
    Graph_addNode(g,node);
    return 0;
}
Ejemplo n.º 4
0
Archivo: graph.c Proyecto: caot/ogdl-c
Graph Graph_get (Graph g, char * path)
{
    char e[256], last[256], *p;
    Graph up=0, node;
    int i,j,n;

    p = path;
    last[0] = 0;    /* used also to distinguish between x.[n] and x[n] */
    
    while ( (p=Path_element(p,e)) )
    {
        if (e[0] == '[') {

            n = atoi(e+1);  

            if (n < 0)     
                return NULL;        /* is a syntax error, but ... */    
            if (e[1]) {
                if (g->size > n)
                    g = g->nodes[n];
                else 
                    return NULL;
            }
            else {
                if (up == NULL) return NULL;
                
                if (e[1] == 0) {        /* this means [] */
                    /* new graph and get all elements with this name */
                    g = Graph_new("__vector__");

                    for (i=0; i<up->size; i++) {
                        node = up->nodes[i];
                        if (!strncmp(node->name,last,256))
                            for (j=0; j<node->size; j++)
                                Graph_addNode(g,node->nodes[j]);
                    }
                }
                else if (n>=0) {

                    for (i=0; i<up->size; i++) {
                        node = up->nodes[i];
                  
			if (!strncmp(node->name,last,256)) {
	
                            if (!n--) {
                                g = node;
				
                                break;
                            }
                        }
                    }  
		    if (n>-1) return NULL;              
                }
                last[0] = 0;
            }
        }
        else if (e[0] == '.')
            last[0] =  0;
        else {
            up = g;
            if (! (g=Graph_getNode(g,e)))
                return 0;
            strncpy(last,e,255);
        }
    }
    return g;
}
Ejemplo n.º 5
0
Archivo: graph.c Proyecto: caot/ogdl-c
Graph Graph_add (Graph g, char *name)
{
	Graph node = Graph_new(name);
	Graph_addNode(g,node);
	return node;
}