Annotation of OpenXM_contrib/PHC/Ada/Schubert/pieri_trees_io.adb, Revision 1.1.1.1
1.1 maekawa 1: with integer_io; use integer_io;
2: with Standard_Natural_Vectors_io; use Standard_Natural_Vectors_io;
3: with Brackets_io; use Brackets_io;
4:
5: package body Pieri_Trees_io is
6:
7: type Boolean_Array is array ( integer range <> ) of boolean;
8:
9: procedure put ( nd : in Pieri_Node ) is
10: begin
11: put(Standard_Output,nd);
12: end put;
13:
14: procedure put ( file : in file_type; nd : in Pieri_Node ) is
15: begin
16: put(file,nd.node);
17: put(file,"(c="); put(file,nd.c,1);
18: put(file,",i="); put(file,nd.i,1);
19: put(file,",h="); put(file,nd.h,1); put(file,")");
20: end put;
21:
22: procedure put ( lnd : in Link_to_Pieri_Node ) is
23: begin
24: put(Standard_Output,lnd);
25: end put;
26:
27: procedure put ( file : in file_type; lnd : in Link_to_Pieri_Node ) is
28: begin
29: put(file,lnd.all);
30: if lnd.ancestor /= null
31: then put(file," > ");
32: put(file,lnd.ancestor);
33: end if;
34: end put;
35:
36: procedure put ( t : in Pieri_Tree ) is
37: begin
38: put(Standard_Output,t);
39: end put;
40:
41: procedure put ( t : in Pieri_Tree; level : in natural ) is
42: begin
43: put(Standard_Output,t,level);
44: end put;
45:
46: procedure put ( file : in file_type;
47: t : in Pieri_Tree; level : in natural ) is
48:
49: procedure Write_Node ( lnd : in Link_to_Pieri_Node;
50: continue : out boolean ) is
51: begin
52: put(file,lnd.all);
53: continue := true;
54: end Write_Node;
55: procedure Write_Nodes is new Enumerate_Nodes(Write_Node);
56:
57: begin
58: Write_Nodes(t,level);
59: end put;
60:
61: procedure put ( file : in file_type; t : in Pieri_Tree ) is
62:
63: h : constant natural := Height(t);
64:
65: begin
66: put(file,"Branching at "); put(file,t.branches); new_line(file);
67: put(file,"Root node : "); put(file,t.root.node); new_line(file);
68: for i in reverse 1..h loop
69: put(file,"Nodes at level "); put(file,i,1); put(file," :");
70: put(file,t,i); new_line(file);
71: end loop;
72: end put;
73:
74: function Last_Child ( nd : Pieri_Node; i : natural ) return boolean is
75:
76: -- DESCRIPTION :
77: -- Returns true if the ith child is the last child of the node.
78:
79: begin
80: for j in (i+1)..nd.children'last loop
81: if nd.children(j) /= null
82: then return false;
83: end if;
84: end loop;
85: return true;
86: end Last_Child;
87:
88: procedure Write_Labels ( file : in file_type;
89: nd : in Pieri_Node; jump : in natural;
90: last : in Boolean_Array ) is
91:
92: -- DESCRIPTION :
93: -- Writes the contents of the Pieri node with the jump, taking into
94: -- account which children appeared last.
95:
96: begin
97: if nd.h /= 0
98: then put(file," ");
99: end if;
100: for i in 1..(nd.h-1) loop
101: if last(i)
102: then put(file," ");
103: else put(file,"| ");
104: end if;
105: end loop;
106: if nd.h /= 0
107: then put(file,"!-+"); put(file,jump,1);
108: end if;
109: put(file,nd);
110: new_line(file);
111: end Write_Labels;
112:
113: procedure Write_Nodes ( file : in file_type;
114: nd : in Pieri_Node; jump : in natural;
115: last : in out Boolean_Array ) is
116:
117: -- DESCRIPTION :
118: -- Writes the contents of the Pieri node preceded with the index of
119: -- increase (jump), followed by the information on the children.
120:
121: begin
122: Write_Labels(file,nd,jump,last);
123: for i in nd.children'range loop
124: if nd.children(i) /= null
125: then last(nd.h+1) := Last_Child(nd,i);
126: Write_Nodes(file,nd.children(i).all,i,last);
127: end if;
128: end loop;
129: end Write_Nodes;
130:
131: procedure Write_Tree ( t : in Pieri_Tree ) is
132: begin
133: Write_Tree(Standard_Output,t);
134: end Write_Tree;
135:
136: procedure Write_Tree ( file : in file_type; t : in Pieri_Tree ) is
137:
138: last : Boolean_Array(1..Height(t));
139:
140: begin
141: Write_Nodes(file,t.root.all,0,last);
142: end Write_Tree;
143:
144: end Pieri_Trees_io;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>