www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Voldemort command structures

reply Gor Gyolchanyan <gor.f.gyolchanyan gmail.com> writes:
Voldemort types (coined by Andrei Alexandrescu) are types, which can't
be named. Like so:

auto getMisteriousData(int i)
{
    struct Mysterious
    {
        int i;
    }

    return Mysterious(i);
}

The only way to use mysterious structure is to either do this:

auto m = getMysteriousData(12);

or

ReturnTypeOf!getMysteriousData m;

Here's a very handsome use case of this setup:

class Set(T)
{
public:
    auto opIndex(T datum_)
    {
        struct Command
        {
        public:
            alias _datum this;

            bool contains()  property
            {
                return (_datum in _set) !is null;
            }

            void add()
            {
                _set._data[_datum] = false;
            }

            void remove()
            {
                _set._data.remove(_datum);
            }

        private:
            Set _set;
            T _datum;
        }
    }

private:
   bool[T] _data;
}

this will allow you do use Set class like this:

auto s = new Set!int;
assert(!s[6].contains);
s[6].add();
assert(s[6].contains);
s[6].remove();
assert(!s[6].contains);

This will get even better if the voldemort Command structure, returned
by opIndex would include the same pattern, allowing to chain the
parameters and actions in any way desirable.

-- 
Bye,
Gor Gyolchanyan.
Apr 22 2012
next sibling parent Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> writes:
On 4/22/12 5:24 AM, Gor Gyolchanyan wrote:
 Voldemort types (coined by Andrei Alexandrescu)

Walter did. Andrei
Apr 22 2012
prev sibling parent Gor Gyolchanyan <gor.f.gyolchanyan gmail.com> writes:
Sorry. In any case this allows to effectively specify the parameters
before the method being called.

On Sun, Apr 22, 2012 at 5:23 PM, Andrei Alexandrescu
<SeeWebsiteForEmail erdani.org> wrote:
 On 4/22/12 5:24 AM, Gor Gyolchanyan wrote:
 Voldemort types (coined by Andrei Alexandrescu)

Walter did. Andrei

-- Bye, Gor Gyolchanyan.
Apr 22 2012