home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-09-21 | 2.1 KB | 89 lines | [TEXT/CWIE] |
- unit MyHandleArrays;
-
- interface
-
- uses
- Types, Memory;
-
- type
- HandleArrayObject = object
- size: longint;
- data: Handle;
-
- function Create( thesize: longint ): OSStatus;
- procedure Destroy;
- function Count: longint;
- function GetSize: longint;
- function Append( thedata: Ptr ): OSStatus;
- function Insert( index: longint; thedata: Ptr ): OSStatus;
- procedure GetData( index: longint; thedata: Ptr );
- procedure SetData( index: longint; thedata: Ptr );
- procedure Delete( index: longint);
- procedure Reset;
- end;
-
- implementation
-
- uses
- OSUtils, ToolUtils, MyAssertions, MyTypes, MyMemory, MyLowLevel;
-
- function HandleArrayObject.Create( thesize: longint ): OSStatus;
- begin
- size := thesize;
- Create := MNewHandle( data, 0 );
- end;
-
- procedure HandleArrayObject.Destroy;
- begin
- MDisposeHandle( data );
- dispose(self);
- end;
-
- function HandleArrayObject.Count: longint;
- begin
- Assert( data <> nil );
- Count := GetHandleSize( data ) div size;
- end;
-
- function HandleArrayObject.GetSize: longint;
- begin
- GetSize := size;
- end;
-
- function HandleArrayObject.Append( thedata: Ptr ): OSStatus;
- begin
- Assert( data <> nil );
- Append := PtrAndHand( thedata, data, size );
- end;
-
- function HandleArrayObject.Insert( index: longint; thedata: Ptr ): OSStatus;
- begin
- Assert( (data <> nil) & (1 <= index) & (index <= Count + 1) );
- Insert := MMungerInsert( data, (index - 1) * size, thedata, size );
- end;
-
- procedure HandleArrayObject.GetData( index: longint; thedata: Ptr );
- begin
- Assert( (data <> nil) & (1 <= index) & (index <= Count) );
- BlockMoveData( AddPtrLong( data^, (index - 1) * size ), thedata, size );
- end;
-
- procedure HandleArrayObject.SetData( index: longint; thedata: Ptr );
- begin
- Assert( (data <> nil) & (1 <= index) & (index <= Count) );
- BlockMoveData( thedata, AddPtrLong( data^, (index - 1) * size ), size );
- end;
-
- procedure HandleArrayObject.Delete( index: longint);
- begin
- Assert( (data <> nil) & (1 <= index) & (index <= Count) );
- MMungerDelete( data, (index - 1) * size, size );
- end;
-
- procedure HandleArrayObject.Reset;
- begin
- Assert( data <> nil );
- SetHandleSize( data, 0 );
- end;
-
- end.