Thread overview
Get superclasses at compile time
Jan 05, 2016
Straivers
Jan 05, 2016
Rikki Cattermole
Jan 05, 2016
Straivers
Jan 05, 2016
Rikki Cattermole
Jan 06, 2016
Straivers
January 05, 2016
Hello,

I'm working on an event system, and I want to be able to check if an event is a subclass of another event. How might I go about this? In essence, I'm looking to compress this:

static if (E == UserInputEvent || E == MouseEvent || E == MouseButtonEvent || E == MouseReleasedEvent)
{
    //MouseEvent => MouseButtonEvent => MouseReleasedEvent
    mreListeners[mrePtr] = listener;
    mrePtr++;
}

into something like this:

static if (isSuperclassOf!(MouseReleasedEvent, E))
{
    mreListeners[mrePtr] = listener;
    mrePtr++;
}

Thank you for your time.

-S
January 05, 2016
On 05/01/16 5:37 PM, Straivers wrote:
> Hello,
>
> I'm working on an event system, and I want to be able to check if an
> event is a subclass of another event. How might I go about this? In
> essence, I'm looking to compress this:
>
> static if (E == UserInputEvent || E == MouseEvent || E ==
> MouseButtonEvent || E == MouseReleasedEvent)
> {
>      //MouseEvent => MouseButtonEvent => MouseReleasedEvent
>      mreListeners[mrePtr] = listener;
>      mrePtr++;
> }
>
> into something like this:
>
> static if (isSuperclassOf!(MouseReleasedEvent, E))
> {
>      mreListeners[mrePtr] = listener;
>      mrePtr++;
> }
>
> Thank you for your time.
>
> -S

is(E : UserInputEvent)
January 05, 2016
On Tuesday, 5 January 2016 at 04:41:45 UTC, Rikki Cattermole wrote:
> On 05/01/16 5:37 PM, Straivers wrote:
>> Hello,
>>
>> I'm working on an event system, and I want to be able to check if an
>> event is a subclass of another event. How might I go about this? In
>> essence, I'm looking to compress this:
>>
>> static if (E == UserInputEvent || E == MouseEvent || E ==
>> MouseButtonEvent || E == MouseReleasedEvent)
>> {
>>      //MouseEvent => MouseButtonEvent => MouseReleasedEvent
>>      mreListeners[mrePtr] = listener;
>>      mrePtr++;
>> }
>>
>> into something like this:
>>
>> static if (isSuperclassOf!(MouseReleasedEvent, E))
>> {
>>      mreListeners[mrePtr] = listener;
>>      mrePtr++;
>> }
>>
>> Thank you for your time.
>>
>> -S
>
> is(E : UserInputEvent)

Okay, maybe I didn't write enough. I have multiple subtypes like:

static if (E == UserInputEvent || E == MouseEvent || E == MouseMovementEvent)
        { //MouseMovementEvent is a subclass of MouseEvent
            mmeListeners[mmePtr] = listener;
            mmePtr++;
        }
        static if (E == UserInputEvent || E == MouseEvent || E == MouseButtonEvent || E == MouseReleasedEvent)
        { //MouseEvent => MouseButtonEvent => MouseReleasedEvent
            mreListeners[mrePtr] = listener;
            mrePtr++;
        }
        static if (E == UserInputEvent || E == MouseEvent || E == MouseButtonEvent || E == MousePressedEvent)
        { //MouseEvent => MouseButtonEvent => MousePressedEvent
            mpeListeners[mpePtr] = listener;
            mpePtr++;
        }

and I want to differentiate between them so that a UserInputEvent will cause all three blocks to be compiled, but a MouseMovementEvent will only cause the first block to be compiled. Sorry about that.
January 05, 2016
On 05/01/16 5:50 PM, Straivers wrote:
> On Tuesday, 5 January 2016 at 04:41:45 UTC, Rikki Cattermole wrote:
>> On 05/01/16 5:37 PM, Straivers wrote:
>>> Hello,
>>>
>>> I'm working on an event system, and I want to be able to check if an
>>> event is a subclass of another event. How might I go about this? In
>>> essence, I'm looking to compress this:
>>>
>>> static if (E == UserInputEvent || E == MouseEvent || E ==
>>> MouseButtonEvent || E == MouseReleasedEvent)
>>> {
>>>      //MouseEvent => MouseButtonEvent => MouseReleasedEvent
>>>      mreListeners[mrePtr] = listener;
>>>      mrePtr++;
>>> }
>>>
>>> into something like this:
>>>
>>> static if (isSuperclassOf!(MouseReleasedEvent, E))
>>> {
>>>      mreListeners[mrePtr] = listener;
>>>      mrePtr++;
>>> }
>>>
>>> Thank you for your time.
>>>
>>> -S
>>
>> is(E : UserInputEvent)
>
> Okay, maybe I didn't write enough. I have multiple subtypes like:
>
> static if (E == UserInputEvent || E == MouseEvent || E ==
> MouseMovementEvent)
>          { //MouseMovementEvent is a subclass of MouseEvent
>              mmeListeners[mmePtr] = listener;
>              mmePtr++;
>          }
>          static if (E == UserInputEvent || E == MouseEvent || E ==
> MouseButtonEvent || E == MouseReleasedEvent)
>          { //MouseEvent => MouseButtonEvent => MouseReleasedEvent
>              mreListeners[mrePtr] = listener;
>              mrePtr++;
>          }
>          static if (E == UserInputEvent || E == MouseEvent || E ==
> MouseButtonEvent || E == MousePressedEvent)
>          { //MouseEvent => MouseButtonEvent => MousePressedEvent
>              mpeListeners[mpePtr] = listener;
>              mpePtr++;
>          }
>
> and I want to differentiate between them so that a UserInputEvent will
> cause all three blocks to be compiled, but a MouseMovementEvent will
> only cause the first block to be compiled. Sorry about that.

static if (is(E : UserInputEvent) || is(E : MouseEvent) || is(E : MouseButtonEvent) || is(E : MousePressedEvent)) {
	//....
}
January 06, 2016
Huh, alright. Thanks.