/* $Id: defs.h,v 1.5 2005/10/18 18:42:59 ellson Exp $ $Revision: 1.5 $ */ /* vim:set shiftwidth=4 ts=8: */ /********************************************************** * This software is part of the graphviz package * * http://www.graphviz.org/ * * * * Copyright (c) 1994-2004 AT&T Corp. * * and is licensed under the * * Common Public License, Version 1.0 * * by AT&T Corp. * * * * Information and Software Systems Research * * AT&T Research, Florham Park NJ * **********************************************************/ #ifdef __cplusplus extern "C" { #endif #ifndef _DEFS_H_ #define _DEFS_H_ #include "neato.h" #ifdef __cplusplus enum Style { regular, invisible }; struct vtx_data { int nedges; int *edges; float *ewgts; Style *styles; float *edists; /* directed dist reflecting the direction of the edge */ }; struct cluster_data { int nvars; /* total count of vars in clusters */ int nclusters; /* number of clusters */ int *clustersizes; /* number of vars in each cluster */ int **clusters; /* list of var indices for constituents of each c */ int ntoplevel; /* number of nodes not in any cluster */ int *toplevel; /* array of nodes not in any cluster */ boxf *bb; /* bounding box of each cluster */ }; typedef int DistType; /* must be signed!! */ inline double max(double x, double y) { if (x >= y) return x; else return y; } inline double min(double x, double y) { if (x <= y) return x; else return y; } inline int max(int x, int y) { if (x >= y) return x; else return y; } inline int min(int x, int y) { if (x <= y) return x; else return y; } struct Point { double x; double y; int operator==(Point other) { return x == other.x && y == other.y; }}; #else #undef inline #define inline #define NOTUSED(var) (void) var #include extern void *gmalloc(size_t); #define DIGCOLA 1 #ifdef USE_STYLES typedef enum { regular, invisible } Style; #endif typedef struct { int nedges; /* no. of neighbors, including self */ int *edges; /* edges[0..(nedges-1)] are neighbors; edges[0] is self */ float *ewgts; /* preferred edge lengths */ float *eweights; /* edge weights */ node_t *np; /* original node */ #ifdef USE_STYLES Style *styles; #endif #ifdef DIGCOLA float *edists; /* directed dist reflecting the direction of the edge */ #endif } vtx_data; typedef struct cluster_data { int nvars; /* total count of vars in clusters */ int nclusters; /* number of clusters */ int *clustersizes; /* number of vars in each cluster */ int **clusters; /* list of var indices for constituents of each c */ int ntoplevel; /* number of nodes not in any cluster */ int *toplevel; /* array of nodes not in any cluster */ boxf *bb; /* bounding box of each cluster */ } cluster_data; typedef int DistType; /* must be signed!! */ #ifdef UNUSED typedef struct { double x; double y; } Point; #endif #endif #endif #ifdef __cplusplus } #endif