Repeated struct definitions for graph data structures and in/out naming conflict in C library

data pulverizer via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Jan 3 06:03:09 PST 2016


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.




More information about the Digitalmars-d-learn mailing list