00001 #ifndef _PCSR_HPP_
00002 #define _PCSR_HPP_
00003
00004 #include "Csr.hpp"
00005
00006 template <typename Tind>
00007 class PCSR : public CSR<Tind>
00008 {
00009 public:
00010
00011 friend std::ostream& operator<<(std::ostream & os, PCSR<Tind> const& pcsr) {
00012 return pcsr.write(os);
00013 }
00014
00015 friend std::istream& operator>>(std::istream & is, PCSR<Tind> & pcsr) {
00016 return pcsr.read(is);
00017 }
00018
00019 typename std::vector<Tind>::iterator write(std::vector<Tind> & v) const {
00020 CSR<Tind>::write(v);
00021
00022 v.push_back(vtxDist_.size());
00023 v.insert(v.end(),vtxDist_.begin(),vtxDist_.end());
00024
00025 return v.end();
00026 }
00027
00028 std::ostream& write(std::ostream & os) const {
00029 CSR<Tind>::write(os);
00030
00031 os << vtxDist_.size() << " ";
00032
00033 for(int i=0; i < vtxDist_.size(); ++i) { os << vtxDist_[i] << " "; }
00034 os << "\n\n";
00035
00036 return os;
00037 }
00038
00039 typename std::vector<Tind>::const_iterator read(const std::vector<Tind> & v) {
00040 typename std::vector<Tind>::const_iterator it = CSR<Tind>::read(v);
00041
00042 vtxDist_.resize(*it); ++it;
00043 std::copy(it,it+vtxDist_.size(),vtxDist_.begin());
00044
00045 return it;
00046 }
00047
00048 std::istream& read(std::istream & is) {
00049 CSR<Tind>::read(is);
00050
00051 Tind tmp_size = 0;
00052 is >> tmp_size;
00053 vtxDist_.resize(tmp_size);
00054 std::istream_iterator<Tind> iit(is);
00055 std::copy(iit, iit+vtxDist_.size(),vtxDist());
00056
00057 return is;
00058 }
00059
00060 PCSR(const int nProc = 0, const Tind size =0): CSR<Tind>(size) , vtxDist_(nProc,0)
00061 {}
00062
00063 void resize_n_proc(const int size) {
00064
00065 vtxDist_.resize(size+1,0);
00066 }
00067
00068 int n_proc() const { return vtxDist_.size()-1 ;}
00069
00070 Tind* vtxDist() { return vtxDist_.data(); }
00071 const Tind* vtxDist() const { return vtxDist_.data(); }
00072
00073 void clear() {
00074 vtxDist_.clear();
00075 CSR<Tind>::clear();
00076 }
00077
00078 bool empty() const {
00079 return vtxDist_.empty();
00080 }
00081
00082 template<class Archive>
00083 void serialize(Archive & archive)
00084 {
00085 CSR<Tind>::serialize(archive);
00086 archive( vtxDist_ );
00087 }
00088
00089 protected:
00090 std::vector<Tind> vtxDist_;
00091 };
00092
00093
00094
00095 #endif //_CSR_HPP_