On Sun, 11 Sep 2011 18:11:11 -0400, Timon Gehr <timon.g...@gmx.ch> wrote:

On 09/11/2011 11:12 PM, Jonathan M Davis wrote:
On Sunday, September 11, 2011 14:00:55 Charles Hixson wrote:
On 09/11/2011 01:25 PM, Vladimir Panteleev wrote:
On Sun, 11 Sep 2011 23:02:37 +0300, Charles Hixson

<charleshi...@earthlink.net>  wrote:
I can't figure it out from
http://www.digitalmars.com/d/2.0/operatoroverloading.html#Binary

// I assume your data structure looks like this
class Node(Key, Data)
{
Key k;
Node!(Key, Data) left, right;
int level;
// ...

void opBinary!("in")(Key k)
{
if (level == 0) return false;
if (k<  key) return k in left;
if (key<  k) return k in right;
return true;
}
}

VOID??  I'm going to presume that this should have been bool.
Otherwise, thanks.  That was they syntax I couldn't figure out from the
docs.

And, yeah.  That's what it looks like.  My find code was wrong, because
it should have referenced the node, so what I need to do is move the cod
into the node class.  But it was the syntax of defining the opBinary
specialization that was hanging me up.  (For some reason I have a hard
time wrapping my mind around template code.)

The "in" operator normally returns a pointer to the value that you're trying to find (and returns null if it's not there). Making it return bool may work,
but it's going to be a problem for generic code.

-1

I think the fact that "in" for AAs returns a pointer is a mistake and ugly in the first place and any generic code that relies on any container to return a raw internal pointer is flawed by itself imho.

That reminds me, I should write opIn for dcollections maps. It will return a cursor (not a pointer).

Hm... probably have to overload cursor.opStar and opCast(bool) at that point too for the sake of generic code...

-Steve

Reply via email to