Advertisement
Guest User

Untitled

a guest
Oct 8th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ada 1.95 KB | None | 0 0
  1. generic
  2.    type Item is private;
  3.    type Table_Array is Array(Positive Range<>) of Item;
  4. package Table is
  5.  
  6.     type Table_Type(Capacity : Positive) is limited private;
  7.    
  8.     function  Size      (T: in Table_Type) return Natural;
  9.     function  getTable  (T: in Table_Type) return Table_Array; --TODO rename Get_Table
  10.     procedure Insert    (T: in out Table_Type; X: in Item );
  11.    
  12.     generic
  13.         with function op (A: Item) return Boolean is <>;
  14.     procedure Where (T: in Table_Type; R: out Table_Array; N: out Natural);
  15.    
  16.     generic
  17.         type newItem is private; --TODO rename
  18.         type newTable_Array is Array(Positive Range<>) of newItem; --TODO rename
  19.         with function transfer (X: in Item) return newItem; --TODO rename
  20.         with package NewTablePackage is new Table(Item => newItem, Table_Array => newTable_Array);
  21.     function Selects (T: in Table_Type) return NewTablePackage.Table_Type;  --TODO add param, rename!
  22.    
  23.     --function "=" (H1, H2: Table_Type) return Boolean;
  24.  
  25. private
  26.     type Table_Type(Capacity : Positive) is record
  27.         Container: Table_Array(1..Capacity);
  28.         Cont_Size:  Natural := 0;
  29.     end record;
  30. end Table;
  31.  
  32.  
  33.  
  34. package body Table is
  35.  
  36.     function Size(T: in Table_Type) return Natural is begin return T.Cont_Size; end;
  37.  
  38.     procedure Insert (T: in out Table_Type; X: in Item ) is
  39.     begin
  40.         if T.Cont_Size /= T.Capacity then
  41.             T.Cont_Size := T.Cont_Size + 1;
  42.             T.Container(T.Cont_Size) := X;
  43.         end if;
  44.     end Insert;
  45.    
  46.     function getTable (T: in Table_Type) return Table_Array is  begin return T.Container; end;
  47.    
  48.     procedure Where (T: in Table_Type; R: out Table_Array; N: out Natural) is
  49.     begin
  50.         N := 0;
  51.         for I in 1..T.Cont_Size loop
  52.             if(op(T.Container(I))) then
  53.                 N    := N + 1;
  54.                 R(N) := T.Container(I);
  55.             end if;
  56.         end loop;
  57.     end Where;
  58.    
  59.     function Selects (T: in Table_Type) return Table_Type is
  60.         R : NewTablePackage.Table_Type(T.Capacity);
  61.     begin
  62.         for I in T'range loop
  63.             R.Insert(transfer(T(I)));
  64.         end loop;
  65.     end Selects;
  66.    
  67. end Table;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement