defining "in" What is the proper way in D2?
Steven Schveighoffer
schveiguy at yahoo.com
Mon Sep 12 05:16:26 PDT 2011
On Sun, 11 Sep 2011 18:11:11 -0400, Timon Gehr <timon.gehr at 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
>>>>
>>>> <charleshixsn at 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
More information about the Digitalmars-d-learn
mailing list