Скачиваний:
10
Добавлен:
01.05.2014
Размер:
1 Кб
Скачать
☆
type

	TIterator=procedure (AItem:pointer);

	PListItem=^TListItem;
	TListItem=record
		Data:pointer;
		Next:PListItem;
	end;

	PFIFO=^TFIFO;
	TFIFO=object
		AList,BList:PListItem;
		constructor Init;
		destructor Done;
		procedure Put(Element: pointer);
		function Get:pointer;
		procedure FreeItem(AItem: pointer); virtual;
		procedure ForEach(AIterator:TIterator);
	end;



constructor TFIFO.Init;
begin
	AList:=Nil;
	BList:=Nil;
end;

destructor TFIFO.Done;
var
	P:PListItem;
begin
while AList<>Nil do
	begin
		P:=AList^.Next;
		FreeItem(AList^.Data);
		Dispose(AList);
		AList:=P;
	end;
end;

function TFIFO.Get:pointer;
var
	P:PListItem;
	GetData: pointer;
begin
	if AList=Nil then begin Get:=nil; exit; end;
	P:=AList^.Next;
	GetData:=AList^.Data;
	Dispose(AList);
	AList:=P;
	if AList=nil then BList:=AList;
	Get:=GetData;
end;

Procedure TFIFO.Put(Element: pointer);
var
	P: PListItem;
begin
	New(P);
	P^.Data:=Element;
	if (BList=nil) and (AList=nil) then
	begin
		P^.Next:=nil;
		AList:=P;
		BList:=P;
	end
	else
	begin
		BList^.Next:=P;
		P^.Next:=nil;
		BList:=P;
	end;
end;

procedure TFifo.FreeItem;
begin
end;

procedure ForEach(AIterator:TIterator);
var
	Tmp:PListItem;
begin
	Tmp:=AList;
	while Tmp<>nil do
	begin
		AIterator(Tmp);
		Tmp:=Tmp^.Next;
	end;
end;



begin

end.
Соседние файлы в папке Вопросы к экзамену с ответами и демо-программами на Паскале