16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"TInt32List"
この発言は #00888 寅次 さんのTIntegerList に対するコメントです
この発言に対し以下のコメントが寄せられています
#00940 寅次 さん RE:TInt32List
#888 寅次さん こんにちは。稀杜です。
<TInt32List>>
僕が使っている TInt32List です。TList を本来の(?)目的で使っていま
す。(^_^;
TList.Items[n] をポインタとして使っているので、
Longint -> Smallint に置き換えると TInt16List が、
Longint -> Shortint に置き換えると TInt8List が作れます。Delphi4以降
なら TInt64List も作れるでしょう。
寅次さんの TIntegerList と同様に、TList とほとんど同じプロパティ&メ
ソッドが使えます。Items[n] でアクセス、Add で追加、Insert で挿入、
Delete で削除です。
LoadFromStream, SaveToStream はおまけです。
---IntxLists.pas---
unit IntxLists;
interface
uses
Classes;
type
TInt32List = class(TList)
protected
function Get(Index: Integer): Longint;
procedure Put(Index: Integer; Value: Longint);
public
destructor Destroy;override;
property Items[Index: Integer]: Longint read Get
write Put; default;
function Add(Item: Longint): Integer;
procedure Insert(Index: Integer; Item: Longint);
procedure Delete(Index: Integer);
function First: Longint;
function Last: Longint;
procedure SaveToStream(Stream: TStream);
procedure LoadFromStream(Stream: TStream);
end;
implementation
const
SizeOfShortint = SizeOf(Shortint);
SizeOfSmallint = SizeOf(Smallint);
SizeOfLongint = SizeOf(Longint);
type
PShortint = ^Shortint;
PSmallint = ^Smallint;
PLongint = ^Longint;
destructor TInt32List.Destroy;
var
i: Integer;
begin
for i := 0 to Count - 1 do
Dispose(PLongint(inherited Get(i)));
inherited Destroy;
end;
function TInt32List.Get(Index: Integer): Longint;
begin
Result := PLongint(inherited Get(Index))^;
end;
procedure TInt32List.Put(Index: Integer; Value: Longint);
begin
PLongint(inherited Get(Index))^ := Value;
end;
function TInt32List.Add(Item: Longint): Integer;
var
x: PLongint;
begin
New(x);
x^ := Item;
Result := inherited Add(x);
end;
procedure TInt32List.Insert(Index: Integer; Item: Longint);
var
x: PLongint;
begin
New(x);
x^ := Item;
inherited Insert(Index, x);
end;
procedure TInt32List.Delete(Index: Integer);
begin
Dispose(PLongint(inherited Get(Index)));
inherited Delete(Index);
end;
function TInt32List.First: Longint;
begin
Result := Get(0);
end;
function TInt32List.Last: Longint;
begin
Result := Get(Count - 1);
end;
procedure TInt32List.SaveToStream(Stream: TStream);
var
i: Integer;
tmp: Longint;
begin
Stream.WriteBuffer(Count, SizeOf(Integer));
for i := 0 to Count - 1 do
begin
tmp := Get(i);
Stream.WriteBuffer(tmp, SizeOfLongint);
end;
end;
procedure TInt32List.LoadFromStream(Stream: TStream);
var
ItemCount, i: Longint;
tmp: Longint;
begin
for i := 0 to Count - 1 do
Dispose(PLongint(inherited Get(i)));
Clear;
Stream.ReadBuffer(ItemCount, SizeOf(Integer));
for i := 0 to ItemCount - 1 do
begin
Stream.ReadBuffer(tmp, SizeOfLongint);
Add(tmp);
end;
end;
end.
---
1999/09/18(Sat) 12:08 YQW11350 稀杜
Original document by 稀杜 氏 ID:(YQW11350)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|