add a new handy constructor to CutIndexer class

This commit is contained in:
Tiago Gomes 2012-05-26 20:56:41 +01:00
parent 918666d7f6
commit bc2da47804

View File

@ -145,7 +145,7 @@ class CutIndexer
valid_(true)
{
size_t prod = 1;
offsets_.resize (ranges.size());
offsets_.resize (ranges.size(), 0);
for (size_t i = ranges.size(); i-- > 0; ) {
if (mask[i]) {
offsets_[i] = prod;
@ -160,7 +160,7 @@ class CutIndexer
valid_(true)
{
size_t prod = 1;
offsets_.resize (ranges.size());
offsets_.resize (ranges.size(), 0);
for (size_t i = ranges.size(); i-- > 0; ) {
if (i != dim) {
offsets_[i] = prod;
@ -169,6 +169,28 @@ class CutIndexer
}
}
template <typename T>
CutIndexer (
const vector<T>& allArgs,
const Ranges& allRanges,
const vector<T>& wantedArgs,
const Ranges& wantedRanges)
: index_(0), indices_(allArgs.size(), 0), ranges_(allRanges),
valid_(true)
{
size_t prod = 1;
vector<size_t> offsets (wantedRanges.size());
for (size_t i = wantedRanges.size(); i-- > 0; ) {
offsets[i] = prod;
prod *= wantedRanges[i];
}
offsets_.reserve (allArgs.size());
for (size_t i = 0; i < allArgs.size(); i++) {
size_t idx = Util::indexOf (wantedArgs, allArgs[i]);
offsets_.push_back (idx != wantedArgs.size() ? offsets[idx] : 0);
}
}
CutIndexer& operator++ (void)
{
assert (valid_);
@ -188,6 +210,7 @@ class CutIndexer
operator size_t (void) const
{
assert (valid());
return index_;
}