BLS schrieb:
Andrei Alexandrescu schrieb:
Jarrett Billingsley wrote:
On Sun, Jan 18, 2009 at 1:00 PM, dsimcha <[email protected]> wrote:
Nice. Glad to see that this is documented somewhere so I can start playing with it. One thing, though: In my dstats library, I have a custom hash table implementation that's used very heavily in my information theory module. (I have my reasons for using a custom hash table instead of the builtin, but they're beyond the scope of this post.) Right now, the hash table uses opApply. Now that I realize how horribly slow opApply is, I'd like to port this to ranges. However, I need to be able to iterate over either key, value pairs or just values. Is
there any way to make this work with ranges?


You could handle key or value iteration by using a proxy struct type
that follows the range protocol, and have your hash table return one
of those structs from methods such as "keysIter" or "valuesIter".  But
unless I'm mistaken, D2 still doesn't support returning tuples, so you
still can't have keys _and_ values at the same time.  (Unless you're
content with using a Pair or something.)

Returning a std.typecons.Tuple is entirely possible.

Andrei

tuple(K,V) foo(K,V)(K k, V v)
{
  ...
}
????, I have no idea, pls help Bjoern


Look like this works... However it would be nice if we could place the alias Tuple Pair stuff outside of foo()
module tt;
import std.stdio;
import std.typecons;

//alias Tuple!(K, "key", V, "value") Pair; This don't work

auto foo(K,V)(K k, V v)
{
        alias Tuple!(K, "key", V, "value") Pair;

        Pair P;
        P.key = ++k;
        P.value = v;

        return P;
}

void main()
{
        //Pair KV;
        auto KV = foo!(int,string) (10,"Hello");
        writefln("%8s %s\n", KV.key, KV.value);
        
}
This is a really nice feature, guess there are smarter ways to implement tuple returns..
Bjoern

Reply via email to