with Standard_Integer_Vectors; use Standard_Integer_Vectors;
with Standard_Integer_VecVecs; use Standard_Integer_VecVecs;
with Lists_of_Integer_Vectors; use Lists_of_Integer_Vectors;
with Arrays_of_Integer_Vector_Lists; use Arrays_of_Integer_Vector_Lists;
package Arrays_of_Lists_Utilities is
-- DESCRIPTION :
-- This package offers some utilities for working with
-- arrays of lists of integer vectors.
function All_Equal ( al : Array_of_Lists ) return boolean;
-- DESCRIPTION :
-- returns true if all lists in al are the same.
function Interchange2 ( al : Array_of_Lists ) return Array_of_Lists;
-- DESCRIPTION :
-- Returns a permuted array such that if the original array contains
-- a list of length less than or equal to 2, the permuted array has
-- this list on its first position.
function Index2 ( al : Array_of_Lists ) return integer;
-- DESCRIPTION :
-- Returns the index of the list in the array which has a length less
-- than or equal to 2. If no such list can be found, then al'first
-- will be returned.
procedure Mixture ( al : in Array_of_Lists; perm,mix : out Link_to_Vector );
-- DESCRIPTION :
-- Computes the mixture of the sets in al: mix(i) indicates how many
-- times the ith list, given by al(perm(i)), occurs in the array.
-- The list with minimal occurence stands in front.
function Permute ( perm : Vector; al : in Array_of_Lists )
return Array_of_Lists;
-- DESCRIPTION :
-- The returned array is permuted according to the permutation vector.
function Different_Points ( al : Array_of_Lists ) return List;
-- DESCRIPTION :
-- Returns a list of all different points from the lists
-- of al, the first list will not be considered.
function Different_Points ( al : Array_of_Lists ) return Array_of_Lists;
-- DESCRIPTION :
-- Returns lists of all different points from the lists
-- of al, the first list will not be considered.
procedure Remove_Duplicates ( al : in out Array_of_Lists );
-- DESCRIPTION :
-- Except for the first list, all duplicates will be removed from
-- the lists in al.
procedure Shift ( al : in out Array_of_Lists; shiftvecs : in VecVec );
function Shift ( al : Array_of_Lists; shiftvecs : VecVec )
return Array_of_Lists;
-- DESCRIPTION :
-- All lists in al will be shifted along the degrees in shiftvecs.
-- REQUIRED :
-- The ranges of shiftvecs and al are the same.
procedure Projection ( al : in Array_of_Lists; v : in Vector;
ind : integer; res : in out Array_of_Lists;
degenerate : out boolean );
-- DESCRIPTION :
-- The first list in al will not be considered.
-- after termination:
-- 1. degenerate = false:
-- res is an array of degrees lists where for all points x in
-- the list res(i) the following holds: < x , v > = pv, where
-- pv equals the support of the list res(i) in the direction v.
-- The ind-entry of each point in the lists has been deleted.
-- Duplicates have been removed from the lists.
-- 2. degenerate = true:
-- if there exists an entry i for which Length_Of(res(i)) = 1.
-- REQUIRED : al'first = res'first and al'last = res'last + 1
end Arrays_of_Lists_Utilities;