SizesAndBlocks.h
Go to the documentation of this file.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 #ifndef MAT_SIZESANDBLOCKS
00029 #define MAT_SIZESANDBLOCKS
00030 #include "matInclude.h"
00031 namespace mat{
00032
00037 class SizesAndBlocks {
00038 public:
00040 SizesAndBlocks()
00041 :nBlocks(0), nScalars(0), offset(0), nTotalScalars(0) {}
00043 SizesAndBlocks(SizesAndBlocks const & other);
00048 SizesAndBlocks(std::vector<int> const & blockSizesInp,
00049 int const nScalarsInp)
00050 : nBlocks(0),
00051 nScalars(nScalarsInp), offset(0), nTotalScalars(nScalarsInp) {
00052 setup(blockSizesInp);
00053 }
00055 SizesAndBlocks& operator=
00056 (SizesAndBlocks const & other);
00057
00058 bool operator==(SizesAndBlocks const & other) const;
00059
00060 SizesAndBlocks
00061 getSizesAndBlocksForLowerLevel(int const blockNumber) const;
00062
00063 inline bool is_empty() const {return blockSizes.empty();}
00064 inline int const & getNBlocks() const {return nBlocks;}
00065 inline int const & getNScalars() const {return nScalars;}
00066 void getBlockSizeVector(std::vector<int> & blockSizesCopy) const;
00071 inline int whichBlock(int const globalIndex) const {
00072 return (globalIndex - offset) / blockSizes[0];
00073 }
00074
00075 inline int getOffset() const {return offset;}
00076 inline int getNTotalScalars() const {return nTotalScalars;}
00077 ~SizesAndBlocks() {}
00078 protected:
00079 std::vector<int> blockSizes;
00087 int nBlocks;
00092 int nScalars;
00093 int offset;
00094 int nTotalScalars;
00096 SizesAndBlocks(std::vector<int> const & blockSizesInp,
00097 int const nScalarsInp,
00098 int const offsetInp,
00099 int const nTotalScalarsInp)
00100 : nBlocks(0),
00101 nScalars(nScalarsInp), offset(offsetInp),
00102 nTotalScalars(nTotalScalarsInp) {
00103 setup(blockSizesInp);
00104 }
00105
00106 void setup(std::vector<int> const & blockSizesInp);
00107
00108 private:
00109 };
00110
00111 }
00112 #endif