[BACK]Return to bracket_monomials.ads CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / PHC / Ada / Schubert

File: [local] / OpenXM_contrib / PHC / Ada / Schubert / bracket_monomials.ads (download)

Revision 1.1.1.1 (vendor branch), Sun Oct 29 17:45:32 2000 UTC (23 years, 6 months ago) by maekawa
Branch: PHC, MAIN
CVS Tags: v2, maekawa-ipv6, RELEASE_1_2_3, RELEASE_1_2_2_KNOPPIX_b, RELEASE_1_2_2_KNOPPIX, RELEASE_1_2_2, RELEASE_1_2_1, HEAD
Changes since 1.1: +0 -0 lines

Import the second public release of PHCpack.

OKed by Jan Verschelde.

with Brackets,Generic_Lists;             use Brackets;

package Bracket_Monomials is

-- DESCRIPTION :
--   This package provides a data abstraction to deal with
--   bracket monomials as well as operations to manipulate them.

  type Bracket_Monomial is private;

-- CONSTRUCTORS : a bracket monomial is the product of brackets.

  function Create ( b : Bracket ) return Bracket_Monomial;

  -- DESCRIPTION :
  --   Creates a bracket monomial, consisting out of one single bracket.

  procedure Multiply ( bm : in out Bracket_Monomial; b : in Bracket );

  -- DESCRIPTION :
  --   The bracket monomial is extended with another bracket.

  procedure Copy ( bm1 : in Bracket_Monomial; bm2 : in out Bracket_Monomial );

  -- DESCRIPTION :
  --   Copies the first bracket monomial to the second one.
  --   Note that bm2 := bm1 leads to sharing data and side effects.

-- OPERATIONS :

  function "*" ( b1,b2 : Bracket ) return Bracket_Monomial;

  -- DESCRIPTION :
  --   The resulting bracket monomial is the product of b1 and b2.

  function "*" ( bm : Bracket_Monomial; b : Bracket ) return Bracket_Monomial;
  function "*" ( b : Bracket; bm : Bracket_Monomial ) return Bracket_Monomial;

  -- DESCRIPTION :
  --   Multiplies a bracket monomial with a bracket.

  function "*" ( bm1,bm2 : Bracket_Monomial ) return Bracket_Monomial;
  procedure Multiply ( bm1 : in out Bracket_Monomial;
                       bm2 : in Bracket_Monomial );

  -- DESCRIPTION :
  --   Multiplication of two bracket monomials.

  function Is_Equal ( bm1,bm2 : Bracket_Monomial ) return boolean;

  -- DESCRIPTION :
  --   Returns true when both monomials contains the same brackets.

  function "<" ( bm1,bm2 : Bracket_Monomial ) return boolean;

  -- DESCRIPTION :
  --   Let bm1 = b11*b12*..*b1k and bm2 = b21*b22*..*b2l.
  --   Then bm1 < bm2 if b1i < b2i, for some i.

  function ">" ( bm1,bm2 : Bracket_Monomial ) return boolean;

  -- DESCRIPTION :
  --   Let bm1 = b11*b12*..*b1k and bm2 = b21*b22*..*b2l.
  --   Then bm1 > bm2 if b1i > b2i, for some i.

  function Divisible ( bm : Bracket_Monomial; b : Bracket ) return boolean;

  -- DESCRIPTION :
  --   Returns true if bm is divisible by b, i.e.: if b occurs in bm.

-- ITERATORS OVER THE BRACKETS :

  function Number_of_Brackets ( bm : Bracket_Monomial ) return natural;

  -- DESCRIPTION :
  --   Returns the number of brackets in the monomial bm,
  --   or equivalently the degree of the bracket monomial.

  generic
    with procedure Process ( b : in Bracket; continue : out boolean );
  procedure Enumerate_Brackets ( bm : in Bracket_Monomial );

  -- DESCRIPTION :
  --   Enumerate the brackets in the bracket monomial.
  --   The brackets appear lexicographically in ascending order
  --   as argument of the procedure Process.
  --   Enumeration stops when continue is set to false.

-- DESTRUCTOR :

  procedure Clear ( bm : in out Bracket_Monomial );

  -- DESCRIPTION :
  --   Deallocates the occupied memory space.

private

  package Lists_of_Brackets is new Generic_Lists(Link_to_Bracket);
  type Bracket_Monomial is new Lists_of_Brackets.List;

end Bracket_Monomials;