Annotation of OpenXM_contrib/PHC/Ada/Root_Counts/Stalift/floating_mixed_subdivisions_io.adb, Revision 1.1.1.1
1.1 maekawa 1: with integer_io; use integer_io;
2: with Standard_Floating_Numbers_io; use Standard_Floating_Numbers_io;
3: with Standard_Integer_Vectors_io;
4: with Standard_Floating_Vectors_io;
5: with Lists_of_Floating_Vectors_io;
6: with Floating_Integer_Convertors; use Floating_Integer_Convertors;
7: with Integer_Mixed_Subdivisions;
8: with Mixed_Volume_Computation; use Mixed_Volume_Computation;
9:
10: package body Floating_Mixed_Subdivisions_io is
11:
12: -- AUXILIARY :
13:
14: procedure Mixed_Volume ( n : in natural;
15: mix : in Standard_Integer_Vectors.Vector;
16: mic : in out Mixed_Cell; mv : out natural ) is
17:
18: intmic : Integer_Mixed_Subdivisions.Mixed_Cell;
19: intsub : Integer_Mixed_Subdivisions.Mixed_Subdivision;
20: use Integer_Mixed_Subdivisions;
21:
22: begin
23: if mic.sub /= null
24: then intsub := Convert(mic.sub.all);
25: Mixed_Volume(n,mix,intsub,mv);
26: Deep_Clear(intsub);
27: else intmic := Convert(mic);
28: Mixed_Volume(n,mix,intmic,mv);
29: if intmic.sub /= null
30: then mic.sub := new Floating_Mixed_Subdivisions.
31: Mixed_Subdivision'(Convert(intmic.sub.all));
32: end if;
33: Deep_Clear(intmic);
34: end if;
35: end Mixed_Volume;
36:
37: -- INPUT ROUTINES :
38:
39: procedure get ( n,m : in natural; mic : out Mixed_Cell ) is
40: begin
41: get(Standard_Input,n,m,mic);
42: end get;
43:
44: procedure get ( file : in file_type;
45: n,m : in natural; mic : out Mixed_Cell ) is
46:
47: adl : Array_of_Lists(1..m);
48: l : natural;
49:
50: begin
51: Standard_Floating_Vectors_io.get(file,n+1,mic.nor);
52: for k in 1..m loop
53: get(file,l);
54: Lists_of_Floating_Vectors_io.get(file,n+1,l,adl(k));
55: end loop;
56: mic.pts := new Array_of_Lists'(adl);
57: get(file,l);
58: if l /= 0
59: then declare
60: nn,mm : natural;
61: mix : Standard_Integer_Vectors.Link_to_Vector;
62: sub : Mixed_Subdivision;
63: begin
64: get(file,nn,mm,mix,sub);
65: if not Is_Null(sub)
66: then mic.sub := new Mixed_Subdivision'(sub);
67: end if;
68: end;
69: end if;
70: end get;
71:
72: procedure get ( n,m : out natural;
73: mixed_type : out Standard_Integer_Vectors.Link_to_Vector;
74: mixsub : out Mixed_Subdivision ) is
75: begin
76: get(Standard_Input,n,m,mixed_type,mixsub);
77: end get;
78:
79: procedure get ( file : in file_type; n,m : out natural;
80: mixed_type : out Standard_Integer_Vectors.Link_to_Vector;
81: mixsub : out Mixed_Subdivision ) is
82:
83: res,res_last : Mixed_Subdivision;
84: l,nn,mm : natural;
85:
86: begin
87: get(file,nn); n := nn;
88: get(file,mm); m := mm;
89: Standard_Integer_Vectors_io.get(file,mm,mixed_type);
90: get(file,l);
91: for k in 1..l loop
92: declare
93: mic : Mixed_Cell;
94: begin
95: get(file,nn,mm,mic);
96: Append(res,res_last,mic);
97: end;
98: end loop;
99: mixsub := res;
100: end get;
101:
102: -- OUTPUT ROUTINES :
103:
104: procedure put ( lifvec : in Standard_Floating_Vectors.Vector ) is
105: begin
106: put(Standard_Output,lifvec);
107: end put;
108:
109: procedure put ( file : in file_type;
110: lifvec : in Standard_Floating_Vectors.Vector ) is
111: begin
112: for i in lifvec'first..lifvec'last-1 loop
113: text_io.put(file,' '); put(file,lifvec(i),1,0,0);
114: end loop;
115: text_io.put(file,' '); put(file,lifvec(lifvec'last));
116: end put;
117:
118: procedure put ( lifsup : in List ) is
119: begin
120: put(Standard_Output,lifsup);
121: end put;
122:
123: procedure put ( file : in file_type; lifsup : in List ) is
124:
125: tmp : List := lifsup;
126:
127: begin
128: while not Is_Null(tmp) loop
129: put(file,Head_Of(tmp).all); new_line(file);
130: tmp := Tail_Of(tmp);
131: end loop;
132: end put;
133:
134: procedure put ( lifsup : in Array_of_Lists ) is
135: begin
136: put(Standard_Output,lifsup);
137: end put;
138:
139: procedure put ( file : in file_type; lifsup : in Array_of_Lists ) is
140: begin
141: for i in lifsup'range loop
142: put(file,lifsup(i)); new_line(file);
143: end loop;
144: end put;
145:
146: procedure put ( n : in natural; mix : in Standard_Integer_Vectors.Vector;
147: mic : in Mixed_Cell ) is
148: begin
149: put(Standard_Output,n,mix,mic);
150: end put;
151:
152: procedure put ( n : in natural; mix : in Standard_Integer_Vectors.Vector;
153: mic : in out Mixed_Cell; mv : out natural ) is
154: begin
155: put(Standard_Output,n,mix,mic,mv);
156: end put;
157:
158: procedure put ( file : in file_type; n : in natural;
159: mix : in Standard_Integer_Vectors.Vector;
160: mic : in Mixed_Cell ) is
161: begin
162: for i in mic.nor'range loop
163: put(file,mic.nor(i)); new_line(file);
164: end loop;
165: for k in mic.pts'range loop
166: put(file,Length_Of(mic.pts(k)),1); new_line(file);
167: put(file,mic.pts(k));
168: end loop;
169: if mic.sub = null
170: then put(file,0,1); new_line(file);
171: else put(file,1,1); new_line(file);
172: put(file,n,mix,mic.sub.all);
173: end if;
174: end put;
175:
176: procedure put ( file : in file_type;
177: n : in natural; mix : in Standard_Integer_Vectors.Vector;
178: mic : in out Mixed_Cell; mv : out natural ) is
179: begin
180: text_io.put_line(file," normal to cell : ");
181: for i in mic.nor'range loop
182: put(file,mic.nor(i)); new_line(file);
183: end loop;
184: text_io.put_line(file," the points in the cell : ");
185: for k in mic.pts'range loop
186: text_io.put(file," component "); put(file,k,1);
187: text_io.put(file," with ");
188: put(file,Length_Of(mic.pts(k)),1); text_io.put_line(file," points :");
189: put(file,mic.pts(k));
190: end loop;
191: Mixed_Volume(n,mix,mic,mv);
192: if mic.sub /= null
193: then text_io.put_line(file," with refinement : ");
194: put(file,n,mix,mic.sub.all,mv);
195: end if;
196: end put;
197:
198: procedure put ( n : in natural; mix : in Standard_Integer_Vectors.Vector;
199: mixsub : in Mixed_Subdivision ) is
200: begin
201: put(Standard_Output,n,mix,mixsub);
202: end put;
203:
204: procedure put ( n : in natural; mix : in Standard_Integer_Vectors.Vector;
205: mixsub : in out Mixed_Subdivision; mv : out natural ) is
206: begin
207: put(Standard_Output,n,mix,mixsub,mv);
208: end put;
209:
210: procedure put ( file : in file_type; n : in natural;
211: mix : in Standard_Integer_Vectors.Vector;
212: mixsub : in Mixed_Subdivision ) is
213:
214: tmp : Mixed_Subdivision := mixsub;
215:
216: begin
217: put(file,n,1); new_line(file);
218: put(file,mix'last,1); new_line(file);
219: Standard_Integer_Vectors_io.put(file,mix); new_line(file);
220: put(file,Length_Of(mixsub),1); new_line(file);
221: while not Is_Null(tmp) loop
222: put(file,n,mix,Head_Of(tmp));
223: tmp := Tail_Of(tmp);
224: end loop;
225: end put;
226:
227: procedure put ( file : in file_type; n : in natural;
228: mix : in Standard_Integer_Vectors.Vector;
229: mixsub : in out Mixed_Subdivision; mv : out natural ) is
230:
231: tmp : Mixed_Subdivision := mixsub;
232: cnt,res : natural := 0;
233: vol : natural;
234:
235: begin
236: text_io.put(file,"Dimension without lifting : ");
237: put(file,n,1); new_line(file);
238: text_io.put(file,"Number of different supports : ");
239: put(file,mix'last,1); new_line(file);
240: text_io.put(file,"Type of mixture : ");
241: Standard_Integer_Vectors_io.put(file,mix); new_line(file);
242: put_line(file,"The cells in the subdivision :");
243: while not Is_Null(tmp) loop
244: cnt := cnt + 1;
245: text_io.put(file,"Cell "); put(file,cnt,1); text_io.put_line(file," :");
246: declare
247: mic : Mixed_Cell := Head_Of(tmp);
248: begin
249: put(file,n,mix,mic,vol);
250: Set_Head(tmp,mic);
251: end;
252: text_io.put(file,"==> Volume : "); put(file,vol,1); put_line(file,".");
253: res := res + vol;
254: tmp := Tail_Of(tmp);
255: end loop;
256: mv := res;
257: end put;
258:
259: end Floating_Mixed_Subdivisions_io;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>