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

Annotation of OpenXM_contrib/PHC/Ada/Continuation/continuation_data.adb, Revision 1.1.1.1

1.1       maekawa     1: package body Continuation_Data is
                      2:
                      3: -- AUXILIARY :
                      4:
                      5:   procedure Append ( first,last : in out Solution_List;
                      6:                      ls : in Link_to_Solution ) is
                      7:   begin
                      8:     if Is_Null(first)
                      9:      then Construct(ls,first);
                     10:           last := first;
                     11:      else declare
                     12:             tmp : Solution_List;
                     13:           begin
                     14:             Construct(ls,tmp);
                     15:             Swap_Tail(last,tmp);
                     16:             last := Tail_Of(last);
                     17:           end;
                     18:     end if;
                     19:   end Append;
                     20:
                     21: -- CREATORS :
                     22:
                     23:   function Shallow_Create ( s : Link_to_Solution ) return Solu_Info is
                     24:
                     25:     res : Solu_Info;
                     26:
                     27:   begin
                     28:     res.sol := s;
                     29:     Init_Info(res);
                     30:     return res;
                     31:   end Shallow_Create;
                     32:
                     33:   function Deep_Create ( s : Solution ) return Solu_Info is
                     34:
                     35:     res : Solu_Info;
                     36:
                     37:   begin
                     38:     res.sol := new Solution'(s);
                     39:     Init_Info(res);
                     40:     return res;
                     41:   end Deep_Create;
                     42:
                     43:   function Shallow_Create ( s : Solution_Array ) return Solu_Info_Array is
                     44:
                     45:     res : Solu_Info_Array(s'range);
                     46:
                     47:   begin
                     48:     for k in res'range loop
                     49:       res(k) := Shallow_Create(s(k));
                     50:     end loop;
                     51:     return res;
                     52:   end Shallow_Create;
                     53:
                     54:   function Deep_Create ( s : Solution_Array ) return Solu_Info_Array is
                     55:
                     56:     res : Solu_Info_Array(s'range);
                     57:
                     58:   begin
                     59:     for k in res'range loop
                     60:       res(k) := Deep_Create(s(k).all);
                     61:     end loop;
                     62:     return res;
                     63:   end Deep_Create;
                     64:
                     65:   function Shallow_Create ( s : Solution_List )  return Solu_Info_Array is
                     66:
                     67:     res : Solu_Info_Array(1..Length_Of(s));
                     68:     tmp : Solution_List := s;
                     69:
                     70:   begin
                     71:     for k in res'range loop
                     72:       res(k) := Shallow_Create(Head_Of(tmp));
                     73:       tmp := Tail_Of(tmp);
                     74:     end loop;
                     75:     return res;
                     76:   end Shallow_Create;
                     77:
                     78:   function Deep_Create ( s : Solution_List )  return Solu_Info_Array is
                     79:
                     80:     res : Solu_Info_Array(1..Length_Of(s));
                     81:     tmp : Solution_List := s;
                     82:
                     83:   begin
                     84:     for k in res'range loop
                     85:       res(k) := Deep_Create(Head_Of(tmp).all);
                     86:       tmp := Tail_Of(tmp);
                     87:     end loop;
                     88:     return res;
                     89:   end Deep_Create;
                     90:
                     91:   function Shallow_Create ( s : Solu_Info ) return Link_to_Solution is
                     92:   begin
                     93:     s.sol.err := s.cora;
                     94:     s.sol.rco := s.rcond;
                     95:     s.sol.res := s.resa;
                     96:     return s.sol;
                     97:   end Shallow_Create;
                     98:
                     99:   function Deep_Create ( s : Solu_Info ) return Solution is
                    100:   begin
                    101:     s.sol.err := s.cora;
                    102:     s.sol.rco := s.rcond;
                    103:     s.sol.res := s.resa;
                    104:     return s.sol.all;
                    105:   end Deep_Create;
                    106:
                    107:   function Shallow_Create ( s : Solu_Info_Array ) return Solution_Array is
                    108:
                    109:     res : Solution_Array(s'range);
                    110:
                    111:   begin
                    112:     for k in s'range loop
                    113:       res(k) := Shallow_Create(s(k));
                    114:     end loop;
                    115:     return res;
                    116:   end Shallow_Create;
                    117:
                    118:   function Deep_Create ( s : Solu_Info_Array ) return Solution_Array is
                    119:
                    120:     res : Solution_Array(s'range);
                    121:
                    122:   begin
                    123:     for k in s'range loop
                    124:       res(k) := new Solution'(Deep_Create(s(k)));
                    125:     end loop;
                    126:     return res;
                    127:   end Deep_Create;
                    128:
                    129:   function Shallow_Create ( s : Solu_Info_Array ) return Solution_List is
                    130:
                    131:     res,res_last : Solution_List;
                    132:
                    133:   begin
                    134:     for k in s'range loop
                    135:       Append(res,res_last,Shallow_Create(s(k)));
                    136:     end loop;
                    137:     return res;
                    138:   end Shallow_Create;
                    139:
                    140:   function Deep_Create ( s : Solu_Info_Array ) return Solution_List is
                    141:
                    142:     res,res_last : Solution_List;
                    143:
                    144:   begin
                    145:     for k in s'range loop
                    146:       Append(res,res_last,Deep_Create(s(k)));
                    147:     end loop;
                    148:     return res;
                    149:   end Deep_Create;
                    150:
                    151: -- OPERATIONS ON Solu_Info :
                    152:
                    153:   procedure Copy_Info ( s1 : in Solu_Info; s2 : in out Solu_Info ) is
                    154:   begin
                    155:     s2.corr := s1.corr; s2.cora := s1.cora;
                    156:     s2.resr := s1.resr; s2.resa := s1.resa;
                    157:     s2.rcond := s1.rcond;  s2.length_path := s1.length_path;
                    158:     s2.nstep := s1.nstep; s2.nfail := s1.nfail;
                    159:     s2.niter := s1.niter; s2.nsyst := s1.nsyst;
                    160:   end Copy_Info;
                    161:
                    162:   procedure Copy_Solu ( s1 : in Solu_Info; s2 : in out Solu_Info ) is
                    163:   begin
                    164:     Clear(s2.sol);
                    165:     s2.sol := new Solution'(s1.sol.all);
                    166:   end Copy_Solu;
                    167:
                    168:   procedure Copy ( s1 : in Solu_Info; s2 : in out Solu_Info ) is
                    169:   begin
                    170:     Copy_Info(s1,s2);
                    171:     Copy_Solu(s1,s2);
                    172:   end Copy;
                    173:
                    174:   procedure Init_Info ( s : in out Solu_Info ) is
                    175:   begin
                    176:     s.corr := 0.0; s.cora := 0.0; s.resr := 0.0; s.resa := 0.0; s.rcond := 0.0;
                    177:     s.length_path := 0.0;
                    178:     s.nstep := 0; s.nfail := 0; s.niter := 0; s.nsyst := 0;
                    179:   end Init_Info;
                    180:
                    181:   procedure Add_Info ( s1 : in out Solu_Info; s2 : in Solu_Info ) is
                    182:   begin
                    183:     s1.nstep := s1.nstep + s2.nstep;
                    184:     s1.nfail := s1.nfail + s2.nfail;
                    185:     s1.niter := s1.niter + s2.niter;
                    186:     s1.nsyst := s1.nsyst + s2.niter;
                    187:     s1.length_path := s1.length_path + s2.length_path;
                    188:   end Add_Info;
                    189:
                    190:   procedure Update_Info ( s1 : in out Solu_Info; s2 : in Solu_Info ) is
                    191:   begin
                    192:     s1.corr := s2.corr; s1.cora := s2.cora;
                    193:     s1.resr := s2.resr; s1.resa := s2.resa;
                    194:     s1.rcond := s2.rcond;
                    195:     Add_Info(s1,s2);
                    196:   end Update_Info;
                    197:
                    198: -- OPERATIONS ON Solu_Info_Array :
                    199:
                    200:   procedure Copy ( s : in Solu_Info_Array; sa : in out Solution_Array ) is
                    201:   begin
                    202:     Clear(sa);
                    203:     for k in s'range loop
                    204:       sa(k) := new Solution'(s(k).sol.all);
                    205:     end loop;
                    206:   end Copy;
                    207:
                    208:   procedure Copy ( sa : in Solution_Array; s : in out Solu_Info_Array ) is
                    209:   begin
                    210:     for k in sa'range loop
                    211:       Clear(s(k).sol);
                    212:       s(k).sol := new Solution'(sa(k).all);
                    213:     end loop;
                    214:   end Copy;
                    215:
                    216: -- DESTRUCTORS :
                    217:
                    218:   procedure Clear ( s : in out Solu_Info ) is
                    219:   begin
                    220:     Clear(s.sol);
                    221:   end Clear;
                    222:
                    223:   procedure Clear ( s : in out Solu_Info_Array ) is
                    224:   begin
                    225:     for k in s'range loop
                    226:       Clear(s);
                    227:     end loop;
                    228:   end Clear;
                    229:
                    230: end Continuation_Data;

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