Annotation of OpenXM_contrib/PHC/Ada/Root_Counts/Stalift/floating_mixed_subdivisions.ads, Revision 1.1
1.1 ! maekawa 1: with Generic_Lists;
! 2: with Standard_Floating_Numbers; use Standard_Floating_Numbers;
! 3: with Standard_Floating_Vectors; use Standard_Floating_Vectors;
! 4: with Lists_of_Floating_Vectors; use Lists_of_Floating_Vectors;
! 5: with Arrays_of_Floating_Vector_Lists; use Arrays_of_Floating_Vector_Lists;
! 6:
! 7: package Floating_Mixed_Subdivisions is
! 8:
! 9: -- DESCRIPTION :
! 10: -- This package enables working with regular mixed subdivisions.
! 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: function Create ( pts : Array_of_Lists; nor : Vector; tol : double_float )
! 29: return Mixed_Cell;
! 30: function Create ( pts : Array_of_Lists; nors : List; tol : double_float )
! 31: return Mixed_Subdivision;
! 32:
! 33: -- DESCRIPTION :
! 34: -- Creates the mixed cell(s) of those points whose inner product
! 35: -- with the given normal(s) is minimal.
! 36: -- The parameter tol is the tolerance on the precision.
! 37:
! 38: function Create ( pts : Array_of_Lists; mixsub : Mixed_Subdivision;
! 39: tol : double_float ) return Mixed_Subdivision;
! 40:
! 41: -- DESCRIPTION :
! 42: -- Takes the normals of the cells in the given mixed subdivision
! 43: -- and creates the mixed cells by selecting the points whose inner
! 44: -- product with the normals are minimal.
! 45:
! 46: procedure Update ( pts : in Array_of_Lists; nor : in Vector;
! 47: mixsub,mixsub_last : in out Mixed_Subdivision );
! 48:
! 49: -- DESCRIPTION :
! 50: -- Given a tuple of points and a normal, the mixed subdivision will
! 51: -- be updated: either an existing cell will get additional points,
! 52: -- if the normal already occurs in the subdivision, or otherwise,
! 53: -- a new cell will be created and appended to the mixed subdivision.
! 54:
! 55: -- CONSTRUCTORS :
! 56:
! 57: procedure Copy ( mic1 : in Mixed_Cell; mic2 : in out Mixed_Cell );
! 58: procedure Copy ( mixsub1 : in Mixed_Subdivision;
! 59: mixsub2 : in out Mixed_Subdivision );
! 60:
! 61: -- DESCRIPTION :
! 62: -- Makes a deep copy of the cells and the subdivisions.
! 63:
! 64: procedure Append_Diff ( first,last : in out Mixed_Subdivision;
! 65: mic : in Mixed_Cell );
! 66:
! 67: -- DESCRIPTION :
! 68: -- Appends a mixed cell to the list of cells first, where
! 69: -- last points to the last element of the list first.
! 70: -- The suffix _Diff means that only when the cell does not already
! 71: -- belong to the list first, it will be appended.
! 72:
! 73: procedure Concat_Diff ( first,last : in out Mixed_Subdivision;
! 74: mixsub : in Mixed_Subdivision );
! 75:
! 76: -- DESCRIPTION :
! 77: -- Concatenates all cells in mixsub to the list of cells first,
! 78: -- last is a pointer to the last cell in first.
! 79: -- The suffix _Diff means that only when those cells that do not already
! 80: -- belong to the list first will be appended.
! 81:
! 82: procedure Construct ( mixsub : in Mixed_Subdivision;
! 83: first : in out Mixed_Subdivision );
! 84: procedure Construct_Diff ( mixsub : in Mixed_Subdivision;
! 85: first : in out Mixed_Subdivision );
! 86:
! 87: -- DESCRIPTION :
! 88: -- Constructs all cells in the mixed subdivision to the front of
! 89: -- the list first.
! 90: -- The suffix _Diff means that only when those cells that do not already
! 91: -- belong to the list first will be constructed to first.
! 92:
! 93: -- SELECTORS :
! 94:
! 95: function Equal ( mic1,mic2 : Mixed_Cell ) return boolean;
! 96: function Equal ( mixsub1,mixsub2 : Mixed_Subdivision ) return boolean;
! 97: function Equal ( mixsub1,mixsub2 : Link_to_Mixed_Subdivision )
! 98: return boolean;
! 99:
! 100: -- DESCRIPTION :
! 101: -- Returns true when two mixed cells and mixed subdivisions are equal.
! 102:
! 103: function Is_In ( mixsub : Mixed_Subdivision; normal : Vector ) return boolean;
! 104: function Is_In ( mixsub : Mixed_Subdivision; mic : Mixed_Cell )
! 105: return boolean;
! 106:
! 107: -- DESCRIPTION :
! 108: -- Returns true if normal or cell belongs to the mixed subdivision,
! 109: -- otherwise false is returned. When the whole mixed cell is given,
! 110: -- then not only the normal, but also the points will be checked.
! 111:
! 112: -- DESTRUCTORS :
! 113:
! 114: procedure Deep_Clear ( mic : in out Mixed_Cell );
! 115: procedure Deep_Clear ( mixsub : in out Mixed_Subdivision );
! 116: procedure Deep_Clear ( mixsub : in out Link_to_Mixed_Subdivision );
! 117: procedure Shallow_Clear ( mic : in out Mixed_Cell );
! 118: procedure Shallow_Clear ( mixsub : in out Mixed_Subdivision );
! 119: procedure Shallow_Clear ( mixsub : in out Link_to_Mixed_Subdivision );
! 120:
! 121: -- DESCRIPTION :
! 122: -- The memory space allocated will be freed.
! 123: -- A shallow clear only destroys the list structures,
! 124: -- while with a deep clear, also the contents of the lists are freed.
! 125:
! 126: end Floating_Mixed_Subdivisions;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>