int bipartGraphInsertVertex(bpGraph_t* pGraph, int vertId, int partite) { int i; /* insert into partite 1 */ if (partite == 1) { /* check if 'vertid' is an existing vertex */ if (vertId < pGraph->vertNum1) { if (pGraph->vVertExistP1[vertId]) { return EXISTING_VERTEX; } else { pGraph->vVertExistP1[vertId] = 1; return NEW_VERTEX } } else { /* must be a new vertex, so we need to allocate more space */ linkedList_t **pTemp = (linkedList_t**) safeRealloc(pGraph->vpVertsP1, (vertId+1) * sizeof(linkedList_t*), (vertId+1-pGraph->vertNum1) * sizeof(linkedList_t*)); pGraph->vpVertsP1 = pTemp; char *pTemp2 = (char*) safeRealloc(pGraph->vVertExistP1, (vertId+1) * sizeof(char), (vertId+1-pGraph->vertNum1) * sizeof(char)); pGraph->vVertExistP1 = pTemp2; /* initialise all new elements to NULL */ for (i = pGraph->vertNum1; i < vertId+1; ++i) { pGraph->vpVertsP1[i] = NULL; pGraph->vVertExistP1[i] = 0; } pGraph->vpVertsP1[vertId] = createList(); pGraph->vVertExistP1[vertId] = 1; pGraph->vertNum1 = vertId+1; return NEW_VERTEX; } }
Trace createTrace(Graph G, char *object) { int t; Trace T = (Trace) safeCalloc(1, sizeof *T, "createTrace:T"); for (t = 0; t < G->numTraces && G->trace[t]; t++); if (t >= G->numTraces) { int n = imax(t + 2, 2 * G->numTraces); G->trace = safeRealloc(G->trace, n * sizeof(Trace), "G->trace"); memset(G->trace + G->numTraces, 0, (n - G->numTraces) * sizeof(Trace)); G->numTraces = n; } G->trace[t] = T; T->num = t; T->graph = G; if (T->num == 0) T->color = copyString("black"); else T->color = nextColor(); T->maxVals = DEF_GR_values; T->active = TRUE; T->transient = FALSE; T->visible = TRUE; T->val = (point *) safeMalloc(T->maxVals * sizeof(point), "T->val"); T->object = copyString(object); G->tracesChanged = TRUE; refreshPropsLater(G); return T; }
int bipartGraphInsertVertex(bpGraph_t* pGraph, int vertId, int partite) { char **vertExists; binTreeNode_t **adjTree; int *numVerts, i; if (partite == 1) { vertExists = &pGraph->vertExistsP1; adjTree = &pGraph->adjTreeP1; numVerts = &pGraph->numVertsP1; } else if (partite == 2) { vertExists = &pGraph->vertExistsP2; adjTree = &pGraph->adjTreeP2; numVerts = &pGraph->numVertsP2; } else { return ERROR_VALUE; } if (vertId >= *numVerts) { /* need to expand exists array */ *vertExists = safeRealloc(*vertExists, vertId + 1, (vertId + 1) - *numVerts); for (i = *numVerts; i < vertId; i++) { (*vertExists)[i] = 0; } *numVerts = vertId + 1; } else if ((*vertExists)[vertId]) { return EXISTING_VERTEX; } if (*adjTree == NULL) { /* create tree */ *adjTree = createTreeNode(vertId, createList()); } else { /* or insert a node */ insertTreeNode(*adjTree, createTreeNode(vertId, createList())); } /* set exists flag */ (*vertExists)[vertId] = 1; return NEW_VERTEX; } /* end of bipartGraphInsertVertex() */
Graph createGraph(void) { int g; Graph G = (Graph) safeCalloc(1, sizeof *G, "createGraph:G"); for (g = 0; g < Root->numGraphs && Root->graph[g]; g++); if (g >= Root->numGraphs) { int n = imax(g + 2, 2 * Root->numGraphs); Root->graph = safeRealloc(Root->graph, n * sizeof(Graph), "Root->graph"); memset(Root->graph + Root->numGraphs, 0, (n - Root->numGraphs) * sizeof(Graph)); Root->numGraphs = n; } Root->graph[g] = G; G->num = g; G->updateOn = ON_REPORT; G->updateEvery = 1; G->width = 0; G->height = 0; G->cols = DEF_GR_columns; G->max = G->min = 0.0; G->fixMax = FALSE; G->fixMin = TRUE; G->maxVal = -LARGE_VAL; G->minVal = LARGE_VAL; G->scaleY = 0; G->clearOnReset = FALSE; G->storeOnReset = TRUE; G->maxX = 0; G->hidden = TRUE; if (!Batch) showGraph(G); return G; }
int bipartGraphInsertVertex(bpGraph_t* pGraph, int vertId, int partite) { /* TODO: Implement me! */ int **pTemp; char *pTemp2; int *pTemp3; int i; int j; if (partite == 1) { if (vertId < pGraph->vertNum1) { if (pGraph->vVertExistP1[vertId]) { return EXISTING_VERTEX; } else { pGraph->vVertExistP1[vertId] = 1; return NEW_VERTEX; } } else { pTemp = (int **) safeRealloc(pGraph->vpVertsP1, (vertId+1) * sizeof(int*), (vertId+1-pGraph->vertNum1) * sizeof(int*)); pGraph->vpVertsP1 = pTemp; pTemp2 = (char *) safeRealloc(pGraph->vVertExistP1, (vertId+1) * sizeof(char), (vertId+1-pGraph->vertNum1) * sizeof(char)); pGraph->vVertExistP1 = pTemp2; printf("hello\n"); printf("%d\n", pGraph->subCount1); pTemp3 = (int *) safeRealloc(pGraph->subCount1, (vertId+1) * sizeof(int), (vertId+1-pGraph->vertNum1) * sizeof(int)); printf("world\n"); pGraph->subCount1 = pTemp3; for (i = pGraph->vertNum1; i < vertId+1; ++i) { pGraph->vpVertsP1[i] = NULL; pGraph->vVertExistP1[i] = 0; pGraph->subCount1[i] = 0; } pGraph->vertNum1 = vertId+1; pGraph->vpVertsP1[vertId] = (int *) safeMalloc(pGraph->vertNum2 * sizeof(int)); for (j = 0; j< pGraph->vertNum1; j++) { pGraph->vpVertsP1[vertId][j] = 0; } pGraph->vVertExistP1[vertId] = 1; pGraph->subCount1[vertId] = pGraph->vertNum2; return NEW_VERTEX; } } else if (partite == 2) { if (vertId < pGraph->vertNum2) { if (pGraph->vVertExistP2[vertId]) { return EXISTING_VERTEX; } else { pGraph->vVertExistP2[vertId] = 1; return NEW_VERTEX; } } else { pTemp = (int**) safeRealloc(pGraph->vpVertsP2, (vertId+1) * sizeof(int*), (vertId+1-pGraph->vertNum2) * sizeof(int*)); pGraph->vpVertsP2 = pTemp; pTemp2 = (char*) safeRealloc(pGraph->vVertExistP2, (vertId+1) * sizeof(char), (vertId+1-pGraph->vertNum2) * sizeof(char)); pGraph->vVertExistP2 = pTemp2; pTemp3 = (int*) safeRealloc(pGraph->subCount2, (vertId+1) * sizeof(int), (vertId+1-pGraph->vertNum2) * sizeof(int)); pGraph->subCount2 = pTemp3; for (i = pGraph->vertNum2; i < vertId+1; ++i) { pGraph->vpVertsP2[i] = NULL; pGraph->vVertExistP2[i] = 0; pGraph->subCount2[i] = 0; } pGraph->vertNum2 = vertId+1; pGraph->vpVertsP2[vertId] = (int *) safeMalloc(pGraph->vertNum1 * sizeof(int)); for (j = 0; j< pGraph->vertNum1; j++) { pGraph->vpVertsP2[vertId][j] = 0; } pGraph->vVertExistP2[vertId] = 1; pGraph->subCount2[vertId] = pGraph->vertNum1; return NEW_VERTEX; } } /* TODO: Replace placeholder. */ return ERROR_VALUE; } /* end of bipartGraphInsertVertex() */