[BACK]Return to transforming_solutions.adb CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / PHC / Ada / Root_Counts / Implift

Annotation of OpenXM_contrib/PHC/Ada/Root_Counts/Implift/transforming_solutions.adb, Revision 1.1.1.1

1.1       maekawa     1: package body Transforming_Solutions is
                      2:
                      3:   procedure Transform ( t : in Transfo; s : in out Solution ) is
                      4:   begin
                      5:     Apply(t,s.v);
                      6:   end Transform;
                      7:
                      8:   function  Transform ( t : Transfo; s : Solution ) return Solution is
                      9:
                     10:     res : Solution(s.n);
                     11:
                     12:   begin
                     13:     res.m := s.m;
                     14:     res.t := s.t;
                     15:     res.v := t*s.v;
                     16:     return res;
                     17:   end Transform;
                     18:
                     19:   procedure Transform ( t : in Transfo; l : in out Solution_List ) is
                     20:
                     21:     tmp : Solution_List;
                     22:
                     23:   begin
                     24:     if not Is_Null(l)
                     25:      then declare
                     26:            n : natural := Head_Of(l).n;
                     27:            s : Solution(n);
                     28:           begin
                     29:            tmp := l;
                     30:             while not Is_Null(tmp) loop
                     31:               Apply(t,Head_Of(tmp).v);
                     32:              tmp := Tail_Of(tmp);
                     33:             end loop;
                     34:           end;
                     35:     end if;
                     36:   end Transform;
                     37:
                     38:   function Transform ( t : Transfo; l : Solution_List ) return Solution_List is
                     39:
                     40:     res,res_last,tmp : Solution_List;
                     41:
                     42:   begin
                     43:     tmp := l;
                     44:     while not Is_Null(tmp) loop
                     45:       Append(res,res_last,Transform(t,Head_Of(tmp).all));
                     46:       tmp := Tail_Of(tmp);
                     47:     end loop;
                     48:     return res;
                     49:   end Transform;
                     50:
                     51:   function Insert ( c : Complex_Number; i : integer; s : Solution )
                     52:                   return Solution is
                     53:
                     54:     res : Solution(s.n+1);
                     55:
                     56:   begin
                     57:     res.m := s.m;
                     58:     res.t := s.t;
                     59:     for j in res.v'first..(i-1) loop
                     60:       res.v(j) := s.v(j);
                     61:     end loop;
                     62:     res.v(i) := c;
                     63:     for j in (i+1)..res.v'last loop
                     64:       res.v(j) := s.v(j-1);
                     65:     end loop;
                     66:     return res;
                     67:   end Insert;
                     68:
                     69:   procedure Insert ( c : in Complex_Number; i : in integer;
                     70:                     l : in out Solution_List ) is
                     71:   begin
                     72:     if not Is_Null(l)
                     73:      then declare
                     74:            tmp : Solution_List;
                     75:            res,res_last : Solution_List;
                     76:            sol : Solution(Head_Of(l).n+1);
                     77:           begin
                     78:            tmp := l;
                     79:            while not Is_Null(tmp) loop
                     80:              declare
                     81:                ls : Link_to_Solution := Head_Of(tmp);
                     82:               begin
                     83:                sol.m := ls.m;
                     84:                sol.t := ls.t;
                     85:                for j in sol.v'first..(i-1) loop
                     86:                  sol.v(j) := ls.v(j);
                     87:                 end loop;
                     88:                sol.v(i) := c;
                     89:                for j in (i+1)..sol.v'last loop
                     90:                  sol.v(j) := ls.v(j-1);
                     91:                 end loop;
                     92:                Append(res,res_last,sol);
                     93:               end;
                     94:              tmp := Tail_Of(tmp);
                     95:             end loop;
                     96:            Clear(l); l := res;
                     97:           end;
                     98:     end if;
                     99:   end Insert;
                    100:
                    101:   function Insert ( c : Complex_Number; i : integer; l : Solution_List )
                    102:                  return Solution_List is
                    103:
                    104:     res : Solution_List;
                    105:
                    106:   begin
                    107:     if not Is_Null(l)
                    108:      then declare
                    109:            tmp,res_last : Solution_List;
                    110:           begin
                    111:            tmp := l;
                    112:            while not Is_Null(tmp) loop
                    113:              Append(res,res_last,Insert(c,i,Head_Of(tmp).all));
                    114:               tmp := Tail_Of(tmp);
                    115:             end loop;
                    116:          end;
                    117:     end if;
                    118:     return res;
                    119:   end Insert;
                    120:
                    121:   function Insert ( cv : Vector; i : integer; s : Solution )
                    122:                  return Solution_List is
                    123:
                    124:     res,res_last : Solution_List;
                    125:
                    126:   begin
                    127:     for j in cv'range loop
                    128:       Append(res,res_last,Insert(cv(j),i,s));
                    129:     end loop;
                    130:     return res;
                    131:   end Insert;
                    132:
                    133: end Transforming_Solutions;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>