Вверх ↑
Ответов: 9906
Рейтинг: 351
#1: 2013-06-27 10:11:12 ЛС | профиль | цитата
Тут меня покритиковал один наш коллега в ЛС. Типа боевая асимптотика doValue равна O(n).
И я согласился, что дал себе "слабину" -- n все равно <=100.

В связи с этим, есть просьба к коллегам, которые используют этот элемент, протестировать апдейт

#pas
unit hiMemFifo;

interface

uses Kol,Share,Debug;

type
THIMemFifo = class(TDebug)
private
FData:array of TData;
offSet,highF:integer;
procedure SetCount(cnt:integer);
public
_event_onData:THI_Event;
_data_Data:THI_Event;
_prop_Default:TData;

procedure _work_doValue(var _Data:TData; Index:word);
procedure _work_doClear(var _Data:TData; Index:word);
procedure Value(var _Data:TData; Index:word);

property _prop_Count:integer write SetCount;
end;

implementation

procedure THIMemFifo.SetCount;
var i:integer;
begin
SetLength(FData,cnt);
highF := high(FData);
offSet := highF;
for i := 0 to highF do
FData[i] := _prop_Default;
end;

procedure THIMemFifo._work_doValue;
var dt:TData;
begin
if highF<0 then exit;
offSet := (offSet+highF)mod(highF+1);
dt := FData[offSet];
FData[offSet] := ReadData(_Data,_data_Data);
_hi_CreateEvent(_Data,@_event_onData,dt);
end;

procedure THIMemFifo._work_doClear;
begin
_prop_Count := highF+1;
end;

procedure THIMemFifo.Value;
begin
_Data := FData[(Index+offSet)mod(highF+1)];
end;

end.
Функционирование измениться не должно. Вообще никак (разве что быстродействие в лучшую сторону).
Коль скоро замечаний не случится (на что я рассчитываю), попросим nesco сделать комит.
карма: 9

1
Голосовали:ser_davkin