Annotation of OpenXM_contrib/PHC/Ada/Root_Counts/Stalift/integer_mixed_subdivisions.ads, Revision 1.1.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>