generators/netgen/netgen.h
changeset 6 a3ef33a8694a
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/generators/netgen/netgen.h	Fri Nov 26 19:23:47 2010 +0100
     1.3 @@ -0,0 +1,95 @@
     1.4 +/*** netgen.h
     1.5 + *** Prototype code for inclusion into network generation routines
     1.6 + ***/
     1.7 +
     1.8 +/*** Constant definitions */
     1.9 +
    1.10 +#ifndef NULL
    1.11 +#define NULL 0
    1.12 +#endif
    1.13 +
    1.14 +#define BAD_SEED  -1			/* error indicators */
    1.15 +#define TOO_BIG   -2
    1.16 +#define BAD_PARMS -3
    1.17 +#define ALLOCATION_FAILURE -4
    1.18 +
    1.19 +
    1.20 +/*** Type definitions */
    1.21 +
    1.22 +typedef unsigned long NODE;		/* node number */
    1.23 +typedef unsigned long ARC;		/* arc number */
    1.24 +typedef long CAPACITY;			/* arc capacity */
    1.25 +typedef long COST;			/* arc cost */
    1.26 +typedef unsigned long INDEX;		/* index element */
    1.27 +typedef int INDEX_LIST;			/* index list handle */
    1.28 +
    1.29 +
    1.30 +/*** Function prototypes */
    1.31 +
    1.32 +#ifdef __STDC__
    1.33 +
    1.34 +#include <stdlib.h>
    1.35 +#include <string.h>
    1.36 +
    1.37 +void netgen_(long*, long[], long*, long*);	/* Fortran external interface */
    1.38 +ARC netgen(long, long*);	    		/* C external interface */
    1.39 +
    1.40 +INDEX_LIST make_index_list(INDEX, INDEX); /* allocates a new index list */
    1.41 +void free_index_list(INDEX_LIST);	/* frees an existing list */
    1.42 +INDEX choose_index(INDEX_LIST, INDEX);	/* chooses index at specified position */
    1.43 +void remove_index(INDEX_LIST, INDEX);	/* removes specified index from list */
    1.44 +INDEX index_size(INDEX_LIST); 		/* number of indices remaining */
    1.45 +INDEX pseudo_size(INDEX_LIST);		/* "modified" index size */
    1.46 +
    1.47 +void set_random(long);	    		/* initialize random seed */
    1.48 +long ng_random(long, long);    		/* generate random integer in interval */
    1.49 +
    1.50 +#else
    1.51 +
    1.52 +void *malloc();				/* some standard header should define this */
    1.53 +void *realloc();			/* ditto */
    1.54 +void free();				/* ditto */
    1.55 +void *memset();				/* ditto */
    1.56 +void exit();				/* ditto */
    1.57 +
    1.58 +void netgen_();				/* Fortran external interface */
    1.59 +ARC netgen();		    		/* C external interface */
    1.60 +
    1.61 +INDEX_LIST make_index_list();		/* allocates a new index list */
    1.62 +void free_index_list();			/* frees an existing list */
    1.63 +INDEX choose_index();			/* chooses index at specified position */
    1.64 +void remove_index();			/* removes specified index from list */
    1.65 +INDEX index_size(); 			/* number of indices remaining */
    1.66 +INDEX pseudo_size();			/* "modified" index size */
    1.67 +
    1.68 +void set_random();	    		/* initialize random seed */
    1.69 +long ng_random();    			/* generate random integer in interval */
    1.70 +
    1.71 +#endif
    1.72 +
    1.73 +/*** To maintain compatibility with the old Fortran network generator,
    1.74 + *** the following are defined.  This allows linking the generator code
    1.75 + *** with the solver, with the generated network passed to the solver
    1.76 + *** through arrays in memory.
    1.77 + ***/
    1.78 +
    1.79 +#define MAXNODES   10000000  		/* maximum problem sizes */
    1.80 +#define MAXARCS    40000000
    1.81 +
    1.82 +#define FROM arrays_	    		/* aliases for network storage */
    1.83 +#define TO   arraye_
    1.84 +#define U    arrayu_
    1.85 +#define C    arrayc_
    1.86 +#define B    arrayb_
    1.87 +
    1.88 +#ifdef ALLOCATE_NETWORK	    		/* storage definitions */
    1.89 +#define EXTERN 
    1.90 +#else
    1.91 +#define EXTERN extern
    1.92 +#endif
    1.93 +
    1.94 +EXTERN NODE     FROM[MAXARCS];	/* origin of each arc */
    1.95 +EXTERN NODE     TO  [MAXARCS];	/* destination */
    1.96 +EXTERN CAPACITY U   [MAXARCS];	/* capacity */
    1.97 +EXTERN COST     C   [MAXARCS];	/* cost */
    1.98 +EXTERN CAPACITY B   [MAXNODES];	/* supply (demand) at each node */