/usr/include/nauty/nausparse.h is in libnauty2-dev 2.6r10+ds-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | /* nausparse.h : header file for sparse digraphs, nauty 2.6 */
/* This version allows only simple graphs with loops but
* contains the data structures for weights on the edges
* even though they aren't implemented yet. */
/*****************************************************************************
* *
* Copyright (1984-2016) Brendan McKay. All rights reserved. *
* Subject to the waivers and disclaimers in nauty.h. *
* *
* CHANGE HISTORY *
* 10-Nov-09 : removed types shortish and permutation *
* 20-May-10 : make some fields type size_t *
* 23-May-10 : add sparsenauty() *
* 3-Jun-10 : add *_tr procedures used by Traces *
* 30-Jun-10 : add DEFAULTOPTIONS_SPARSEDIGRAPH() *
* 18-Aug-12 : fix SG_DECL initialization order *
* 18-Jan-13 : add usercanonproc to default options *
* 17-Dec-15 : add macros for weighted graphs *
* *
*****************************************************************************/
#ifndef _NAUSPARSE_H_ /* only process this file once */
#define _NAUSPARSE_H_
#include <nauty/nauty.h>
#ifndef SG_WEIGHT
#define SG_WEIGHT int
#define SG_WEIGHT_FMT "%d"
#define SG_MINWEIGHT (-NAUTY_INFINITY)
#endif
typedef SG_WEIGHT sg_weight;
#define CHECK_SWG(sg,id) do { if ((sg)->w) { fprintf(stderr, \
">E procedure %s does not accept weighted graphs\n",id); exit(1); } } while (0)
typedef struct
{
size_t nde; /* Number of directed edges (loops contribute only 1) */
size_t *v; /* Array of indexes into e[*] */
int nv; /* Number of vertices */
int *d; /* Array with out-degree of each vertex */
int *e; /* Array to hold lists of neighbours */
sg_weight *w; /* Not implemented, should be NULL. */
size_t vlen,dlen,elen,wlen; /* Sizes of arrays in units of type */
} sparsegraph;
#define SG_VDE(sgp,vv,dd,ee) do { vv = ((sparsegraph*)(sgp))->v; \
dd = ((sparsegraph*)(sgp))->d; ee = ((sparsegraph*)(sgp))->e; } while(0)
#define SWG_VDE(sgp,vv,dd,ee,ww) do { vv = ((sparsegraph*)(sgp))->v; \
dd = ((sparsegraph*)(sgp))->d; ee = ((sparsegraph*)(sgp))->e; \
ww = ((sparsegraph*)(sgp))->w; } while(0)
#define SG_INIT(sg) do { (sg).v = NULL; (sg).d = (sg).e = (sg).w = NULL; \
(sg).vlen = (sg).dlen = (sg).elen = (sg).wlen = 0; } while(0)
#define SWG_INIT SG_INIT
#define SG_ALLOC(sg,nlen,ndelen,msg) do { \
DYNALLOC1(size_t,(sg).v,(sg).vlen,nlen,msg); \
DYNALLOC1(int,(sg).d,(sg).dlen,nlen,msg); \
DYNALLOC1(int,(sg).e,(sg).elen,ndelen,msg); \
} while (0)
#define SWG_ALLOC(sg,nlen,ndelen,msg) do { \
DYNALLOC1(size_t,(sg).v,(sg).vlen,nlen,msg); \
DYNALLOC1(int,(sg).d,(sg).dlen,nlen,msg); \
DYNALLOC1(int,(sg).e,(sg).elen,ndelen,msg); \
DYNALLOC1(sg_weight,(sg).w,(sg).wlen,ndelen,msg); \
} while (0)
#define SG_FREE(sg) do { \
DYNFREE((sg).v,(sg).vlen); \
DYNFREE((sg).d,(sg).dlen); \
DYNFREE((sg).e,(sg).elen); \
if ((sg).w) DYNFREE((sg).w,(sg).wlen); } while (0)
#define SWG_FREE SG_FREE
#define SG_DECL(sg) sparsegraph sg = {0,NULL,0,NULL,NULL,NULL,0,0,0,0}
#define SWG_DECL SG_DECL
#define DEFAULTOPTIONS_SPARSEGRAPH(options) optionblk options = \
{0,FALSE,FALSE,FALSE,TRUE,FALSE,CONSOLWIDTH, \
NULL,NULL,NULL,NULL,NULL,NULL,NULL,100,0,1,0,&dispatch_sparse,FALSE,NULL}
#define DEFAULTOPTIONS_SPARSEDIGRAPH(options) optionblk options = \
{0,TRUE,FALSE,FALSE,TRUE,FALSE,CONSOLWIDTH, \
NULL,NULL,NULL,NULL,NULL,NULL,adjacencies_sg,100,0,999,0,&dispatch_sparse,FALSE,NULL}
#ifdef __cplusplus
extern "C" {
#endif
extern dispatchvec dispatch_sparse;
extern int targetcell_sg(graph*,int*,int*,int,int,boolean,int,int,int);
extern boolean cheapautom_sg(int*,int,boolean,int);
extern boolean isautom_sg(graph*,int*,boolean,int,int);
extern void refine_sg(graph*,int*,int*,int,int*,int*,set*,int*,int,int);
extern int testcanlab_sg(graph*,graph*,int*,int*,int,int);
extern void updatecan_sg(graph*,graph*,int*,int,int,int);
extern int testcanlab_tr(sparsegraph*,sparsegraph*,int*,int*,int*);
extern int comparelab_tr(sparsegraph*,int*,int*,int*,int*,int*,int*);
extern void updatecan_tr(sparsegraph*,sparsegraph*,int*,int*,int);
extern void init_sg(graph*,graph**,graph*,graph**,int*,int*,set*,
struct optionstruct*,int*,int,int);
extern void cleanup_sg(graph*,graph**,graph*,graph**,int*,
int*,optionblk*,statsblk*stats,int,int);
extern void nausparse_freedyn(void);
extern void nausparse_check(int,int,int,int);
extern sparsegraph *nauty_to_sg(graph*,sparsegraph*,int,int);
extern graph* sg_to_nauty(sparsegraph*,graph*,int,int*);
extern void sortlists_sg(sparsegraph*);
extern boolean aresame_sg(sparsegraph*,sparsegraph*);
extern void put_sg(FILE*,sparsegraph*,boolean,int);
extern sparsegraph *copy_sg(sparsegraph*,sparsegraph*);
extern void distvals(sparsegraph*,int,int*,int);
extern void sparsenauty(sparsegraph*g,int*,int*,int*,
optionblk*,statsblk*,sparsegraph*);
extern void
adjacencies_sg(graph*,int*,int*,int,int,int,int*,int,boolean,int,int);
extern void
distances_sg(graph*,int*,int*,int,int,int,int*,int,boolean,int,int);
#ifdef __cplusplus
}
#endif
#endif /* _NAUSPARSE_H_ */
|