home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / Pascal / Snippets / PNL Libraries / MyHandleArrays.p < prev    next >
Encoding:
Text File  |  1996-09-21  |  2.1 KB  |  89 lines  |  [TEXT/CWIE]

  1. unit MyHandleArrays;
  2.  
  3. interface
  4.  
  5.     uses
  6.         Types, Memory;
  7.  
  8.     type
  9.         HandleArrayObject = object
  10.                 size: longint;
  11.                 data: Handle;
  12.  
  13.                 function Create( thesize: longint ): OSStatus;
  14.                 procedure Destroy;
  15.                 function Count: longint;
  16.                 function GetSize: longint;
  17.                 function Append( thedata: Ptr ): OSStatus;
  18.                 function Insert( index: longint; thedata: Ptr ): OSStatus;
  19.                 procedure GetData( index: longint; thedata: Ptr );
  20.                 procedure SetData( index: longint; thedata: Ptr );
  21.                 procedure Delete( index: longint);
  22.                 procedure Reset;
  23.             end;
  24.             
  25. implementation
  26.  
  27.     uses
  28.         OSUtils, ToolUtils, MyAssertions, MyTypes, MyMemory, MyLowLevel;
  29.  
  30.     function HandleArrayObject.Create( thesize: longint ): OSStatus;
  31.     begin
  32.         size := thesize;
  33.         Create := MNewHandle( data, 0 );
  34.     end;
  35.  
  36.     procedure HandleArrayObject.Destroy;
  37.     begin
  38.         MDisposeHandle( data );
  39.         dispose(self);
  40.     end;
  41.  
  42.     function HandleArrayObject.Count: longint;
  43.     begin
  44.         Assert( data <> nil );
  45.         Count := GetHandleSize( data ) div size;
  46.     end;
  47.  
  48.     function HandleArrayObject.GetSize: longint;
  49.     begin
  50.         GetSize := size;
  51.     end;
  52.     
  53.     function HandleArrayObject.Append( thedata: Ptr ): OSStatus;
  54.     begin
  55.         Assert( data <> nil );
  56.         Append := PtrAndHand( thedata, data, size );
  57.     end;
  58.  
  59.     function HandleArrayObject.Insert( index: longint; thedata: Ptr ): OSStatus;
  60.     begin
  61.         Assert( (data <> nil) & (1 <= index) & (index <= Count + 1) );
  62.         Insert := MMungerInsert( data, (index - 1) * size, thedata, size );
  63.     end;
  64.  
  65.     procedure HandleArrayObject.GetData( index: longint; thedata: Ptr );
  66.     begin
  67.         Assert( (data <> nil) & (1 <= index) & (index <= Count) );
  68.         BlockMoveData( AddPtrLong( data^, (index - 1) * size ), thedata, size );
  69.     end;
  70.  
  71.     procedure HandleArrayObject.SetData( index: longint; thedata: Ptr );
  72.     begin
  73.         Assert( (data <> nil) & (1 <= index) & (index <= Count) );
  74.         BlockMoveData( thedata, AddPtrLong( data^, (index - 1) * size ), size );
  75.     end;
  76.  
  77.     procedure HandleArrayObject.Delete( index: longint);
  78.     begin
  79.         Assert( (data <> nil) & (1 <= index) & (index <= Count) );
  80.         MMungerDelete( data, (index - 1) * size, size );
  81.     end;
  82.  
  83.     procedure HandleArrayObject.Reset;
  84.     begin
  85.         Assert( data <> nil );
  86.         SetHandleSize( data, 0 );
  87.     end;
  88.  
  89. end.