[fpc-pascal] Problems with generics

bartek bbartek at gmx.net
Mon Dec 17 23:56:32 CET 2007


Hi,

I am toying around with generics and i got stuck when writing somewhat more advanced generic code.
This code has already been once submitted by me as a bug(#0010247) report because fpc 2.2.0 crashes when trying to compile this.
But this time I got futher with the latest svn(9488) compile. The error message(see below) which i got is obvious but i have no idea what to do instead of writing TBucket.PNode.
I hope somebody can enlighten me. Thank you in advance.

----------- 8< *snip, snip* -------------------------
        { TList }

        generic TList<T> = class
                [...]
        end;

        { TLinkedList }

        generic TLinkedList<T> = class
        type
        public
                PNode = ^TNode;
                TNode = record
                        Previous,
                        Next: PNode;
                        Element: T;
                end;
        var
                [...]
        end;


        { THashTable }

        generic THashTable<T> = class
        type
        public
                THashNode = record
                        Hash: LongWord;
                        Key: ShortString;
                        Element: T;
                end;
                TBucket = specialize TLinkedList<THashNode>;
                TBucketList = specialize TList<TBucket>;
        var
        private
                BucketList: TBucketList;

                procedure InitBucketList(const TableSize: integer);
                procedure ReHash(const TableSize: integer);
                function GetElement(const Key: ShortString): T;
                procedure SetElement(const Key: ShortString; const AElement: T);
                function GetTableSize: integer;
                procedure SetTableSize(const AValue: integer);
        public
                constructor Create;
                destructor Destroy; override;

                function HashOf(const Key: ShortString): DWord;

                function BucketNodeOf(const Hash: DWord): TBucket.PNode;
----------------------------------------------------------^^^^^^^^^^^^^^ DataContainers.pp(104,66) Fatal: Syntax error, ";" expected but "." found
                function Extract(const Hash: DWord): T;
                function Append(const ANode: TBucket.PNode; const AHash: DWord):

                property Element[Key: ShortString]: T read GetElement write SetElement;
                property TableSize: integer read GetTableSize write SetTableSize;
        end;

----------- 8< *snip, snip* -------------------------


bartek






More information about the fpc-pascal mailing list