|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"Extendedのリスト"
{動的に配列を変更する方法はいろいろあると思いますが、やはり使い慣れた
TStringListみたいなものが欲しい、と思って Extended用のTStringListみたい
なものを作りました。 単純な配列に比べメモリは余計に食うし、遅いだろうと
思うのであまりお奨めではありませんが、、、(^^; 本来TPersistantから派生さ
せるべきだと思うんですが、自分自身あまりストリームを使わないので実装しま
せんでした。 使い込んでないのでバグあるかもしれません。ご指摘頂ければ幸
いです。
これを応用してTIntegerListは一瞬にして出きると思いますし 2次元配列に
対応するものも簡単に作れると思います}
interface
uses Classes;
type
TExtendedList=Class
private
FCount:integer;
theList:TList;
newEx:pExtended;
procedure Put(Index:integer;value:Extended);
procedure SetCount(Count:Integer);
function GetCount:Integer;
function Get(Index:Integer):Extended;
public
//使えるメソッドは以下のとおり、だいたいTStringListの感じ
procedure LoadFromFile(filename:string);
procedure SaveToFile(filename:string);
procedure delete(Index:Integer);
procedure add(value:Extended);
constructor create;
destructor destroy;overRide;
//こいつは注意 StringGridのRowCountの感じです。
property Count:integer read getCount write setCount;
property Items[Index: Integer]: Extended
read Get write Put ;default;
end;
implementation
constructor TExtendedList.create;
begin
theList:=TList.create;
end;
procedure TExtendedList.LoadFromFile(filename:string);
var
f:file of Extended;
value:Extended;
begin
SetCount(0);
assignFile(f,filename);
reset(f);
try
while not EOF(f) do
begin
read(f,value);
add(value);
end;
finally
closeFile(f);
end;
end;
procedure TExtendedList.SaveToFile(filename:string);
var
i:integer;
f:file of Extended;
begin
assignFile(f,filename);
rewrite(f);
try
for i:=0 to theList.Count-1 do
write(f,pExtended(theList.items[i])^);
finally
CloseFile(f);
end;
end;
procedure TExtendedList.SetCount(Count:Integer);
var
i:integer;
begin
if Count>theList.Count then
begin
for i:=0 to Count-theList.count-1 do add(0);
end
else
begin
for i:=theList.Count-1 downTo Count do delete(i);
end;
end;
function TExtendedList.GetCount:Integer;
begin
GetCount:=theList.Count;
end;
procedure TExtendedList.Put(Index:integer;value:Extended);
begin
pExtended(theList.items[Index])^:=value;
end;
function TExtendedList.Get(Index:integer):Extended;
begin
Get:=pExtended(theList.items[Index])^;
end;
procedure TExtendedList.add(value:Extended);
begin
new(newEx);
newEx^:=value;
theList.add(newEx);
end;
procedure TExtendedList.delete(Index:integer);
begin
Dispose(pExtended(theList.Items[index]));
theList.Delete(Index);
end;
destructor TExtendedList.destroy;
var
i:integer;
begin
for i:=0 to theList.count-1 do
begin
Dispose(pExtended(theList.Items[i]));
end;
theList.free;
theList:=nil;
inherited Destroy;
end;
98/01/24(土) 12:48 凛(MXB01744)
Original document by 凛 氏 ID:(MXB01744)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|