Thanks library now compiles.
On Sunday, 3 January 2016 at 13:45:13 UTC, anonymous wrote:
On 03.01.2016 14:30, data pulverizer wrote:
I am trying to access functionality in the glpk C library using
extern(C). It has graph structs in its header file that are
specified in
an odd recurring manner that I cannot reproduce in D:
I don't see what's odd about this. What exactly are your
struggling with?
typedef struct glp_graph glp_graph;
typedef struct glp_vertex glp_vertex;
typedef struct glp_arc glp_arc;
You can just drop these. http://dlang.org/ctod.html#tagspace
struct glp_graph
{
...
glp_vertex **v; /* glp_vertex *v[1+nv_max];
};
Drop the semicolon after the struct declaration, and move the
asterisks one place to the left (purely style):
struct glp_graph
{
glp_vertex** v;
}
struct glp_vertex
{
...
glp_arc *in;
glp_arc *out;
};
As above, and rename in/out to something else, e.g. in_ and
out_:
struct glp_vertex
{
glp_arc* in_;
glp_arc* out_;
}
struct glp_arc
{
glp_vertex *tail;
glp_vertex *head;
glp_arc *t_prev;
glp_arc *t_next;
glp_arc *h_prev;
glp_arc *h_next;
....
};
Nothing new here.
you may also spot that the in, and out keywords are used as
members in
the struct, which gives an error in D. These structs are
required for
functions in the library so need to be included in the D
interface file.
Just rename them to something else. In D code that uses the
struct, you use the new names. C code doesn't need to be
changed, as the name doesn't matter when compiled.