.P0
struct Agiddisc_s { /* object ID allocator */
- void *(*open) (Agraph_t * g); /* associated with a graph */
+ void *(*open) (Agraph_t * g, Agdisc_t*); /* associated with a graph */
long (*map) (void *state, int objtype, char *str, unsigned long *id, int createflag);
long (*alloc) (void *state, int objtype, unsigned long id);
void (*free) (void *state, int objtype, unsigned long id);
} ;
struct Agmemdisc_s { /* memory allocator */
- void *(*open)(void); /* independent of other resources */
+ void *(*open)(Agdisc_t*); /* independent of other resources */
void *(*alloc)(void *state, size_t req);
void *(*resize)(void *state, void *ptr, size_t old, size_t req);
void (*free)(void *state, void *ptr);
/* disciplines for external resources needed by libgraph */
struct Agmemdisc_s { /* memory allocator */
- void *(*open) (void); /* independent of other resources */
+ void *(*open) (Agdisc_t*); /* independent of other resources */
void *(*alloc) (void *state, size_t req);
void *(*resize) (void *state, void *ptr, size_t old, size_t req);
void (*free) (void *state, void *ptr);
};
struct Agiddisc_s { /* object ID allocator */
- void *(*open) (Agraph_t * g); /* associated with a graph */
+ void *(*open) (Agraph_t * g, Agdisc_t*); /* associated with a graph */
long (*map) (void *state, int objtype, char *str, unsigned long *id,
int createflag);
long (*alloc) (void *state, int objtype, unsigned long id);
/* establish an allocation arena */
memdisc = ((proto && proto->mem) ? proto->mem : &AgMemDisc);
- memclosure = memdisc->open();
+ memclosure = memdisc->open(proto);
rv = memdisc->alloc(memclosure, sizeof(Agclos_t));
rv->disc.mem = memdisc;
rv->state.mem = memclosure;
g->desc = desc;
g->desc.maingraph = TRUE;
g->root = g;
- g->clos->state.id = g->clos->disc.id->open(g);
+ g->clos->state.id = g->clos->disc.id->open(g, arg_disc);
if (agmapnametoid(g, AGRAPH, name, &gid, TRUE))
AGID(g) = gid;
/* else AGID(g) = 0 because we have no alternatives */
/* a default ID allocator that works off the shared string lib */
-static void *idopen(Agraph_t * g)
+static void *idopen(Agraph_t * g, Agdisc_t* disc)
{
return g;
}
/* malloc based allocator */
-static void *memopen(void)
+static void *memopen(Agdisc_t* disc)
{
return NIL(void *);
}