On Thursday, 12 March 2020 at 08:51:24 UTC, mark wrote:
I use sets a lot and since I believe that D's rbtree is O(lg n) for add/remove/in and that D's AA is O(1) for these, I want to implement a set in terms of an AA.

XXX: I need to use an if on the struct to restrict T to be a type that supports toHash and opEquals (i.e., to be a valid AA key)


Maybe there is another way for this. But I would consider using:
std.traits.hasMember

YYY: The range() method is clearly not good D style but I don't
opApply can be used for it.

ZZZ: I can't figure out how to support the in operator.

V* opBinaryRight(string op) with in should return a pointer for valid entries and null for non-existing entries. Thus, "if(key in AA){...}" works as expected. That is how AA implementation of druntime works.

Recently I ve ported it for -betterC. You can take a look at:
https://github.com/aferust/bcaa

Reply via email to