Hi Andrew, Could you please post a link to the library? Thanks. :)
On Wednesday, March 21, 2018 at 12:35:46 AM UTC+6, Andrew Knapp wrote: > > Hello, > > I'd like to be able to send dataviewtypes as messages in a low-latency ipc > library I've written. > > In this scenario, any use of malloc is unacceptable. Everything must be > allocated from a memory pool or the stack, but datavtype constructors > always allocate on the heap. > > What is the best way to access to the size and flat memory of the > datavtype's tagged union, preferably in a typesafe manner? You can do this > by a hack like > > dataviewtype message = > | Bar of (int, double) > | Baz of (double, double) > > #define BAR 0 > #define BAZ 1 > > typedef BAR_ = @{ > contag = int, > atslab__0 = int, > atslab__1 = double > } > > typedef BAZ_ = @{ > contag = int, > atslab__0 = double, > atslab__1 = double > } > > and then using $UNSAFE.cast{Foo} on a pointer to stack or pool allocated > memory of size FOO_SIZE = max(sizeof<BAR_>, sizeof<BAZ_>), which has had > its contag set to BAR or BAZ via another unsafe cast. > > Unfortunately there is really a lot of boilerplate here and it will be > easy for things to get out of sync with datatype definitions, especially > with a lot of constructors. Moreover, FOO_SIZE is not a static constant, so > you can't just write something like var buf : @[char][FOO_SIZE*N] > > Also, is there an equivalent of the placement new operator in C++? > > Thanks, > Andrew > -- You received this message because you are subscribed to the Google Groups "ats-lang-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to ats-lang-users+unsubscr...@googlegroups.com. To post to this group, send email to ats-lang-users@googlegroups.com. Visit this group at https://groups.google.com/group/ats-lang-users. To view this discussion on the web visit https://groups.google.com/d/msgid/ats-lang-users/12019913-de9d-4af2-9f9e-284e31b45b72%40googlegroups.com.