お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
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