with unchecked_deallocation;
package body Generic_Laur_Poly_Systems is
-- COPYING :
procedure Copy ( p : in Laur_Sys; q : in out Laur_Sys ) is
begin
for i in p'range loop
Copy(p(i),q(i));
end loop;
end Copy;
-- ARITHMETIC OPERATIONS :
function "+" ( p,q : Laur_Sys ) return Laur_Sys is
res : Laur_Sys(p'range);
begin
for i in p'range loop
res(i) := p(i)+q(i);
end loop;
return res;
end "+";
function "-" ( p,q : Laur_Sys ) return Laur_Sys is
res : Laur_Sys(p'range);
begin
for i in p'range loop
res(i) := p(i)-q(i);
end loop;
return res;
end "-";
function "-" ( p : Laur_Sys ) return Laur_Sys is
res : Laur_Sys(p'range);
begin
for i in p'range loop
res(i) := -p(i);
end loop;
return res;
end "-";
function "*" ( a : number; p : Laur_Sys ) return Laur_Sys is
res : Laur_Sys(p'range);
begin
for k in p'range loop
res(k) := a*p(k);
end loop;
return res;
end "*";
function "*" ( p : Laur_Sys; a : number ) return Laur_Sys is
begin
return a*p;
end "*";
procedure Add ( p : in out Laur_Sys; q : in Laur_Sys ) is
begin
for i in p'range loop
Add(p(i),q(i));
end loop;
end Add;
procedure Sub ( p : in out Laur_Sys; q : in Laur_Sys ) is
begin
for i in p'range loop
Sub(p(i),q(i));
end loop;
end Sub;
procedure Min ( p : in out Laur_Sys ) is
begin
for i in p'range loop
Min(p(i));
end loop;
end Min;
procedure Mul ( p : in out Laur_Sys; a : in number ) is
begin
for k in p'range loop
Mul(p(k),a);
end loop;
end Mul;
function Diff ( p : Laur_Sys; i : natural ) return Laur_Sys is
res : Laur_Sys(p'range);
begin
for j in p'range loop
res(j) := Diff(p(j),i);
end loop;
return res;
end Diff;
procedure Diff ( p : in out Laur_Sys; i : in natural ) is
begin
for j in p'range loop
Diff(p(j),i);
end loop;
end Diff;
-- DESTRUCTORS :
procedure Clear ( p : in out Laur_Sys ) is
begin
for i in p'range loop
Clear(p(i));
end loop;
end Clear;
procedure Clear ( p : in out Link_to_Laur_Sys ) is
procedure free is new unchecked_deallocation(Laur_Sys,Link_to_Laur_Sys);
begin
if p /= null
then Clear(p.all);
end if;
free(p);
end Clear;
end Generic_Laur_Poly_Systems;