Rotating though an enum idiom

Denis Koroskin 2korden at gmail.com
Sat Sep 6 16:22:30 PDT 2008


On Sun, 07 Sep 2008 02:18:32 +0400, Spacen Jasset  
<spacenjasset at yahoo.co.uk> wrote:

> Spacen Jasset wrote:
>> Is there a way to "rotate" though and enum; So that:
>>   enum RenderMode { POINT, LINE, FILL }
>>  renderMode = POINT;
>> fn(renderMode) gives LINE
>> fn(renderMode) gives FILL
>> fn(renderMode) gives POINT
>> and so on, in rotation.
>>  I would normally use some sort of modulo operation on an int to do  
>> this, but I wonder if there is another way.
> Like this:
> mRenderMode = cast(RenderMode)((mRenderMode + 1) % (RenderMode.max + 1));

T rotate(T)(T elem)
{
     return cast(T)((elem + 1) % (T.max + 1));
}

enum RenderMode { POINT, LINE, FILL }

RenderMode mRenderMode = RenderMode.POINT;
mRenderMode = rotate(mRenderMode); // returns RenderMode.LINE


More information about the Digitalmars-d-learn mailing list