16 Iterator<T>::Iterator(Image& img, std::vector<int> pos) : img_{ &img }, pos_{ move(pos) }
    18     if (img_->contiguous_)
    19         incrementor = &Iterator::ContiguousIncrementPos;
    21         pos_.resize(img_->dims_.size(), 0);
    25         if (pos_.size() != img_->dims_.size()) {
    26             throw std::runtime_error(
"Iterator starting pos has a wrong size");
    28         if (pos_ == img_->dims_) { 
    29             if (img_->contiguous_) {
    30                 ptr_ = img_->data_ + img_->datasize_;
    37             ptr_ = img_->Ptr(pos_);
    44     if (img_->contiguous_)
    45         incrementor = &ConstIterator::ContiguousIncrementPos;
    47         pos_.resize(img_->dims_.size(), 0);
    51         if (pos_.size() != img_->dims_.size()) {
    52             throw std::runtime_error(
"ConstIterator starting pos has a wrong size");
    54         if (pos_ == img_->dims_) { 
    55             if (img_->contiguous_) {
    56                 ptr_ = img_->data_ + img_->datasize_;
    63             ptr_ = img_->Ptr(pos_);
    70     if (!img_->contiguous_) {
    71         throw std::runtime_error(
"ContiguousIterator used on a non contiguous Image");
    78         if (pos.size() != img_->dims_.size()) {
    79             throw std::runtime_error(
"ContiguousIterator starting pos has a wrong size");
    81         if (pos == img_->dims_) { 
    82             ptr_ = img_->data_ + img_->datasize_;
    85             ptr_ = img_->Ptr(pos);
    92     if (!img_->contiguous_) {
    93         throw std::runtime_error(
"ConstContiguousIterator used on a non contiguous Image");
   100         if (pos.size() != img_->dims_.size()) {
   101             throw std::runtime_error(
"ConstContiguousIterator starting pos has a wrong size");
   103         if (pos == img_->dims_) { 
   104             ptr_ = img_->data_ + img_->datasize_;
   107             ptr_ = img_->Ptr(pos);
   112 template <
typename T>
   113 Iterator<T>& Iterator<T>::IncrementPos()
   115     int spos = 
vsize(pos_);
   117     for (dim = 0; dim < spos; ++dim) {
   119         ptr_ += img_->strides_[dim];
   120         if (pos_[dim] != img_->dims_[dim])
   124         ptr_ -= img_->dims_[dim] * img_->strides_[dim];
   130 template <
typename T>
   131 ConstIterator<T>& ConstIterator<T>::IncrementPos()
   133     int spos = 
vsize(pos_);
   135     for (dim = 0; dim < spos; ++dim) {
   137         ptr_ += img_->strides_[dim];
   138         if (pos_[dim] != img_->dims_[dim])
   142         ptr_ -= img_->dims_[dim] * img_->strides_[dim];
   150 template <
typename T>
   151 Iterator<T>& Iterator<T>::ContiguousIncrementPos()
   153     ptr_ += img_->elemsize_;
   156 template <
typename T>
   157 ConstIterator<T>& ConstIterator<T>::ContiguousIncrementPos()
   159     ptr_ += img_->elemsize_;
   162 template <
typename T>
   163 ContiguousIterator<T>& ContiguousIterator<T>::ContiguousIncrementPos()
   165     ptr_ += img_->elemsize_;
   168 template <
typename T>
   169 ConstContiguousIterator<T>& ConstContiguousIterator<T>::ContiguousIncrementPos()
   171     ptr_ += img_->elemsize_;
 ConstContiguousIterator(const Image &img, std::vector< int > pos={})
 
ContiguousIterator(Image &img, std::vector< int > pos={})
 
int vsize(const std::vector< T > &v)
 
ConstIterator(const Image &img, std::vector< int > pos={})