Annotation of OpenXM_contrib/PHC/Ada/Schubert/curves_into_grassmannian_io.adb, Revision 1.1.1.1
1.1 maekawa 1: with Characters_and_Numbers; use Characters_and_Numbers;
2: with Symbol_Table; use Symbol_Table;
3: with Brackets; use Brackets;
4: with Curves_into_Grassmannian; use Curves_into_Grassmannian;
5:
6: package body Curves_into_Grassmannian_io is
7:
8: procedure Set_up_Symbol_Table
9: ( m,p,q : in natural; top,bottom : in Bracket;
10: addmix : in natural ) is
11:
12: n : constant natural := Number_of_Variables(top,bottom) + 2 + addmix;
13: rws : constant natural := (m+p)*(q+1);
14: row,deg : natural;
15: sb : Symbol;
16:
17: begin
18: if not Symbol_Table.Empty
19: then Symbol_Table.Clear;
20: end if;
21: Symbol_Table.Init(n); -- initialization with #variables
22: sb := (sb'range => ' ');
23: sb(1) := 'x';
24: sb(4) := 's';
25: for j in 1..p loop -- adding the rest columnwise
26: row := 0; deg := 0;
27: for i in 1..rws loop
28: row := row + 1;
29: if i >= top(j) and i <= bottom(j)
30: then sb(2) := Convert_Hexadecimal(row);
31: sb(3) := Convert_Hexadecimal(j);
32: sb(5) := Convert_Hexadecimal(deg);
33: Symbol_Table.Add(sb);
34: end if;
35: if i mod (m+p) = 0
36: then row := 0; deg := deg+1;
37: end if;
38: end loop;
39: end loop;
40: sb := (sb'range => ' ');
41: sb(1) := 's';
42: if addmix = 0
43: then Symbol_Table.Add(sb); -- adding "s"
44: else sb(2) := '1';
45: Symbol_Table.Add(sb); -- adding "s1"
46: sb(2) := '2';
47: Symbol_Table.Add(sb); -- adding "s2"
48: sb(2) := ' ';
49: end if;
50: sb(1) := 't';
51: Symbol_Table.Add(sb); -- adding "t"
52: end Set_up_Symbol_Table;
53:
54: procedure One_Set_up_Symbol_Table
55: ( m,p,q : in natural; top,bottom : in Bracket ) is
56: begin
57: Set_up_Symbol_Table(m,p,q,top,bottom,0);
58: end One_Set_up_Symbol_Table;
59:
60: procedure Two_Set_up_Symbol_Table
61: ( m,p,q : in natural; top,bottom : in Bracket ) is
62: begin
63: Set_up_Symbol_Table(m,p,q,top,bottom,1);
64: end Two_Set_up_Symbol_Table;
65:
66: procedure Reduce_Symbols ( top,bottom : in Bracket; locmap : in Matrix ) is
67:
68: ind : natural := 0;
69:
70: begin
71: for j in locmap'range(2) loop
72: for i in top(j)..bottom(j) loop
73: ind := ind+1;
74: if locmap(i,j) = 1
75: then Symbol_Table.Remove(ind-j+1);
76: end if;
77: end loop;
78: end loop;
79: end Reduce_Symbols;
80:
81: end Curves_into_Grassmannian_io;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>