Example #1
0
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;
		}
	}
Example #2
0
File: graph.c Project: crcox/lens
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;
}
Example #3
0
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() */
Example #4
0
File: graph.c Project: crcox/lens
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;
}
Example #5
0
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() */