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 */