protected override TMath GetFirst()
        {
            Interval <TMath, TSize> interval = _interval;

            // When anchor is set, start the interval at the next anchor position.
            if (_isAnchorSet)
            {
                TSize anchorDiff = Operator <TMath, TSize> .Subtract(_interval.Start, _anchor);

                double stepSize = Interval <TMath, TSize> .ConvertSizeToDouble(_step);

                double diff = Math.Abs(Interval <TMath, TSize> .ConvertSizeToDouble(anchorDiff)) % stepSize;
                if (diff > 0)
                {
                    if (_anchor.CompareTo(_interval.Start) < 0)
                    {
                        diff = stepSize - diff;
                    }
                    TSize addition = Interval <TMath, TSize> .ConvertDoubleToSize(diff);

                    interval = new Interval <TMath, TSize>(
                        Operator <TMath, TSize> .AddSize(_interval.Start, addition), true,
                        _interval.End, _interval.IsEndIncluded);
                }
            }

            // When first value doesn't lie in interval, immediately step.
            return(interval.IsStartIncluded ? interval.Start : Operator <TMath, TSize> .AddSize(interval.Start, _step));
        }
        protected override bool HasMoreElements(int enumeratedAlready, TMath previous)
        {
            if (Interval <TMath, TSize> .ConvertSizeToDouble(_step) == 0 && enumeratedAlready == 1)
            {
                return(false);
            }

            return(_interval.LiesInInterval(Operator <TMath, TSize> .AddSize(previous, _step)));
        }
        protected override bool HasElements()
        {
            bool nextInInterval = _interval.LiesInInterval(Operator <TMath, TSize> .AddSize(_interval.Start, _step));

            return(_interval.IsStartIncluded || nextInInterval);
        }
 protected override TMath GetNext(int enumeratedAlready, TMath previous)
 {
     return(Operator <TMath, TSize> .AddSize(previous, _step));
 }
 static T AddSize <T, TSize>(T start, TSize addition)
 {
     return(Operator <T, TSize> .AddSize(start, addition));
 }