with Standard_Integer_Vectors; use Standard_Integer_Vectors;
package body Power_Lists is
function Create ( p : Standard_Complex_Polynomials.Poly ) return List is
res,res_last : List;
procedure Visit_Term ( t : in Standard_Complex_Polynomials.Term;
cont : out boolean ) is
h : Link_to_Vector;
begin
h := new Standard_Integer_Vectors.Vector(t.dg'range);
for j in h'range loop
h(j) := t.dg(j);
end loop;
Append(res,res_last,h);
cont := true;
end Visit_Term;
procedure Visit_Terms is
new Standard_Complex_Polynomials.Visiting_Iterator(Visit_Term);
begin
Visit_Terms(p);
return res;
end Create;
function Create ( p : Standard_Complex_Laur_Polys.Poly ) return List is
res,res_last : List;
procedure Visit_Term ( t : in Standard_Complex_Laur_Polys.Term;
cont : out boolean ) is
h : Link_to_Vector;
begin
h := new Standard_Integer_Vectors.Vector(t.dg'range);
for j in h'range loop
h(j) := t.dg(j);
end loop;
Append(res,res_last,h);
cont := true;
end Visit_Term;
procedure Visit_Terms is
new Standard_Complex_Laur_Polys.Visiting_Iterator(Visit_Term);
begin
Visit_Terms(p);
return res;
end Create;
function Select_Terms ( p : Standard_Complex_Polynomials.Poly; l : List )
return Standard_Complex_Polynomials.Poly is
res : Standard_Complex_Polynomials.Poly
:= Standard_Complex_Polynomials.Null_Poly;
procedure Select_Term ( t : in Standard_Complex_Polynomials.Term;
cont : out boolean ) is
v : Standard_Integer_Vectors.Vector(t.dg'range);
begin
for i in v'range loop
v(i) := t.dg(i);
end loop;
if Is_In(l,v)
then Add(res,t);
end if;
cont := true;
end Select_Term;
procedure Select_Poly is
new Standard_Complex_Polynomials.Visiting_Iterator ( Select_Term );
begin
Select_Poly(p);
return res;
end Select_Terms;
function Select_Terms ( p : Standard_Complex_Laur_Polys.Poly; l : List )
return Standard_Complex_Laur_Polys.Poly is
res : Standard_Complex_Laur_Polys.Poly
:= Standard_Complex_Laur_Polys.Null_Poly;
procedure Select_Term ( t : in Standard_Complex_Laur_Polys.Term;
cont : out boolean ) is
v : Standard_Integer_Vectors.Vector(t.dg'range);
begin
for i in v'range loop
v(i) := t.dg(i);
end loop;
if Is_In(l,v)
then Add(res,t);
end if;
cont := true;
end Select_Term;
procedure Select_Poly is
new Standard_Complex_Laur_Polys.Visiting_Iterator ( Select_Term );
begin
Select_Poly(p);
return res;
end Select_Terms;
function Create ( p : Poly_Sys ) return Array_of_Lists is
res : Array_of_Lists(p'range);
begin
for i in p'range loop
res(i) := Create(p(i));
end loop;
return res;
end Create;
function Create ( p : Laur_Sys ) return Array_of_Lists is
res : Array_of_Lists(p'range);
begin
for i in p'range loop
res(i) := Create(p(i));
end loop;
return res;
end Create;
function Select_Terms ( p : Poly_Sys; al : Array_of_Lists )
return Poly_Sys is
res : Poly_Sys(p'range);
begin
for i in p'range loop
res(i) := Select_Terms(p(i),al(i));
end loop;
return res;
end Select_Terms;
function Select_Terms ( p : Laur_Sys; al : Array_of_Lists )
return Laur_Sys is
res : Laur_Sys(p'range);
begin
for i in p'range loop
res(i) := Select_Terms(p(i),al(i));
end loop;
return res;
end Select_Terms;
end Power_Lists;