add a new handy constructor to CutIndexer class
This commit is contained in:
		@@ -145,7 +145,7 @@ class CutIndexer
 | 
				
			|||||||
          valid_(true)
 | 
					          valid_(true)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      size_t prod = 1;
 | 
					      size_t prod = 1;
 | 
				
			||||||
      offsets_.resize (ranges.size());
 | 
					      offsets_.resize (ranges.size(), 0);
 | 
				
			||||||
      for (size_t i = ranges.size(); i-- > 0; ) {
 | 
					      for (size_t i = ranges.size(); i-- > 0; ) {
 | 
				
			||||||
        if (mask[i]) {
 | 
					        if (mask[i]) {
 | 
				
			||||||
          offsets_[i] = prod;
 | 
					          offsets_[i] = prod;
 | 
				
			||||||
@@ -160,7 +160,7 @@ class CutIndexer
 | 
				
			|||||||
          valid_(true)
 | 
					          valid_(true)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      size_t prod = 1;
 | 
					      size_t prod = 1;
 | 
				
			||||||
      offsets_.resize (ranges.size());
 | 
					      offsets_.resize (ranges.size(), 0);
 | 
				
			||||||
      for (size_t i = ranges.size(); i-- > 0; ) {
 | 
					      for (size_t i = ranges.size(); i-- > 0; ) {
 | 
				
			||||||
        if (i != dim) {
 | 
					        if (i != dim) {
 | 
				
			||||||
          offsets_[i] = prod;
 | 
					          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)
 | 
					    CutIndexer& operator++ (void)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      assert (valid_);
 | 
					      assert (valid_);
 | 
				
			||||||
@@ -188,6 +210,7 @@ class CutIndexer
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    operator size_t (void) const
 | 
					    operator size_t (void) const
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					      assert (valid());
 | 
				
			||||||
      return index_;
 | 
					      return index_;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user