"IndexType" for ranges

Piotr Szturmaj bncrbme at jadamspam.pl
Tue Oct 2 09:51:25 PDT 2012


monarch_dodra wrote:
> On Tuesday, 2 October 2012 at 16:09:16 UTC, Peter Alexander wrote:
>> On Tuesday, 2 October 2012 at 13:17:45 UTC, monarch_dodra wrote:
>>> If you've ever worked on a template that needs to index a range, you
>>> may have run into this problem: What is the type you should use to
>>> index an RA range?
>>
>> Forgive my ignorance. What's wrong with size_t?
>
> This is what happens when you use size_t:
>
> //----
> import std.range;
> import std.algorithm;
>
> struct ZeroToTen
> {
>      ushort first = 0;
>      ushort last = 10;
>      @property bool empty(){return first == last;}
>      @property ushort front(){return first;}
>      void popFront(){++first;}
>      @property ushort back(){return last;}
>      void popBack(){--last;}
>      @property ZeroToTen save(){return this;}
>      @property ushort length(){return cast(ushort)(last - first);}
>      ushort opIndex(ushort n){return cast(ushort)(first + n);}
> }

Why not use size_t or ulong as parameter? This way all smaller types 
will be implicitly converted.

        ushort opIndex(size_t n){return cast(ushort)(first + n);}



More information about the Digitalmars-d mailing list