Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- generic
- type Item is private;
- type Table_Array is Array(Positive Range<>) of Item;
- package Table is
- type Table_Type(Capacity : Positive) is limited private;
- function Size (T: in Table_Type) return Natural;
- function getTable (T: in Table_Type) return Table_Array; --TODO rename Get_Table
- procedure Insert (T: in out Table_Type; X: in Item );
- generic
- with function op (A: Item) return Boolean is <>;
- procedure Where (T: in Table_Type; R: out Table_Array; N: out Natural);
- generic
- type newItem is private; --TODO rename
- type newTable_Array is Array(Positive Range<>) of newItem; --TODO rename
- with function transfer (X: in Item) return newItem; --TODO rename
- with package NewTablePackage is new Table(Item => newItem, Table_Array => newTable_Array);
- function Selects (T: in Table_Type) return NewTablePackage.Table_Type; --TODO add param, rename!
- --function "=" (H1, H2: Table_Type) return Boolean;
- private
- type Table_Type(Capacity : Positive) is record
- Container: Table_Array(1..Capacity);
- Cont_Size: Natural := 0;
- end record;
- end Table;
- package body Table is
- function Size(T: in Table_Type) return Natural is begin return T.Cont_Size; end;
- procedure Insert (T: in out Table_Type; X: in Item ) is
- begin
- if T.Cont_Size /= T.Capacity then
- T.Cont_Size := T.Cont_Size + 1;
- T.Container(T.Cont_Size) := X;
- end if;
- end Insert;
- function getTable (T: in Table_Type) return Table_Array is begin return T.Container; end;
- procedure Where (T: in Table_Type; R: out Table_Array; N: out Natural) is
- begin
- N := 0;
- for I in 1..T.Cont_Size loop
- if(op(T.Container(I))) then
- N := N + 1;
- R(N) := T.Container(I);
- end if;
- end loop;
- end Where;
- function Selects (T: in Table_Type) return Table_Type is
- R : NewTablePackage.Table_Type(T.Capacity);
- begin
- for I in T'range loop
- R.Insert(transfer(T(I)));
- end loop;
- end Selects;
- end Table;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement