void topology_ops_init() { init_edge_array(); }
static void construct_digraph(lua_State* L, pgfgd_SyntacticDigraph* d) { d->internals = (pgfgd_SyntacticDigraph_internals*) calloc(1, sizeof(pgfgd_SyntacticDigraph_internals)); d->internals->state = L; // Create the options table: d->options = make_option_table(L, GRAPH_INDEX, 0); // Create the vertex table init_vertex_array(&d->vertices, lua_rawlen(L, VERTICES_INDEX)); // Create the vertices int i; for (i=0; i<d->vertices.length; i++) { pgfgd_Vertex* v = (pgfgd_Vertex*) calloc(1, sizeof(pgfgd_Vertex)); // Push the vertex onto the Lua stack: lua_rawgeti(L, VERTICES_INDEX, i+1); // Fill v with information: v->name = make_string_from(L, "name"); v->shape = make_string_from(L, "shape"); v->kind = make_string_from(L, "kind"); // Options: v->options = make_option_table(L, VERTICES_INDEX, i+1); // Index: v->array_index = i; // Setup pos field lua_getfield(L, -1, "pos"); make_coordinate(L, &v->pos); lua_pop(L, 1); // Setup path array: lua_getfield(L, -1, "path"); v->path = make_path(L); lua_pop(L, 1); // Pop the vertex lua_pop(L, 1); d->vertices.array[i] = v; } // Construct the edges: init_edge_array(&d->syntactic_edges, lua_rawlen(L, EDGES_INDEX)); int edge_index; for (edge_index = 0; edge_index < d->syntactic_edges.length; edge_index++) { pgfgd_Edge* e = (pgfgd_Edge*) calloc(1, sizeof(pgfgd_Edge)); lua_rawgeti(L, EDGES_INDEX, edge_index+1); e->direction = make_string_from(L, "direction"); e->options = make_option_table(L, EDGES_INDEX, edge_index+1); // Index: e->array_index = edge_index; // Compute the tail vertex index: lua_getfield(L, -1, "tail"); lua_gettable(L, VERTICES_INDEX); e->tail = d->vertices.array[lua_tointeger(L, -1) - 1]; lua_pop(L, 1); lua_getfield(L, -1, "head"); lua_gettable(L, VERTICES_INDEX); e->head = d->vertices.array[lua_tointeger(L, -1) - 1]; lua_pop(L, 1); // Fill path: e->path = make_empty_path(L); e->path->length = -1; // Means that a default path should be created. // Pop the edge form the Lua stack: lua_pop(L, 1); d->syntactic_edges.array[edge_index] = e; } }