Main Page   Class Hierarchy   Compound List   File List   Contact   Download   Symbolic Constraints   Examples  

column.cc

00001 #include<scil/scil.h>
00002 #include<scil/column.h>
00003 
00004 using namespace SCIL;
00005 using namespace LEDA;
00006 
00007 column_entry column::inf(const item i) const 
00008 {
00009   return NZ.inf(i);
00010 }
00011 
00012 int column::size() {
00013   /*{\Mop returns the number of entries in the column.}*/
00014   return NZ.size();
00015 }
00016 
00017 
00018 column::item column::first_item() const 
00019 {
00020   /*{\Mop Returns the first non-zero entry of the column.}*/
00021   return NZ.first_item();
00022 };
00023 
00024 
00025 column::column(double d) 
00026 {
00027   /*{\Mcreate Creates the column $d$.}*/
00028   NZ.append(column_entry(nil, d));
00029 }
00030 
00031 column::column (cons v)
00032 {
00033   NZ.append (column_entry (v, 1));
00034 }
00035 
00036 column::column (list<column_entry> &L)
00037 {
00038   NZ = L;
00039 }
00040 
00041 void
00042 column::normalize ()
00043 {
00044   NZ.sort ();
00045   list_item
00046     li;
00047   forall_items (li, NZ)
00048   {
00049     while ((NZ.succ (li) != nil) && (NZ[li].Cons == NZ[NZ.succ (li)].Cons))
00050       {
00051         NZ[li].coeff += NZ[NZ.succ (li)].coeff;
00052         NZ.del_item (NZ.succ (li));
00053       }
00054   }
00055 }
00056 
00057 column
00058 column::operator * (double d)
00059 {
00060   column_entry
00061     st;
00062   list < column_entry > NNZ;
00063   forall (st, NZ)
00064   {
00065     NNZ.append (column_entry (st.Cons, d * st.coeff));
00066   };
00067   return column (NNZ);
00068 }
00069 
00070 column
00071 column::operator + (column r)
00072 {
00073   list < column_entry > NNZ;
00074   list_item
00075     l1 = r.NZ.first ();
00076   column_entry
00077     st;
00078   double
00079     d;
00080   forall (st, NZ)
00081   {
00082     d = 0;
00083     while ((l1 != nil) && (r.NZ[l1].Cons <= st.Cons))
00084       {
00085         if (r.NZ[l1].Cons != st.Cons)
00086           {
00087             NNZ.append (r.NZ[l1]);
00088           }
00089         else
00090           {
00091             d = r.NZ[l1].coeff;
00092           }
00093         l1 = r.NZ.succ (l1);
00094       }
00095     NNZ.append (column_entry (st.Cons, st.coeff + d));
00096   }
00097   return column (NNZ);
00098 }
00099 
00100 column & column::operator += (column r)
00101 {
00102   column_entry
00103     st;
00104   forall (st, r.NZ)
00105   {
00106     NZ.append (st);
00107   }
00108   return *this;
00109 }
00110 
00111 column & column::operator -= (column r)
00112 {
00113   column_entry
00114     st;
00115   forall (st, r.NZ)
00116   {
00117     NZ.append (column_entry (st.Cons, -st.coeff));
00118   };
00119   return *this;
00120 }
00121 
00122 column
00123 column::operator + (cons v)
00124 {
00125   return operator + (column (v));
00126 };
00127 
00128 column
00129 column::operator + (double d)
00130 {
00131   return operator + (column (d));
00132 };
00133 
00134 column
00135 column::operator - (column r)
00136 {
00137   list < column_entry > NNZ;
00138   list_item
00139     l1 = r.NZ.first ();
00140   column_entry
00141     st;
00142   double
00143     d;
00144   forall (st, NZ)
00145   {
00146     d = 0;
00147     while ((l1 != nil) && (r.NZ[l1].Cons <= st.Cons))
00148       {
00149         if (r.NZ[l1].Cons != st.Cons)
00150           {
00151             NNZ.append (column_entry (r.NZ[l1].Cons, -r.NZ[l1].coeff));
00152           }
00153         else
00154           {
00155             d = -r.NZ[l1].coeff;
00156           }
00157         l1 = r.NZ.succ (l1);
00158       }
00159     NNZ.append (column_entry (st.Cons, st.coeff + d));
00160   }
00161   return column (NNZ);
00162 }
00163 
00164 
00165 column::item column::next_item(item i) const {
00166   return NZ.next_item(i);
00167 }
00168 
00169 
00170 column operator *(double d, cons i)
00171 {
00172   return column (i) * d;
00173 };
00174 
00175 column operator *(double d, column c)
00176 {
00177   return c * d;
00178 };
00179 
00180 
00181 

Generated on Tue Nov 16 15:18:14 2004 for SCIL by doxygen1.2.16