refactor functions for summing out

This commit is contained in:
Tiago Gomes
2012-05-25 20:15:05 +01:00
parent df8a3c5fdc
commit 5ff161b10f
7 changed files with 176 additions and 246 deletions

View File

@@ -146,75 +146,39 @@ class StatesIndexer
class MapIndexer
class MappingIndexer
{
public:
MapIndexer (const Ranges& ranges, const vector<bool>& mapDims)
MappingIndexer (const Ranges& ranges, const vector<bool>& mask)
: index_(0), indices_(ranges.size(), 0), ranges_(ranges),
valid_(true)
{
assert (ranges.size() == mapDims.size());
size_t prod = 1;
offsets_.resize (ranges.size());
for (size_t i = ranges.size(); i-- > 0; ) {
if (mapDims[i]) {
if (mask[i]) {
offsets_[i] = prod;
prod *= ranges[i];
}
}
indices_.resize (ranges.size(), 0);
ranges_ = ranges;
index_ = 0;
valid_ = true;
assert (ranges.size() == mask.size());
}
MapIndexer (const Ranges& ranges, size_t ignoreDim)
MappingIndexer (const Ranges& ranges, size_t dim)
: index_(0), indices_(ranges.size(), 0), ranges_(ranges),
valid_(true)
{
size_t prod = 1;
offsets_.resize (ranges.size());
for (size_t i = ranges.size(); i-- > 0; ) {
if (i != ignoreDim) {
if (i != dim) {
offsets_[i] = prod;
prod *= ranges[i];
}
}
indices_.resize (ranges.size(), 0);
ranges_ = ranges;
index_ = 0;
valid_ = true;
}
/*
MapIndexer (
const VarIds& loopVids,
const Ranges& loopRanges,
const VarIds& mapVids,
const Ranges& mapRanges)
{
unsigned prod = 1;
vector<unsigned> offsets (mapRanges.size());
for (size_t i = mapRanges.size(); i-- > 0; ) {
offsets[i] = prod;
prod *= mapRanges[i];
}
offsets_.reserve (loopVids.size());
for (size_t i = 0; i < loopVids.size(); i++) {
VarIds::const_iterator it =
std::find (mapVids.begin(), mapVids.end(), loopVids[i]);
if (it != mapVids.end()) {
offsets_.push_back (offsets[it - mapVids.begin()]);
} else {
offsets_.push_back (0);
}
}
indices_.resize (loopVids.size(), 0);
ranges_ = loopRanges;
index_ = 0;
size_ = prod;
}
*/
MapIndexer& operator ++ (void)
MappingIndexer& operator++ (void)
{
assert (valid_);
for (size_t i = ranges_.size(); i-- > 0; ) {
@@ -231,11 +195,6 @@ class MapIndexer
return *this;
}
size_t mappedIndex (void) const
{
return index_;
}
operator size_t (void) const
{
return index_;
@@ -259,21 +218,27 @@ class MapIndexer
index_ = 0;
}
friend ostream& operator<< (ostream &os, const MapIndexer& idx)
{
os << "(" << std::setw (2) << std::setfill('0') << idx.index_ << ") " ;
os << idx.indices_;
return os;
}
friend std::ostream& operator<< (std::ostream&, const MappingIndexer&);
private:
size_t index_;
bool valid_;
vector<unsigned> ranges_;
vector<unsigned> indices_;
vector<size_t> offsets_;
size_t index_;
Ranges indices_;
const Ranges& ranges_;
bool valid_;
vector<size_t> offsets_;
};
inline std::ostream& operator<< (ostream &os, const MappingIndexer& mi)
{
os << "(" ;
os << std::setw (2) << std::setfill('0') << mi.index_;
os << ") " ;
os << mi.indices_;
return os;
}
#endif // HORUS_STATESINDEXER_H