sparsestructure.h

Go to the documentation of this file.
00001 #ifndef __sparsestructure_h
00002 #define __sparsestructure_h
00003 
00004 #include  <vector>
00005 #include  "gascoigne.h"
00006 #include  "sparsestructureinterface.h"
00007 
00008 /*------------------------------------------------------------------------*/
00009 
00010 namespace Gascoigne
00011 {
00012 class SparseStructure : public SparseStructureInterface
00013 {
00014   protected:
00015 
00016     typedef  std::vector<IntSet>  Indices;    
00017 
00018     int       sntot;
00019     Indices   sindices;
00020 
00021   public:
00022 
00023   typedef  IntSet::iterator         iterator; 
00024   typedef  IntSet::const_iterator   const_iterator; 
00025   
00026   SparseStructure() : sntot(0),sindices(0) {}
00027 
00028     int                n()              const { return sindices.size(); }
00029     int                ntotal()         const { return sntot; }
00030 
00031     const Indices&     indices()        const { return sindices; }
00032     const IntSet&      row(int i)       const 
00033       {
00034         assert((i>=0)&&(i<sindices.size()));
00035         return sindices[i];
00036       } 
00037     IntSet&             row(int i)
00038       {
00039         assert((i>=0)&&(i<sindices.size()));
00040         return  sindices[i];
00041       }
00042     IntSet::iterator            rowbegin(int i)
00043       {
00044         assert((i>=0)&&(i<sindices.size()));
00045         return  row(i).begin();
00046       }
00047     IntSet::iterator            rowend(int i)
00048       {
00049         assert((i>=0)&&(i<sindices.size()));
00050         return  row(i).end();
00051       }
00052     IntSet::const_iterator      rowbegin(int i)  const
00053       {
00054         assert((i>=0)&&(i<sindices.size()));
00055         return  row(i).begin();
00056       }
00057     IntSet::const_iterator      rowend(int i)    const
00058       {
00059         assert((i>=0)&&(i<sindices.size()));
00060         return  row(i).end();
00061       }
00062     int                rowsize(int i)   const
00063       {
00064         assert((i>=0)&&(i<sindices.size()));
00065         return  row(i).size();
00066       }
00067 
00068     friend std::ostream& operator<<(std::ostream &s, const SparseStructure& A);
00069     void statistics(std::ostream&) const;
00070 
00071     SparseStructure& operator=(const SparseStructure& B);
00072     void build_begin(int n);
00073     void build_clear(int i);
00074     void build_add(int i, int j)
00075       {
00076         row(i).insert(j);
00077       }
00078     template<class IT>
00079     void build_add(int i, IT lsf, IT lsl)
00080       {
00081         for(IT p=lsf;p!=lsl;p++) row(i).insert(*p);
00082       }
00083     template<class IT>
00084     void build_add(IT lsf, IT lsl)
00085       {
00086         for(IT p=lsf;p!=lsl;p++) build_add(*p,lsf,lsl);
00087       }
00088     template<class IT>
00089     void build_add(IT rf, IT rl, IT cf, IT cl)
00090       {
00091         for(IT p=rf;p!=rl;p++) build_add(*p,cf,cl);
00092       }
00093     void build_end();
00094 
00095     void hanging_node(int,int,int);
00096   
00097     void  enlarge(const SparseStructure&);
00098     void  enlarge_lu();
00099     void  enlarge_for_lu(const IntVector& perm);
00100 };
00101 }
00102 
00103 #endif

Generated on Thu Sep 14 10:34:37 2006 for Gascoigne by  doxygen 1.4.7