00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00036 #ifndef MAT_SIZESANDBLOCKS
00037 #define MAT_SIZESANDBLOCKS
00038 #include "matInclude.h"
00039 namespace mat{
00040
00045 class SizesAndBlocks {
00046 public:
00048 SizesAndBlocks()
00049 :nBlocks(0), nScalars(0), offset(0), nTotalScalars(0) {}
00051 SizesAndBlocks(SizesAndBlocks const & other);
00056 SizesAndBlocks(std::vector<int> const & blockSizesInp,
00057 int const nScalarsInp)
00058 : nBlocks(0),
00059 nScalars(nScalarsInp), offset(0), nTotalScalars(nScalarsInp) {
00060 setup(blockSizesInp);
00061 }
00063 SizesAndBlocks& operator=
00064 (SizesAndBlocks const & other);
00065
00066 bool operator==(SizesAndBlocks const & other) const;
00067
00068 SizesAndBlocks
00069 getSizesAndBlocksForLowerLevel(int const blockNumber) const;
00070
00071 inline bool is_empty() const {return blockSizes.empty();}
00072 inline int const & getNBlocks() const {return nBlocks;}
00073 inline int const & getNScalars() const {return nScalars;}
00074 void getBlockSizeVector(std::vector<int> & blockSizesCopy) const;
00079 inline int whichBlock(int const globalIndex) const {
00080 return (globalIndex - offset) / blockSizes[0];
00081 }
00082
00083 inline int getOffset() const {return offset;}
00084 inline int getNTotalScalars() const {return nTotalScalars;}
00085 ~SizesAndBlocks() {}
00086 protected:
00087 std::vector<int> blockSizes;
00095 int nBlocks;
00100 int nScalars;
00101 int offset;
00102 int nTotalScalars;
00104 SizesAndBlocks(std::vector<int> const & blockSizesInp,
00105 int const nScalarsInp,
00106 int const offsetInp,
00107 int const nTotalScalarsInp)
00108 : nBlocks(0),
00109 nScalars(nScalarsInp), offset(offsetInp),
00110 nTotalScalars(nTotalScalarsInp) {
00111 setup(blockSizesInp);
00112 }
00113
00114 void setup(std::vector<int> const & blockSizesInp);
00115
00116 private:
00117 };
00118
00119 }
00120 #endif