16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"TIntegerList"
この発言に対し以下のコメントが寄せられています
#00939 稀杜 さん TInt32List
MES6 でfumikaさんに手本を見せてもらった TIntegerList です。
TList を継承していますので同じメソッドがそのまま使えますが
返値やパラメータが Pointer のものは 同名のメソッドを再宣言して
Integer に変更してあります。
以下の3つが TList にない/違うプロパティとメソッドです。
//リスト内の Integer を昇順で並び替えます。
procedure Sort;
// Items プロパティと同じです。本当は Items を消して Nums だけに
//したかったんですけど(^^; まぁ〜なんとなく付けておきました。
property Nums[Index: Integer]: Integer read Get write Put;
// UnSigned=True だと Sort を符号無しで行います。
property UnSigned: Boolean read FUnSigned write FUnSigned;
-------------------------------------------------------------------
unit IntList;
interface
uses Classes;
type
TIntegerList = class( TList ) {* IntegerList *}
private
FUnSigned : Boolean;
function Get(Index: Integer): Integer;
procedure Put(Index: Integer; const Value: Integer);
public
function Add(Num: Integer): Integer;
function First: Integer;
function IndexOf(Num: Integer): Integer;
procedure Insert(Index, Num: Integer);
function Last: Integer;
function Remove(Num: Integer): Integer;
procedure Pack(RemoveNum: Integer);
procedure Sort;
property Items[Index: Integer]: Integer read Get write Put; default;
property Nums[Index: Integer]: Integer read Get write Put;
property UnSigned: Boolean read FUnSigned write FUnSigned;
end;
implementation
function SortBySmall(Item1, Item2: Pointer): Integer;
begin
if Integer( Item1 )>Integer( Item2 ) then Result := 1
else if Integer( Item1 )<Integer( Item2 ) then Result := -1
else Result := 0;
end;
function SortByUnsignSmall(Item1, Item2: Pointer): Integer;
begin
if Cardinal( Item1 )>Cardinal( Item2 ) then Result := 1
else if Cardinal( Item1 )<Cardinal( Item2 ) then Result := -1
else Result := 0;
end;
function TIntegerList.Get(Index: Integer): Integer;
begin
Result := Integer( inherited Get( Index ) );
end;
procedure TIntegerList.Put(Index: Integer; const Value: Integer);
begin
inherited Put( Index, Pointer( Value ) );
end;
function TIntegerList.Add(Num: Integer): Integer;
begin
Result := inherited Add( Pointer( Num ) );
end;
function TIntegerList.First: Integer;
begin
Result := Get( 0 );
end;
function TIntegerList.IndexOf(Num: Integer): Integer;
begin
Result := inherited IndexOf( Pointer( Num ) );
end;
procedure TIntegerList.Insert(Index, Num: Integer);
begin
inherited Insert( Index, Pointer( Num ) );
end;
function TIntegerList.Last: Integer;
begin
Result := Get( Count-1 );
end;
function TIntegerList.Remove(Num: Integer): Integer;
begin
Result := inherited Remove( Pointer( Num ) );
end;
procedure TIntegerList.Pack(RemoveNum: Integer);
var
idx : Integer;
begin
idx := 0;
while idx<Count do begin
if Get( idx )=RemoveNum then Delete( idx )
else inc( idx );
end;
end;
procedure TIntegerList.Sort;
begin
if UnSigned then inherited Sort( SortByUnsignSmall )
else inherited Sort( SortBySmall );
end;
end.
-------------------------------------------------------------------
(PXC07042) - とらじ - URL
http://member.nifty.ne.jp/trazi
Original document by 寅次 氏 ID:(PXC07042)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|