I'm trying to let an iterator implement the enumerator pattern and return itself, but for that I need to use the type of the generic:

     generic THashmapIterator<TKey, TValue, T, TTable>=class
         public
          type PValue=^TValue;

                // make type alias

                  TIteratorType = generic THashmapIterator<TKey, TValue, T, TTable>;

          var
           Fh,Fp:SizeUInt;
           FData:TTable;
           function Next:boolean;inline;
           function MoveNext:boolean;inline;
           function Prev:boolean;inline;
           function GetData:T;inline;
           function GetKey:TKey;inline;
           function GetValue:TValue;inline;
           function GetMutable:PValue;inline;
           procedure SetValue(value:TValue);inline;
           function getenumerator : TIteratorType ;
           property Data:T read GetData;
           property Key:TKey read GetKey;
           property Value:TValue read GetValue write SetValue;
           property MutableValue:PValue read GetMutable;
           property Current : T read GetData;
       end;

     function THashmapIterator<TKey, TValue, T, TTable>.getenumerator : TIteratorType ;

     begin

        result:=self;

     end;

but the I can't find a TIteratorType definition that is accepted. Can some of the objfpc generics buffs reveal the secret how to do this?

Do I need to nest the iterators first, like in Delphi, and if so will ($modeswitch advancedrecords} allow this?




_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to