digitalmars.D - aa -> set
- Ilya Zaitseff (9/9) Jun 05 2005 interesting...
- Derek Parnell (7/19) Jun 05 2005 This looks like a neat way to create sets. I normally use 'bool[int]' to...
- Unknown W. Brackets (4/16) Jun 05 2005 Very interesting. I would like some way to have a void value hash...
- Walter (5/14) Jun 05 2005 That's going away in the next release, due to popular revulsion at the i...
- Andrew Fedoniouk (14/33) Jun 06 2005 Just as an idea:
- Sean Kelly (4/21) Jun 06 2005 I actually like this :p But I suppose it's because I'm used to the beha...
- Kevin Bealer (23/40) Jun 06 2005 (I thought the current behavior was weird when I first saw it in C++. I...
interesting... void[int] x; // set declaration void main() { x[1]; // add element '1' to set if (1 in x != null) printf("1 in set"); } currently it works. but, are there any warranty that compiler do not remove x[1] expression?
Jun 05 2005
On Mon, 06 Jun 2005 14:19:52 +1100, Ilya Zaitseff wrote:interesting... void[int] x; // set declaration void main() { x[1]; // add element '1' to set if (1 in x != null) printf("1 in set"); } currently it works. but, are there any warranty that compiler do not remove x[1] expression?This looks like a neat way to create sets. I normally use 'bool[int]' to do the same. -- Derek Melbourne, Australia 6/06/2005 1:24:42 PM
Jun 05 2005
Very interesting. I would like some way to have a void value hash... basically just a btree, where missing is the same as false. I wonder if it takes memory for the values anyway? Probably does. -[Unknown]interesting... void[int] x; // set declaration void main() { x[1]; // add element '1' to set if (1 in x != null) printf("1 in set"); } currently it works. but, are there any warranty that compiler do not remove x[1] expression?
Jun 05 2005
"Ilya Zaitseff" <sark7 mail333.com> wrote in message news:op.srxh7egpaaezs2 ilya.tec.amursk.ru...interesting... void[int] x; // set declaration void main() { x[1]; // add element '1' to set if (1 in x != null) printf("1 in set"); } currently it works. but, are there any warranty that compiler do not remove x[1] expression?That's going away in the next release, due to popular revulsion at the idea that referencing a non-existent key in an associative array would implicitly add it.
Jun 05 2005
"Walter" <newshound digitalmars.com> wrote in message news:d80rpv$2p85$4 digitaldaemon.com..."Ilya Zaitseff" <sark7 mail333.com> wrote in message news:op.srxh7egpaaezs2 ilya.tec.amursk.ru...Just as an idea: In my implementation of Dictionary (wrapper around map) I am using additional forms: VALUE opIndex(KEY key, VALUE delegate(KEY k) ctor) VALUE opIndex(KEY key, VALUE function(KEY k) ctor) Additional parameter allows to construct value on the fly if it does not exist effectively as there are cases (e.g. implementation of String.intern in Java) where it is nice to have feature. And of course: const void[int] x; //eh?interesting... void[int] x; // set declaration void main() { x[1]; // add element '1' to set if (1 in x != null) printf("1 in set"); } currently it works. but, are there any warranty that compiler do not remove x[1] expression?That's going away in the next release, due to popular revulsion at the idea that referencing a non-existent key in an associative array would implicitly add it.
Jun 06 2005
In article <d80rpv$2p85$4 digitaldaemon.com>, Walter says..."Ilya Zaitseff" <sark7 mail333.com> wrote in message news:op.srxh7egpaaezs2 ilya.tec.amursk.ru...I actually like this :p But I suppose it's because I'm used to the behavior of std::map in C++. Seaninteresting... void[int] x; // set declaration void main() { x[1]; // add element '1' to set if (1 in x != null) printf("1 in set"); } currently it works. but, are there any warranty that compiler do not remove x[1] expression?That's going away in the next release, due to popular revulsion at the idea that referencing a non-existent key in an associative array would implicitly add it.
Jun 06 2005
In article <d80rpv$2p85$4 digitaldaemon.com>, Walter says..."Ilya Zaitseff" <sark7 mail333.com> wrote in message news:op.srxh7egpaaezs2 ilya.tec.amursk.ru...(I thought the current behavior was weird when I first saw it in C++. I'm used to it now, but if it changes that's okay.) What replaces the current behavior? Do you get an exception from T[unknown], or just T.init? The C++ way seems to make sense in C++, since I can store a C++ reference to an object and then avoid a second lookup for the insertion phase. In D you can't store a mutable reference (as far as I know), unless maybe with: T * xp = & x[i]; Does this work now (it seems to, with int[char[]]), would it still work, or would there still be a way to avoid the second lookup for the "if (i !in container) { container[i] = 100; }"? I guess I'm back to proposing opIndexMutable() or similar... It seems like "writeable" cases such as the above could use the (current) "x[i] = T.init" semantics if not present. Likewise for passing to inout parameters. FWIW, I don't mind if "second lookup avoidance" is a little more awkward syntax wise since its only an optimization. The current mechanism probably leads many people to do two lookups, either with "in" then "x[i]=" or another similar two-step. One syntax might be: x.lookup(i): returns "T*". Sorry if it seems like you're getting fired on from both camps... Kevininteresting... void[int] x; // set declaration void main() { x[1]; // add element '1' to set if (1 in x != null) printf("1 in set"); } currently it works. but, are there any warranty that compiler do not remove x[1] expression?That's going away in the next release, due to popular revulsion at the idea that referencing a non-existent key in an associative array would implicitly add it.
Jun 06 2005