"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