[BACK]Return to curves_into_grassmannian_io.adb CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / PHC / Ada / Schubert

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>