{$mode objfpc} unit stunit; interface type TAbstractStack=class protected procedure _pop(var adata; len:integer);virtual;abstract; procedure _push(var adata; len:integer);virtual;abstract; function _empty:boolean;virtual;abstract; function _typeData:integer;virtual;abstract; public property empty:boolean read _empty; property typeData:integer read _typeData; // тип элемента на вершине стека, 0 - неопределено или пусто, 1 - Integer, 2 - extended, 3 - shortstring procedure pushInt(avalue:integer); function popInt:integer; procedure pushFloat(avalue:Extended); function popFloat:integer; procedure pushString(avalue:ShortString); function popString:ShortString; end; TMemoryStack=class(TAbstractStack) protected procedure _pop(var adata; len:integer);override; procedure _push(var adata; len:integer);override; function _empty:boolean;override; function _typeData:integer;override; end; TFileStack=class(TAbstractStack) protected procedure _pop(var adata; len:integer);override; procedure _push(var adata; len:integer);override; function _empty:boolean;override; function _typeData:integer;override; end; implementation // Реализация методов TAbstractStack // Реализация методов TMemoryStack // Реализация методов TFileStack end.