Annotation of OpenXM_contrib/PHC/Ada/Root_Counts/Stalift/integer_mixed_subdivisions.ads, Revision 1.1
1.1 ! maekawa 1: with Generic_Lists;
! 2: with Standard_Integer_Vectors; use Standard_Integer_Vectors;
! 3: with Lists_of_Integer_Vectors; use Lists_of_Integer_Vectors;
! 4: with Arrays_of_Integer_Vector_Lists; use Arrays_of_Integer_Vector_Lists;
! 5:
! 6: package Integer_Mixed_Subdivisions is
! 7:
! 8: -- DESCRIPTION :
! 9: -- This package defines regular mixed subdivisions induced by
! 10: -- integer-valued lifting functions.
! 11:
! 12: -- DATA STRUCTURES :
! 13:
! 14: type Mixed_Subdivision; -- list of mixed cells
! 15: type Link_to_Mixed_Subdivision is access Mixed_Subdivision;
! 16:
! 17: type Mixed_Cell is record
! 18: nor : Link_to_Vector; -- inner normal to the facet
! 19: pts : Link_to_Array_of_Lists; -- points that span the cell
! 20: sub : Link_to_Mixed_Subdivision; -- subdivision of the cell
! 21: end record;
! 22:
! 23: package Lists_of_Mixed_Cells is new Generic_Lists(Mixed_Cell);
! 24: type Mixed_Subdivision is new Lists_of_Mixed_Cells.List;
! 25:
! 26: -- CREATORS :
! 27:
! 28: procedure Compute_Inner_Normal ( mic : in out Mixed_Cell );
! 29:
! 30: -- DESCRIPTION :
! 31: -- Computes the inner normal ortogonal to the points in mic.
! 32:
! 33: -- REQUIRED : mic.nor /= null, must already be allocated with
! 34: -- the appropriate size.
! 35:
! 36: function Create ( pts : Array_of_Lists; nor : Vector ) return Mixed_Cell;
! 37: function Create ( pts : Array_of_Lists; nors : List )
! 38: return Mixed_Subdivision;
! 39:
! 40: -- DESCRIPTION :
! 41: -- Creates the mixed cell(s) of those points whose inner product
! 42: -- with the given normal(s) is minimal.
! 43:
! 44: function Create ( pts : Array_of_Lists; mixsub : Mixed_Subdivision )
! 45: return Mixed_Subdivision;
! 46:
! 47: -- DESCRIPTION :
! 48: -- Takes the normals of the cells in the given mixed subdivision
! 49: -- and creates the mixed cells by selecting the points whose inner
! 50: -- product with the normals are minimal.
! 51:
! 52: procedure Update ( pts : in Array_of_Lists; nor : in Vector;
! 53: mixsub,mixsub_last : in out Mixed_Subdivision );
! 54:
! 55: -- DESCRIPTION :
! 56: -- Given a tuple of points and a normal, the mixed subdivision will
! 57: -- be updated: either an existing cell will get additional points,
! 58: -- if the normal already occurs in the subdivision, or otherwise,
! 59: -- a new cell will be created and appended to the mixed subdivision.
! 60:
! 61: procedure Update ( mixsub,mixsub_last : in out Mixed_Subdivision;
! 62: cells : in Mixed_Subdivision );
! 63:
! 64: -- DESCRIPTION :
! 65: -- Applies the other Update to every element in the list cells,
! 66: -- to augment or modify the mixed subdivision mixsub.
! 67:
! 68: -- CONSTRUCTORS :
! 69:
! 70: procedure Copy ( mic1 : in Mixed_Cell; mic2 : in out Mixed_Cell );
! 71: procedure Copy ( mixsub1 : in Mixed_Subdivision;
! 72: mixsub2 : in out Mixed_Subdivision );
! 73:
! 74: -- DESCRIPTION :
! 75: -- Makes a deep copy of the cells and the subdivisions.
! 76:
! 77: procedure Append_Diff ( first,last : in out Mixed_Subdivision;
! 78: mic : in Mixed_Cell );
! 79:
! 80: -- DESCRIPTION :
! 81: -- Appends a mixed cell to the list of cells first, where
! 82: -- last points to the last element of the list first.
! 83: -- The suffix _Diff means that only when the cell does not already
! 84: -- belong to the list first, it will be appended.
! 85:
! 86: procedure Concat_Diff ( first,last : in out Mixed_Subdivision;
! 87: mixsub : in Mixed_Subdivision );
! 88:
! 89: -- DESCRIPTION :
! 90: -- Concatenates all cells in mixsub to the list of cells first,
! 91: -- last is a pointer to the last cell in first.
! 92: -- The suffix _Diff means that only when those cells that do not already
! 93: -- belong to the list first will be appended.
! 94:
! 95: procedure Construct ( mixsub : in Mixed_Subdivision;
! 96: first : in out Mixed_Subdivision );
! 97: procedure Construct_Diff ( mixsub : in Mixed_Subdivision;
! 98: first : in out Mixed_Subdivision );
! 99:
! 100: -- DESCRIPTION :
! 101: -- Constructs all cells in the mixed subdivision to the front of
! 102: -- the list first.
! 103: -- The suffix _Diff means that only when those cells that do not already
! 104: -- belong to the list first will be constructed to first.
! 105:
! 106: -- SELECTORS :
! 107:
! 108: function Equal ( mic1,mic2 : Mixed_Cell ) return boolean;
! 109: function Equal ( mixsub1,mixsub2 : Mixed_Subdivision ) return boolean;
! 110: function Equal ( mixsub1,mixsub2 : Link_to_Mixed_Subdivision )
! 111: return boolean;
! 112:
! 113: -- DESCRIPTION :
! 114: -- Returns true when two mixed cells and mixed subdivisions are equal.
! 115:
! 116: function Is_In ( mixsub : Mixed_Subdivision; normal : Vector ) return boolean;
! 117: function Is_In ( mixsub : Mixed_Subdivision; mic : Mixed_Cell )
! 118: return boolean;
! 119:
! 120: -- DESCRIPTION :
! 121: -- Returns true if normal or cell belongs to the mixed subdivision,
! 122: -- otherwise false is returned. When the whole mixed cell is given,
! 123: -- then not only the normal, but also the points will be checked.
! 124:
! 125: -- DESTRUCTORS :
! 126:
! 127: procedure Deep_Clear ( mic : in out Mixed_Cell );
! 128: procedure Deep_Clear ( mixsub : in out Mixed_Subdivision );
! 129: procedure Deep_Clear ( mixsub : in out Link_to_Mixed_Subdivision );
! 130: procedure Shallow_Clear ( mic : in out Mixed_Cell );
! 131: procedure Shallow_Clear ( mixsub : in out Mixed_Subdivision );
! 132: procedure Shallow_Clear ( mixsub : in out Link_to_Mixed_Subdivision );
! 133:
! 134: -- DESCRIPTION :
! 135: -- The memory space allocated will be freed.
! 136: -- A shallow clear only destroys the list structures,
! 137: -- while with a deep clear, also the contents of the lists are freed.
! 138:
! 139: end Integer_Mixed_Subdivisions;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>