Generating struct members from c structs

Anthony anthoq88 at gmail.com
Wed Jul 1 07:26:44 UTC 2020


When doing interop with a c library, is there a way to 
automatically generate the fields that are needed for a struct?

For example, when interfacing with the lwan c library:

// lwan.h
struct lwan {
     struct lwan_trie url_map_trie;
     struct lwan_connection *conns;
     struct lwan_strbuf headers;

     struct {
         pthread_barrier_t barrier;
         struct lwan_thread *threads;
         unsigned int max_fd;
         unsigned int count;
     } thread;

     struct lwan_config config;
     struct coro_switcher switcher;

     int main_socket;

     unsigned int n_cpus;
};

module lwan;

extern (C) {
     struct lwan {
       ... // <<< How do I populate this without having to write 
all the sub structs?
     };
     void lwan_init(lwan* l);
     void lwan_shutdown(lwan* l);
}

import lwan;

void main() {
   lwan l; //This is currently not allocating enough memory
   lwan_init(&l);
   lwan_shutdown(&l);
}

How do I populate the lwan struct without having to write all the 
sub structs?

I'm thinking that maybe it'll be best to create a wrapper c 
function that initializes the lwan struct and returns a pointer.

That way I don't have to declare any fields.

extern (C) {
     struct lwan;

     lwan* lwan_make(); //wrapper function (perhaps in wrapper.c)
     void lwan_cleanup(lwan* l); //wrapper function

     void lwan_init(lwan* l);
     void lwan_shutdown(lwan* l);
}

Is there an easier way though?



More information about the Digitalmars-d-learn mailing list