74 #ifndef SLIP_GENERICMULTICOMPONENT3D_HPP
75 #define SLIP_GENERICMULTICOMPONENT3D_HPP
98 #include <boost/serialization/access.hpp>
99 #include <boost/serialization/split_member.hpp>
100 #include <boost/serialization/version.hpp>
105 template<
class Block>
106 class stride_iterator;
111 template <
class Block>
114 template <
class Block>
117 template <
class Block>
120 template <
typename Block>
123 template <
typename Block>
126 template <
typename Block>
127 std::ostream& operator<<(std::ostream & out, const slip::GenericMultiComponent3d<Block>& a);
129 template<
typename Block>
133 template<
typename Block>
179 template <
typename Block>
229 #ifdef ALL_PLANE_ITERATOR3D
233 typedef std::reverse_iterator<iterator1d> reverse_iterator1d;
234 typedef std::reverse_iterator<const_iterator1d> const_reverse_iterator1d;
235 #endif //ALL_PLANE_ITERATOR3D
312 static const std::size_t
DIM = 3;
358 typename Block::const_pointer val);
384 template<
typename InputIterator>
408 template<
typename InputIterator>
412 std::vector<InputIterator> first_iterators_list,
417 this->
fill(first_iterators_list,last);
445 const Block& val = Block());
1826 #ifdef ALL_PLANE_ITERATOR3D
2328 #endif //ALL_PLANE_ITERATOR3D
4888 friend std::ostream& operator<< <>(std::ostream & out,
const self& a);
4920 self&
operator=(
const typename Block::value_type& val);
4931 std::fill_n(this->
begin(),
size(),value);
4940 void fill(
const typename Block::pointer value)
4964 template<
typename InputIterator>
4979 template<
typename InputIterator>
4980 void fill(std::vector<InputIterator> first_iterators_list,
4983 std::vector<typename slip::kstride_iterator<typename Block::pointer,Block::SIZE> > iterators_list(Block::SIZE);
4985 for(std::size_t component = 0; component < Block::SIZE; ++component)
4991 while(first_iterators_list[0] != last)
4993 for(std::size_t component = 0; component < Block::SIZE; ++component)
4995 *iterators_list[component]++ = *first_iterators_list[component]++;
4998 iterators_list.clear();
5011 template<
typename InputIterator>
5013 InputIterator first,
5268 friend class boost::serialization::access;
5269 template<
class Archive>
5270 void save(Archive & ar,
const unsigned int version)
const
5274 template<
class Archive>
5275 void load(Archive & ar,
const unsigned int version)
5279 BOOST_SERIALIZATION_SPLIT_MEMBER();
5287 template<
typename Block>
5290 matrix_(new slip::
Matrix3d<Block>())
5293 template<
typename Block>
5298 matrix_(new slip::
Matrix3d<Block>(slices,rows,cols))
5301 template<
typename Block>
5306 typename Block::const_pointer val):
5307 matrix_(new slip::
Matrix3d<Block>(slices,rows,cols))
5316 (*it)[component] = *val++;
5321 template<
typename Block>
5327 matrix_(new slip::
Matrix3d<Block>(slices,rows,cols,val))
5330 template<
typename Block>
5336 matrix_(new slip::
Matrix3d<Block>(slices,rows,cols,val))
5339 template<
typename Block>
5342 matrix_(new slip::
Matrix3d<Block>((*rhs.matrix_)))
5345 template<
typename Block>
5352 template<
typename Block>
5358 *matrix_ = *(rhs.matrix_);
5363 template<
typename Block>
5367 std::fill_n(matrix_->begin(),matrix_->size(),val);
5371 template<
typename Block>
5375 std::fill_n(matrix_->begin(),matrix_->size(),val);
5379 template<
typename Block>
5386 matrix_->resize(slices,rows,cols,val);
5401 template<
typename Block>
5406 return matrix_->begin();
5409 template<
typename Block>
5414 return matrix_->end();
5417 template<
typename Block>
5426 template<
typename Block>
5436 template<
typename Block>
5444 template<
typename Block>
5452 template<
typename Block>
5460 template<
typename Block>
5470 template<
typename T>
5476 return matrix_->slice_begin(row,col);
5479 template<
typename T>
5481 typename GenericMultiComponent3d<T>::const_slice_iterator
5483 const GenericMultiComponent3d<T>::size_type col)
const
5485 Matrix3d<T>
const * tp(matrix_);
5486 return tp->slice_begin(row,col);
5489 template<
typename T>
5491 typename GenericMultiComponent3d<T>::slice_iterator
5493 const GenericMultiComponent3d<T>::size_type col)
5495 return matrix_->slice_end(row,col);
5498 template<
typename T>
5500 typename GenericMultiComponent3d<T>::const_slice_iterator
5502 const GenericMultiComponent3d<T>::size_type col)
const
5504 Matrix3d<T>
const * tp(matrix_);
5505 return tp->slice_end(row,col);
5509 template<
typename T>
5511 typename GenericMultiComponent3d<T>::reverse_slice_iterator
5513 const GenericMultiComponent3d<T>::size_type col)
5515 return matrix_->slice_rbegin(row,col);
5518 template<
typename T>
5520 typename GenericMultiComponent3d<T>::const_reverse_slice_iterator
5522 const GenericMultiComponent3d<T>::size_type col)
const
5524 Matrix3d<T>
const * tp(matrix_);
5525 return tp->slice_rbegin(row,col);
5528 template<
typename T>
5530 typename GenericMultiComponent3d<T>::reverse_slice_iterator
5532 const GenericMultiComponent3d<T>::size_type col)
5534 return matrix_->slice_rend(row,col);
5538 template<
typename T>
5540 typename GenericMultiComponent3d<T>::const_reverse_slice_iterator
5542 const GenericMultiComponent3d<T>::size_type col)
const
5544 Matrix3d<T>
const * tp(matrix_);
5545 return tp->slice_rend(row,col);
5551 template<
typename Block>
5553 typename GenericMultiComponent3d<Block>::row_iterator
5555 const typename GenericMultiComponent3d<Block>::size_type row)
5557 return matrix_->row_begin(slice,row);
5560 template<
typename Block>
5562 typename GenericMultiComponent3d<Block>::const_row_iterator
5564 const typename GenericMultiComponent3d<Block>::size_type row)
const
5566 Matrix3d<Block>
const * tp(matrix_);
5567 return tp->row_begin(slice,row);
5570 template<
typename Block>
5572 typename GenericMultiComponent3d<Block>::row_iterator
5574 const typename GenericMultiComponent3d<Block>::size_type row)
5576 return matrix_->row_end(slice,row);
5579 template<
typename Block>
5581 typename GenericMultiComponent3d<Block>::const_row_iterator
5583 const typename GenericMultiComponent3d<Block>::size_type row)
const
5585 Matrix3d<Block>
const * tp(matrix_);
5586 return tp->row_end(slice,row);
5590 template<
typename Block>
5592 typename GenericMultiComponent3d<Block>::reverse_row_iterator
5594 const typename GenericMultiComponent3d<Block>::size_type row)
5596 return matrix_->row_rbegin(slice,row);
5599 template<
typename Block>
5601 typename GenericMultiComponent3d<Block>::const_reverse_row_iterator
5603 const typename GenericMultiComponent3d<Block>::size_type row)
const
5605 Matrix3d<Block>
const * tp(matrix_);
5606 return tp->row_rbegin(slice,row);
5610 template<
typename Block>
5612 typename GenericMultiComponent3d<Block>::reverse_row_iterator
5614 const typename GenericMultiComponent3d<Block>::size_type row)
5616 return matrix_->row_rend(slice,row);
5619 template<
typename Block>
5621 typename GenericMultiComponent3d<Block>::const_reverse_row_iterator
5623 const typename GenericMultiComponent3d<Block>::size_type row)
const
5625 Matrix3d<Block>
const * tp(matrix_);
5626 return tp->row_rend(slice,row);
5631 template<
typename Block>
5633 typename GenericMultiComponent3d<Block>::col_iterator
5635 const typename GenericMultiComponent3d<Block>::size_type col)
5637 return matrix_->col_begin(slice,col);
5640 template<
typename Block>
5642 typename GenericMultiComponent3d<Block>::const_col_iterator
5644 const typename GenericMultiComponent3d<Block>::size_type col)
const
5646 Matrix3d<Block>
const * tp(matrix_);
5647 return tp->col_begin(slice,col);
5651 template<
typename Block>
5653 typename GenericMultiComponent3d<Block>::col_iterator
5655 const typename GenericMultiComponent3d<Block>::size_type col)
5657 return matrix_->col_end(slice,col);
5660 template<
typename Block>
5662 typename GenericMultiComponent3d<Block>::const_col_iterator
5664 const typename GenericMultiComponent3d<Block>::size_type col)
const
5666 Matrix3d<Block>
const * tp(matrix_);
5667 return tp->col_end(slice,col);
5671 template<
typename Block>
5673 typename GenericMultiComponent3d<Block>::reverse_col_iterator
5675 const typename GenericMultiComponent3d<Block>::size_type col)
5677 return matrix_->col_rbegin(slice,col);
5680 template<
typename Block>
5682 typename GenericMultiComponent3d<Block>::const_reverse_col_iterator
5684 const typename GenericMultiComponent3d<Block>::size_type col)
const
5686 Matrix3d<Block>
const * tp(matrix_);
5687 return tp->col_rbegin(slice,col);
5691 template<
typename Block>
5693 typename GenericMultiComponent3d<Block>::reverse_col_iterator
5695 const typename GenericMultiComponent3d<Block>::size_type col)
5697 return matrix_->col_rend(slice,col);
5700 template<
typename Block>
5702 typename GenericMultiComponent3d<Block>::const_reverse_col_iterator
5704 const typename GenericMultiComponent3d<Block>::size_type col)
const
5706 Matrix3d<Block>
const * tp(matrix_);
5707 return tp->col_rend(slice,col);
5712 template<
typename Block>
5714 typename GenericMultiComponent3d<Block>::slice_range_iterator
5716 const typename GenericMultiComponent3d<Block>::size_type col,
5719 return matrix_->slice_begin(row,col,range);
5722 template<
typename Block>
5724 typename GenericMultiComponent3d<Block>::const_slice_range_iterator
5726 const typename GenericMultiComponent3d<Block>::size_type col,
5729 Matrix3d<Block>
const * tp(matrix_);
5730 return tp->slice_begin(row,col,range);
5733 template<
typename Block>
5735 typename GenericMultiComponent3d<Block>::slice_range_iterator
5737 const typename GenericMultiComponent3d<Block>::size_type col,
5740 return matrix_->slice_end(row,col,range);
5743 template<
typename Block>
5745 typename GenericMultiComponent3d<Block>::const_slice_range_iterator
5747 const typename GenericMultiComponent3d<Block>::size_type col,
5750 Matrix3d<Block>
const * tp(matrix_);
5751 return tp->slice_end(row,col,range);
5754 template<
typename Block>
5756 typename GenericMultiComponent3d<Block>::reverse_slice_range_iterator
5758 const typename GenericMultiComponent3d<Block>::size_type col,
5761 return matrix_->slice_rbegin(row,col,range);
5764 template<
typename Block>
5766 typename GenericMultiComponent3d<Block>::const_reverse_slice_range_iterator
5768 const typename GenericMultiComponent3d<Block>::size_type col,
5771 Matrix3d<Block>
const * tp(matrix_);
5772 return tp->slice_rbegin(row,col,range);
5775 template<
typename Block>
5777 typename GenericMultiComponent3d<Block>::reverse_slice_range_iterator
5779 const typename GenericMultiComponent3d<Block>::size_type col,
5782 return matrix_->slice_rend(row,col,range);
5785 template<
typename Block>
5787 typename GenericMultiComponent3d<Block>::const_reverse_slice_range_iterator
5789 const typename GenericMultiComponent3d<Block>::size_type col,
5792 Matrix3d<Block>
const * tp(matrix_);
5793 return tp->slice_rend(row,col,range);
5799 template<
typename Block>
5801 typename GenericMultiComponent3d<Block>::row_range_iterator
5803 const typename GenericMultiComponent3d<Block>::size_type row,
5806 return matrix_->row_begin(slice,row,range);
5809 template<
typename Block>
5811 typename GenericMultiComponent3d<Block>::const_row_range_iterator
5813 const typename GenericMultiComponent3d<Block>::size_type row,
5816 Matrix3d<Block>
const * tp(matrix_);
5817 return tp->row_begin(slice,row,range);
5820 template<
typename Block>
5822 typename GenericMultiComponent3d<Block>::row_range_iterator
5824 const typename GenericMultiComponent3d<Block>::size_type row,
5827 return matrix_->row_end(slice,row,range);
5830 template<
typename Block>
5832 typename GenericMultiComponent3d<Block>::const_row_range_iterator
5834 const typename GenericMultiComponent3d<Block>::size_type row,
5837 Matrix3d<Block>
const * tp(matrix_);
5838 return tp->row_end(slice,row,range);
5841 template<
typename Block>
5843 typename GenericMultiComponent3d<Block>::reverse_row_range_iterator
5845 const typename GenericMultiComponent3d<Block>::size_type row,
5848 return matrix_->row_rbegin(slice,row,range);
5851 template<
typename Block>
5853 typename GenericMultiComponent3d<Block>::const_reverse_row_range_iterator
5855 const typename GenericMultiComponent3d<Block>::size_type row,
5858 Matrix3d<Block>
const * tp(matrix_);
5859 return tp->row_rbegin(slice,row,range);
5862 template<
typename Block>
5864 typename GenericMultiComponent3d<Block>::reverse_row_range_iterator
5866 const typename GenericMultiComponent3d<Block>::size_type row,
5869 return matrix_->row_rend(slice,row,range);
5872 template<
typename Block>
5874 typename GenericMultiComponent3d<Block>::const_reverse_row_range_iterator
5876 const typename GenericMultiComponent3d<Block>::size_type row,
5879 Matrix3d<Block>
const * tp(matrix_);
5880 return tp->row_rend(slice,row,range);
5885 template<
typename Block>
5887 typename GenericMultiComponent3d<Block>::col_range_iterator
5889 const typename GenericMultiComponent3d<Block>::size_type col,
5892 return matrix_->col_begin(slice,col,range);
5895 template<
typename Block>
5897 typename GenericMultiComponent3d<Block>::const_col_range_iterator
5899 const typename GenericMultiComponent3d<Block>::size_type col,
5902 Matrix3d<Block>
const * tp(matrix_);
5903 return tp->col_begin(slice,col,range);
5906 template<
typename Block>
5908 typename GenericMultiComponent3d<Block>::col_range_iterator
5910 const typename GenericMultiComponent3d<Block>::size_type col,
5913 return matrix_->col_end(slice,col,range);
5916 template<
typename Block>
5918 typename GenericMultiComponent3d<Block>::const_col_range_iterator
5920 const typename GenericMultiComponent3d<Block>::size_type col,
5923 Matrix3d<Block>
const * tp(matrix_);
5924 return tp->col_end(slice,col,range);
5927 template<
typename Block>
5929 typename GenericMultiComponent3d<Block>::reverse_col_range_iterator
5931 const typename GenericMultiComponent3d<Block>::size_type col,
5934 return matrix_->col_rbegin(slice,col,range);
5937 template<
typename Block>
5939 typename GenericMultiComponent3d<Block>::const_reverse_col_range_iterator
5941 const typename GenericMultiComponent3d<Block>::size_type col,
5944 Matrix3d<Block>
const * tp(matrix_);
5945 return tp->col_rbegin(slice,col,range);
5948 template<
typename Block>
5950 typename GenericMultiComponent3d<Block>::reverse_col_range_iterator
5952 const typename GenericMultiComponent3d<Block>::size_type col,
5955 return matrix_->col_rend(slice,col,range);
5958 template<
typename Block>
5960 typename GenericMultiComponent3d<Block>::const_reverse_col_range_iterator
5962 const typename GenericMultiComponent3d<Block>::size_type col,
5965 Matrix3d<Block>
const * tp(matrix_);
5966 return tp->col_rend(slice,col,range);
5971 template<
typename Block>
5973 typename GenericMultiComponent3d<Block>::iterator
5976 return matrix_->plane_begin(slice);
5979 template<
typename Block>
5981 typename GenericMultiComponent3d<Block>::const_iterator
5984 Matrix3d<Block>
const * tp(matrix_);
5985 return tp->plane_begin(slice);
5988 template<
typename Block>
5990 typename GenericMultiComponent3d<Block>::iterator
5993 return matrix_->plane_end(slice);
5996 template<
typename Block>
5998 typename GenericMultiComponent3d<Block>::const_iterator
6001 Matrix3d<Block>
const * tp(matrix_);
6002 return tp->plane_end(slice);
6005 template<
typename Block>
6007 typename GenericMultiComponent3d<Block>::reverse_iterator
6010 return matrix_->plane_rbegin(slice);
6013 template<
typename Block>
6015 typename GenericMultiComponent3d<Block>::const_reverse_iterator
6018 Matrix3d<Block>
const * tp(matrix_);
6019 return tp->plane_rbegin(slice);
6022 template<
typename Block>
6024 typename GenericMultiComponent3d<Block>::reverse_iterator
6027 return matrix_->plane_rend(slice);
6030 template<
typename Block>
6032 typename GenericMultiComponent3d<Block>::const_reverse_iterator
6035 Matrix3d<Block>
const * tp(matrix_);
6036 return tp->plane_rend(slice);
6039 #ifdef ALL_PLANE_ITERATOR3D
6044 template<
typename Block>
6046 typename GenericMultiComponent3d<Block>::iterator1d
6047 GenericMultiComponent3d<Block>::plane_row_begin(
PLANE_ORIENTATION P,
const typename GenericMultiComponent3d<Block>::size_type plane_coordinate,
6048 const typename GenericMultiComponent3d<Block>::size_type row)
6050 return matrix_->plane_row_begin(P,plane_coordinate,row);
6053 template<
typename Block>
6055 typename GenericMultiComponent3d<Block>::const_iterator1d
6056 GenericMultiComponent3d<Block>::plane_row_begin(
PLANE_ORIENTATION P,
const typename GenericMultiComponent3d<Block>::size_type plane_coordinate,
6057 const typename GenericMultiComponent3d<Block>::size_type row)
const
6059 Matrix3d<Block>
const * tp(matrix_);
6060 return tp->plane_row_begin(P,plane_coordinate,row);
6063 template<
typename Block>
6065 typename GenericMultiComponent3d<Block>::iterator1d
6066 GenericMultiComponent3d<Block>::plane_row_end(
PLANE_ORIENTATION P,
const typename GenericMultiComponent3d<Block>::size_type plane_coordinate,
6067 const typename GenericMultiComponent3d<Block>::size_type row)
6069 return matrix_->plane_row_end(P,plane_coordinate,row);
6072 template<
typename Block>
6074 typename GenericMultiComponent3d<Block>::const_iterator1d
6075 GenericMultiComponent3d<Block>::plane_row_end(
PLANE_ORIENTATION P,
const typename GenericMultiComponent3d<Block>::size_type plane_coordinate,
6076 const typename GenericMultiComponent3d<Block>::size_type row)
const
6078 Matrix3d<Block>
const * tp(matrix_);
6079 return tp->plane_row_end(P,plane_coordinate,row);
6082 template<
typename Block>
6084 typename GenericMultiComponent3d<Block>::reverse_iterator1d
6085 GenericMultiComponent3d<Block>::plane_row_rbegin(
PLANE_ORIENTATION P,
const typename GenericMultiComponent3d<Block>::size_type plane_coordinate,
6086 const typename GenericMultiComponent3d<Block>::size_type row)
6088 return matrix_->plane_row_rbegin(P,plane_coordinate,row);
6091 template<
typename Block>
6093 typename GenericMultiComponent3d<Block>::const_reverse_iterator1d
6094 GenericMultiComponent3d<Block>::plane_row_rbegin(
PLANE_ORIENTATION P,
const typename GenericMultiComponent3d<Block>::size_type plane_coordinate,
6095 const typename GenericMultiComponent3d<Block>::size_type row)
const
6097 Matrix3d<Block>
const * tp(matrix_);
6098 return tp->plane_row_rbegin(P,plane_coordinate,row);
6101 template<
typename Block>
6103 typename GenericMultiComponent3d<Block>::reverse_iterator1d
6104 GenericMultiComponent3d<Block>::plane_row_rend(
PLANE_ORIENTATION P,
const typename GenericMultiComponent3d<Block>::size_type plane_coordinate,
6105 const typename GenericMultiComponent3d<Block>::size_type row)
6107 return matrix_->plane_row_rend(P,plane_coordinate,row);
6110 template<
typename Block>
6112 typename GenericMultiComponent3d<Block>::const_reverse_iterator1d
6113 GenericMultiComponent3d<Block>::plane_row_rend(
PLANE_ORIENTATION P,
const typename GenericMultiComponent3d<Block>::size_type plane_coordinate,
6114 const typename GenericMultiComponent3d<Block>::size_type row)
const
6116 Matrix3d<Block>
const * tp(matrix_);
6117 return tp->plane_row_rend(P,plane_coordinate,row);
6120 template<
typename Block>
6122 typename GenericMultiComponent3d<Block>::iterator1d
6123 GenericMultiComponent3d<Block>::plane_col_begin(
PLANE_ORIENTATION P,
const typename GenericMultiComponent3d<Block>::size_type plane_coordinate,
6124 const typename GenericMultiComponent3d<Block>::size_type col)
6126 return matrix_->plane_col_begin(P,plane_coordinate,col);
6129 template<
typename Block>
6131 typename GenericMultiComponent3d<Block>::const_iterator1d
6132 GenericMultiComponent3d<Block>::plane_col_begin(
PLANE_ORIENTATION P,
const typename GenericMultiComponent3d<Block>::size_type plane_coordinate,
6133 const typename GenericMultiComponent3d<Block>::size_type col)
const
6135 Matrix3d<Block>
const * tp(matrix_);
6136 return tp->plane_col_begin(P,plane_coordinate,col);
6139 template<
typename Block>
6141 typename GenericMultiComponent3d<Block>::iterator1d
6142 GenericMultiComponent3d<Block>::plane_col_end(
PLANE_ORIENTATION P,
const typename GenericMultiComponent3d<Block>::size_type plane_coordinate,
6143 const typename GenericMultiComponent3d<Block>::size_type col)
6145 return matrix_->plane_col_end(P,plane_coordinate,col);
6148 template<
typename Block>
6150 typename GenericMultiComponent3d<Block>::const_iterator1d
6151 GenericMultiComponent3d<Block>::plane_col_end(
PLANE_ORIENTATION P,
const typename GenericMultiComponent3d<Block>::size_type plane_coordinate,
6152 const typename GenericMultiComponent3d<Block>::size_type col)
const
6154 Matrix3d<Block>
const * tp(matrix_);
6155 return tp->plane_col_end(P,plane_coordinate,col);
6158 template<
typename Block>
6160 typename GenericMultiComponent3d<Block>::reverse_iterator1d
6161 GenericMultiComponent3d<Block>::plane_col_rbegin(
PLANE_ORIENTATION P,
const typename GenericMultiComponent3d<Block>::size_type plane_coordinate,
6162 const typename GenericMultiComponent3d<Block>::size_type col)
6164 return matrix_->plane_col_rbegin(P,plane_coordinate,col);
6167 template<
typename Block>
6169 typename GenericMultiComponent3d<Block>::const_reverse_iterator1d
6170 GenericMultiComponent3d<Block>::plane_col_rbegin(
PLANE_ORIENTATION P,
const typename GenericMultiComponent3d<Block>::size_type plane_coordinate,
6171 const typename GenericMultiComponent3d<Block>::size_type col)
const
6173 Matrix3d<Block>
const * tp(matrix_);
6174 return tp->plane_col_rbegin(P,plane_coordinate,col);
6177 template<
typename Block>
6179 typename GenericMultiComponent3d<Block>::reverse_iterator1d
6180 GenericMultiComponent3d<Block>::plane_col_rend(
PLANE_ORIENTATION P,
const typename GenericMultiComponent3d<Block>::size_type plane_coordinate,
6181 const typename GenericMultiComponent3d<Block>::size_type col)
6183 return matrix_->plane_col_rend(P,plane_coordinate,col);
6186 template<
typename Block>
6188 typename GenericMultiComponent3d<Block>::const_reverse_iterator1d
6189 GenericMultiComponent3d<Block>::plane_col_rend(
PLANE_ORIENTATION P,
const typename GenericMultiComponent3d<Block>::size_type plane_coordinate,
6190 const typename GenericMultiComponent3d<Block>::size_type col)
const
6192 Matrix3d<Block>
const * tp(matrix_);
6193 return tp->plane_col_rend(P,plane_coordinate,col);
6198 template<
typename Block>
6200 typename GenericMultiComponent3d<Block>::const_iterator1d
6201 GenericMultiComponent3d<Block>::plane_row_begin(
PLANE_ORIENTATION P,
const typename GenericMultiComponent3d<Block>::size_type plane_coordinate,
6202 const size_type row,
const Box2d<int> & b)
const
6204 Matrix3d<Block>
const * tp(matrix_);
6205 return tp->plane_row_begin(P,plane_coordinate,row,b);
6208 template<
typename Block>
6210 typename GenericMultiComponent3d<Block>::iterator1d
6211 GenericMultiComponent3d<Block>::plane_row_begin(
PLANE_ORIENTATION P,
const typename GenericMultiComponent3d<Block>::size_type plane_coordinate,
6212 const size_type row,
const Box2d<int> & b)
6214 return matrix_->plane_row_begin(P,plane_coordinate,row,b);
6217 template<
typename Block>
6219 typename GenericMultiComponent3d<Block>::iterator1d
6220 GenericMultiComponent3d<Block>:: plane_row_end(
PLANE_ORIENTATION P,
const typename GenericMultiComponent3d<Block>::size_type plane_coordinate,
6221 const size_type row,
const Box2d<int> & b)
6223 return matrix_->plane_row_end(P,plane_coordinate,row,b);
6226 template<
typename Block>
6228 typename GenericMultiComponent3d<Block>::const_iterator1d
6229 GenericMultiComponent3d<Block>::plane_row_end(
PLANE_ORIENTATION P,
const typename GenericMultiComponent3d<Block>::size_type plane_coordinate,
6230 const size_type row,
const Box2d<int> & b)
const
6232 Matrix3d<Block>
const * tp(matrix_);
6233 return tp->plane_row_end(P,plane_coordinate,row,b);
6236 template<
typename Block>
6238 typename GenericMultiComponent3d<Block>::reverse_iterator1d
6239 GenericMultiComponent3d<Block>::plane_row_rbegin(
PLANE_ORIENTATION P,
const typename GenericMultiComponent3d<Block>::size_type plane_coordinate,
6240 const size_type row,
const Box2d<int> & b)
6242 return matrix_->plane_row_rbegin(P,plane_coordinate,row,b);
6245 template<
typename Block>
6247 typename GenericMultiComponent3d<Block>::const_reverse_iterator1d
6248 GenericMultiComponent3d<Block>::plane_row_rbegin(
PLANE_ORIENTATION P,
const typename GenericMultiComponent3d<Block>::size_type plane_coordinate,
6249 const size_type row,
const Box2d<int> & b)
const
6251 Matrix3d<Block>
const * tp(matrix_);
6252 return tp->plane_row_rbegin(P,plane_coordinate,row,b);
6255 template<
typename Block>
6257 typename GenericMultiComponent3d<Block>::reverse_iterator1d
6258 GenericMultiComponent3d<Block>::plane_row_rend(
PLANE_ORIENTATION P,
const typename GenericMultiComponent3d<Block>::size_type plane_coordinate,
6259 const size_type row,
const Box2d<int> & b)
6261 return matrix_->plane_row_rend(P,plane_coordinate,row,b);
6264 template<
typename Block>
6266 typename GenericMultiComponent3d<Block>::const_reverse_iterator1d
6267 GenericMultiComponent3d<Block>::plane_row_rend(
PLANE_ORIENTATION P,
const typename GenericMultiComponent3d<Block>::size_type plane_coordinate,
6268 const size_type row,
const Box2d<int> & b)
const
6270 Matrix3d<Block>
const * tp(matrix_);
6271 return tp->plane_row_rend(P,plane_coordinate,row,b);
6274 template<
typename Block>
6276 typename GenericMultiComponent3d<Block>::iterator1d
6277 GenericMultiComponent3d<Block>::plane_col_begin(
PLANE_ORIENTATION P,
const typename GenericMultiComponent3d<Block>::size_type plane_coordinate,
6278 const size_type col,
const Box2d<int> & b)
6280 return matrix_->plane_col_begin(P,plane_coordinate,col,b);
6283 template<
typename Block>
6285 typename GenericMultiComponent3d<Block>::const_iterator1d
6286 GenericMultiComponent3d<Block>::plane_col_begin(
PLANE_ORIENTATION P,
const typename GenericMultiComponent3d<Block>::size_type plane_coordinate,
6287 const size_type col,
const Box2d<int> & b)
const
6289 Matrix3d<Block>
const * tp(matrix_);
6290 return tp->plane_col_begin(P,plane_coordinate,col,b);
6293 template<
typename Block>
6295 typename GenericMultiComponent3d<Block>::iterator1d
6296 GenericMultiComponent3d<Block>::plane_col_end(
PLANE_ORIENTATION P,
const typename GenericMultiComponent3d<Block>::size_type plane_coordinate,
6297 const size_type col,
const Box2d<int> & b)
6299 return matrix_->plane_col_end(P,plane_coordinate,col,b);
6302 template<
typename Block>
6304 typename GenericMultiComponent3d<Block>::const_iterator1d
6305 GenericMultiComponent3d<Block>::plane_col_end(
PLANE_ORIENTATION P,
const typename GenericMultiComponent3d<Block>::size_type plane_coordinate,
6306 const size_type col,
const Box2d<int> & b)
const
6308 Matrix3d<Block>
const * tp(matrix_);
6309 return tp->plane_col_end(P,plane_coordinate,col,b);
6312 template<
typename Block>
6314 typename GenericMultiComponent3d<Block>::reverse_iterator1d
6315 GenericMultiComponent3d<Block>::plane_col_rbegin(
PLANE_ORIENTATION P,
const typename GenericMultiComponent3d<Block>::size_type plane_coordinate,
6316 const size_type col,
const Box2d<int> & b)
6318 return matrix_->plane_col_rbegin(P,plane_coordinate,col,b);
6321 template<
typename Block>
6323 typename GenericMultiComponent3d<Block>::const_reverse_iterator1d
6324 GenericMultiComponent3d<Block>::plane_col_rbegin(
PLANE_ORIENTATION P,
const typename GenericMultiComponent3d<Block>::size_type plane_coordinate,
6325 const size_type col,
const Box2d<int> & b)
const
6327 Matrix3d<Block>
const * tp(matrix_);
6328 return tp->plane_col_rbegin(P,plane_coordinate,col,b);
6331 template<
typename Block>
6333 typename GenericMultiComponent3d<Block>::reverse_iterator1d
6334 GenericMultiComponent3d<Block>::plane_col_rend(
PLANE_ORIENTATION P,
const typename GenericMultiComponent3d<Block>::size_type plane_coordinate,
6335 const size_type col,
const Box2d<int> & b)
6337 return matrix_->plane_col_rend(P,plane_coordinate,col,b);
6340 template<
typename Block>
6342 typename GenericMultiComponent3d<Block>::const_reverse_iterator1d
6343 GenericMultiComponent3d<Block>::plane_col_rend(
PLANE_ORIENTATION P,
const typename GenericMultiComponent3d<Block>::size_type plane_coordinate,
6344 const size_type col,
const Box2d<int> & b)
const
6346 Matrix3d<Block>
const * tp(matrix_);
6347 return tp->plane_col_rend(P,plane_coordinate,col,b);
6350 #endif //ALL_PLANE_ITERATOR3D
6358 template<
typename Block>
6360 typename GenericMultiComponent3d<Block>::iterator2d
6363 return matrix_->plane_upper_left(P,plane_coordinate);
6366 template<
typename Block>
6368 typename GenericMultiComponent3d<Block>::iterator2d
6371 return matrix_->plane_bottom_right(P,plane_coordinate);
6374 template<
typename Block>
6376 typename GenericMultiComponent3d<Block>::const_iterator2d
6379 Matrix3d<Block>
const * tp(matrix_);
6380 return tp->plane_upper_left(P,plane_coordinate);
6383 template<
typename Block>
6385 typename GenericMultiComponent3d<Block>::const_iterator2d
6388 Matrix3d<Block>
const * tp(matrix_);
6389 return tp->plane_bottom_right(P,plane_coordinate);
6392 template<
typename Block>
6394 typename GenericMultiComponent3d<Block>::reverse_iterator2d
6397 return matrix_->plane_rupper_left(P,plane_coordinate);
6400 template<
typename Block>
6402 typename GenericMultiComponent3d<Block>::reverse_iterator2d
6405 return matrix_->plane_rbottom_right(P,plane_coordinate);
6408 template<
typename Block>
6410 typename GenericMultiComponent3d<Block>::const_reverse_iterator2d
6413 Matrix3d<Block>
const * tp(matrix_);
6414 return tp->plane_rupper_left(P,plane_coordinate);
6417 template<
typename Block>
6419 typename GenericMultiComponent3d<Block>::const_reverse_iterator2d
6422 Matrix3d<Block>
const * tp(matrix_);
6423 return tp->plane_rbottom_right(P,plane_coordinate);
6428 template<
typename Block>
6430 typename GenericMultiComponent3d<Block>::iterator2d
6433 return matrix_->plane_upper_left(P,plane_coordinate,b);
6436 template<
typename Block>
6438 typename GenericMultiComponent3d<Block>::iterator2d
6441 return matrix_->plane_bottom_right(P,plane_coordinate,b);
6444 template<
typename Block>
6446 typename GenericMultiComponent3d<Block>::const_iterator2d
6449 Matrix3d<Block>
const * tp(matrix_);
6450 return tp->plane_upper_left(P,plane_coordinate,b);
6453 template<
typename Block>
6455 typename GenericMultiComponent3d<Block>::const_iterator2d
6458 Matrix3d<Block>
const * tp(matrix_);
6459 return tp->plane_bottom_right(P,plane_coordinate,b);
6462 template<
typename Block>
6464 typename GenericMultiComponent3d<Block>::reverse_iterator2d
6467 return matrix_->plane_rupper_left(P,plane_coordinate,b);
6470 template<
typename Block>
6472 typename GenericMultiComponent3d<Block>::reverse_iterator2d
6475 return matrix_->plane_rbottom_right(P,plane_coordinate,b);
6478 template<
typename Block>
6480 typename GenericMultiComponent3d<Block>::const_reverse_iterator2d
6483 Matrix3d<Block>
const * tp(matrix_);
6484 return tp->plane_rupper_left(P,plane_coordinate,b);
6487 template<
typename Block>
6489 typename GenericMultiComponent3d<Block>::const_reverse_iterator2d
6491 const Box2d<int>& b)
const
6493 Matrix3d<Block>
const * tp(matrix_);
6494 return tp->plane_rbottom_right(P,plane_coordinate,b);
6503 template<
typename Block>
6507 return matrix_->front_upper_left();
6510 template<
typename Block>
6518 template<
typename Block>
6522 return matrix_->back_bottom_right();
6525 template<
typename Block>
6533 template<
typename Block>
6538 return matrix_->rback_bottom_right();
6541 template<
typename Block>
6550 template<
typename Block>
6555 return matrix_->rfront_upper_left();
6558 template<
typename Block>
6569 template<
typename Block>
6573 return matrix_->front_upper_left(box);
6576 template<
typename Block>
6585 template<
typename Block>
6590 return matrix_->back_bottom_right(box);
6593 template<
typename Block>
6602 template<
typename Block>
6607 return matrix_->rback_bottom_right(box);
6610 template<
typename Block>
6619 template<
typename Block>
6624 return matrix_->rfront_upper_left(box);
6627 template<
typename Block>
6638 template<
typename Block>
6645 return matrix_->front_upper_left(slice_range,row_range,col_range);
6648 template<
typename Block>
6655 return matrix_->back_bottom_right(slice_range,row_range,col_range);
6659 template<
typename Block>
6671 template<
typename Block>
6682 template<
typename Block>
6689 return matrix_->rfront_upper_left(slice_range,row_range,col_range);
6692 template<
typename Block>
6703 template<
typename Block>
6710 return matrix_->rback_bottom_right(slice_range,row_range,col_range);
6713 template<
typename Block>
6731 template<
typename Block>
6739 template<
typename Block>
6747 template<
typename Block>
6755 template<
typename Block>
6764 template<
typename Block>
6772 template<
typename Block>
6780 template<
typename Block>
6788 template<
typename Block>
6800 template<
typename Block>
6808 template<
typename Block>
6810 typename GenericMultiComponent3d<Block>::const_component_slice_iterator
6816 template<
typename Block>
6818 typename GenericMultiComponent3d<Block>::component_slice_iterator
6824 template<
typename Block>
6826 typename GenericMultiComponent3d<Block>::const_component_slice_iterator
6827 GenericMultiComponent3d<Block>::slice_end(
const std::size_t component,
const typename GenericMultiComponent3d<Block>::size_type row,
const typename GenericMultiComponent3d<Block>::size_type col)
const
6832 template<
typename Block>
6834 typename GenericMultiComponent3d<Block>::reverse_component_slice_iterator
6840 template<
typename Block>
6842 typename GenericMultiComponent3d<Block>::const_reverse_component_slice_iterator
6848 template<
typename Block>
6850 typename GenericMultiComponent3d<Block>::reverse_component_slice_iterator
6856 template<
typename Block>
6858 typename GenericMultiComponent3d<Block>::const_reverse_component_slice_iterator
6867 template<
typename Block>
6869 typename GenericMultiComponent3d<Block>::component_row_iterator
6871 const typename GenericMultiComponent3d<Block>::size_type row)
6876 template<
typename Block>
6878 typename GenericMultiComponent3d<Block>::const_component_row_iterator
6880 const typename GenericMultiComponent3d<Block>::size_type row)
const
6885 template<
typename Block>
6887 typename GenericMultiComponent3d<Block>::component_row_iterator
6889 const typename GenericMultiComponent3d<Block>::size_type row)
6894 template<
typename Block>
6896 typename GenericMultiComponent3d<Block>::const_component_row_iterator
6898 const typename GenericMultiComponent3d<Block>::size_type row)
const
6903 template<
typename Block>
6905 typename GenericMultiComponent3d<Block>::reverse_component_row_iterator
6907 const typename GenericMultiComponent3d<Block>::size_type row)
6912 template<
typename Block>
6914 typename GenericMultiComponent3d<Block>::const_reverse_component_row_iterator
6916 const typename GenericMultiComponent3d<Block>::size_type row)
const
6921 template<
typename Block>
6923 typename GenericMultiComponent3d<Block>::reverse_component_row_iterator
6925 const typename GenericMultiComponent3d<Block>::size_type row)
6930 template<
typename Block>
6932 typename GenericMultiComponent3d<Block>::const_reverse_component_row_iterator
6934 const typename GenericMultiComponent3d<Block>::size_type row)
const
6942 template<
typename Block>
6944 typename GenericMultiComponent3d<Block>::component_col_iterator
6946 const typename GenericMultiComponent3d<Block>::size_type col)
6951 template<
typename Block>
6953 typename GenericMultiComponent3d<Block>::const_component_col_iterator
6955 const typename GenericMultiComponent3d<Block>::size_type col)
const
6960 template<
typename Block>
6962 typename GenericMultiComponent3d<Block>::component_col_iterator
6964 const typename GenericMultiComponent3d<Block>::size_type col)
6969 template<
typename Block>
6971 typename GenericMultiComponent3d<Block>::const_component_col_iterator
6973 const typename GenericMultiComponent3d<Block>::size_type col)
const
6978 template<
typename Block>
6980 typename GenericMultiComponent3d<Block>::reverse_component_col_iterator
6982 const typename GenericMultiComponent3d<Block>::size_type col)
6987 template<
typename Block>
6989 typename GenericMultiComponent3d<Block>::const_reverse_component_col_iterator
6991 const typename GenericMultiComponent3d<Block>::size_type col)
const
6996 template<
typename Block>
6998 typename GenericMultiComponent3d<Block>::reverse_component_col_iterator
7000 const typename GenericMultiComponent3d<Block>::size_type col)
7005 template<
typename Block>
7007 typename GenericMultiComponent3d<Block>::const_reverse_component_col_iterator
7009 const typename GenericMultiComponent3d<Block>::size_type col)
const
7016 template<
typename Block>
7018 typename GenericMultiComponent3d<Block>::component_slice_range_iterator
7025 template<
typename Block>
7027 typename GenericMultiComponent3d<Block>::component_slice_range_iterator
7034 template<
typename Block>
7036 typename GenericMultiComponent3d<Block>::const_component_slice_range_iterator
7043 template<
typename Block>
7045 typename GenericMultiComponent3d<Block>::const_component_slice_range_iterator
7052 template<
typename Block>
7054 typename GenericMultiComponent3d<Block>::reverse_component_slice_range_iterator
7061 template<
typename Block>
7063 typename GenericMultiComponent3d<Block>::reverse_component_slice_range_iterator
7070 template<
typename Block>
7072 typename GenericMultiComponent3d<Block>::const_reverse_component_slice_range_iterator
7079 template<
typename Block>
7081 typename GenericMultiComponent3d<Block>::const_reverse_component_slice_range_iterator
7090 template<
typename Block>
7092 typename GenericMultiComponent3d<Block>::component_row_range_iterator
7099 template<
typename Block>
7101 typename GenericMultiComponent3d<Block>::component_row_range_iterator
7102 GenericMultiComponent3d<Block>::row_end(
const std::size_t component,
const typename GenericMultiComponent3d<Block>::size_type slice,
const typename GenericMultiComponent3d<Block>::size_type row,
7108 template<
typename Block>
7110 typename GenericMultiComponent3d<Block>::const_component_row_range_iterator
7117 template<
typename Block>
7119 typename GenericMultiComponent3d<Block>::const_component_row_range_iterator
7120 GenericMultiComponent3d<Block>::row_end(
const std::size_t component,
const typename GenericMultiComponent3d<Block>::size_type slice,
const typename GenericMultiComponent3d<Block>::size_type row,
7126 template<
typename Block>
7128 typename GenericMultiComponent3d<Block>::reverse_component_row_range_iterator
7135 template<
typename Block>
7137 typename GenericMultiComponent3d<Block>::reverse_component_row_range_iterator
7144 template<
typename Block>
7146 typename GenericMultiComponent3d<Block>::const_reverse_component_row_range_iterator
7153 template<
typename Block>
7155 typename GenericMultiComponent3d<Block>::const_reverse_component_row_range_iterator
7164 template<
typename Block>
7166 typename GenericMultiComponent3d<Block>::component_col_range_iterator
7173 template<
typename Block>
7175 typename GenericMultiComponent3d<Block>::component_col_range_iterator
7176 GenericMultiComponent3d<Block>::col_end(
const std::size_t component,
const typename GenericMultiComponent3d<Block>::size_type slice,
const typename GenericMultiComponent3d<Block>::size_type col,
7182 template<
typename Block>
7184 typename GenericMultiComponent3d<Block>::const_component_col_range_iterator
7191 template<
typename Block>
7193 typename GenericMultiComponent3d<Block>::const_component_col_range_iterator
7194 GenericMultiComponent3d<Block>::col_end(
const std::size_t component,
const typename GenericMultiComponent3d<Block>::size_type slice,
const typename GenericMultiComponent3d<Block>::size_type col,
7200 template<
typename Block>
7202 typename GenericMultiComponent3d<Block>::reverse_component_col_range_iterator
7209 template<
typename Block>
7211 typename GenericMultiComponent3d<Block>::reverse_component_col_range_iterator
7218 template<
typename Block>
7220 typename GenericMultiComponent3d<Block>::const_reverse_component_col_range_iterator
7227 template<
typename Block>
7229 typename GenericMultiComponent3d<Block>::const_reverse_component_col_range_iterator
7238 template<
typename Block>
7240 typename GenericMultiComponent3d<Block>::component_iterator
7246 template<
typename Block>
7248 typename GenericMultiComponent3d<Block>::const_component_iterator
7254 template<
typename Block>
7256 typename GenericMultiComponent3d<Block>::component_iterator
7262 template<
typename Block>
7264 typename GenericMultiComponent3d<Block>::const_component_iterator
7270 template<
typename Block>
7272 typename GenericMultiComponent3d<Block>::reverse_component_iterator
7278 template<
typename Block>
7280 typename GenericMultiComponent3d<Block>::reverse_component_iterator
7286 template<
typename Block>
7288 typename GenericMultiComponent3d<Block>::const_reverse_component_iterator
7294 template<
typename Block>
7296 typename GenericMultiComponent3d<Block>::const_reverse_component_iterator
7308 template<
typename Block>
7310 typename GenericMultiComponent3d<Block>::component_iterator3d
7313 (
this,component,
Box3d<int>(0,0,0,this->dim1()-1,this->dim2()-1,this->dim3()-1));
7317 template<
typename Block>
7323 (*this).front_upper_left(component) + dp;
7327 template<
typename Block>
7332 (
this,component,
Box3d<int>(0,0,0,this->dim1()-1,this->dim2()-1,this->dim3()-1));
7336 template<
typename Block>
7342 (*this).front_upper_left(component) + dp;
7347 template<
typename Block>
7353 (this->back_bottom_right(component) - dp);
7357 template<
typename Block>
7362 (this->front_upper_left(component));
7365 template<
typename Block>
7371 (this->back_bottom_right(component) - dp);
7374 template<
typename Block>
7379 (this->front_upper_left(component));
7384 template<
typename Block>
7392 template<
typename Block>
7399 ((*this).front_upper_left(component,box) + dp));
7402 template<
typename Block>
7410 template<
typename Block>
7417 ((*this).front_upper_left(component,box) + dp));
7420 template<
typename Block>
7427 (this->front_upper_left(component,box));
7430 template<
typename Block>
7438 (this->back_bottom_right(component,box) - dp);
7441 template<
typename Block>
7448 (this->front_upper_left(component,box));
7451 template<
typename Block>
7459 (this->back_bottom_right(component,box) - dp);
7464 template<
typename Block>
7471 (
this,component,slice_range,row_range,col_range);
7474 template<
typename Block>
7482 ((*this).front_upper_left(component,slice_range,row_range,col_range) + dp);
7485 template<
typename Block>
7492 (
this,component,slice_range,row_range,col_range);
7495 template<
typename Block>
7503 ((*this).front_upper_left(component,slice_range,row_range,col_range) + dp);
7506 template<
typename Block>
7514 (this->back_bottom_right(component,slice_range,row_range,col_range) - dp);
7517 template<
typename Block>
7524 (this->front_upper_left(component,slice_range,row_range,col_range));
7527 template<
typename Block>
7535 (this->back_bottom_right(component,slice_range,row_range,col_range) - dp);
7538 template<
typename Block>
7545 (this->front_upper_left(component,slice_range,row_range,col_range));
7550 template <
typename Block>
7555 out << *(a.matrix_) << std::endl;
7559 template<
typename Block>
7563 return (*matrix_)[k];
7566 template<
typename Block>
7570 Matrix3d<Block>
const *tp(matrix_);
7574 template<
typename Block>
7577 const typename GenericMultiComponent3d<Block>::size_type i,
7578 const typename GenericMultiComponent3d<Block>::size_type j)
7580 return (*matrix_)[k][i][j];
7583 template<
typename Block>
7586 const typename GenericMultiComponent3d<Block>::size_type i,
7587 const typename GenericMultiComponent3d<Block>::size_type j)
const
7589 return (*matrix_)[k][i][j];
7593 template<
typename Block>
7597 template<
typename Block>
7601 template<
typename Block>
7605 template<
typename Block>
7609 template<
typename Block>
7613 template<
typename Block>
7617 template<
typename Block>
7621 template<
typename Block>
7625 template<
typename Block>
7629 template<
typename Block>
7633 template<
typename Block>
7637 template<
typename Block>
7641 matrix_->swap(*(M.matrix_));
7644 template<
typename Block>
7651 typename Block::value_type
min = *std::min_element(this->begin(component),this->end(component));
7652 tmp[component] =
min;
7657 template<
typename Block>
7664 typename Block::value_type
max = *std::max_element(this->begin(component),this->end(component));
7665 tmp[component] =
max;
7670 template<
typename Block>
7674 matrix_->apply(fun);
7678 template<
typename Block>
7682 matrix_->apply(fun);
7686 template<
typename Block>
7695 template<
typename Block>
7738 template <
typename Block>
7741 typename Block::value_type
7746 typename Block::value_type dist = slip::L22_distance<Block>(__x.
begin(),__x.
end(),__y.
begin());
7752 #endif //SLIP_GENERICMULTICOMPONENT3D_HPP
size_type max_size() const
Returns the maximal size (number of elements) in the GenericMultiComponent3d.
std::reverse_iterator< component_row_range_iterator > reverse_component_row_range_iterator
bool operator!=(const Array< T > &x, const Array< T > &y)
std::size_t iterations() const
Rerturns the number of iterations of the range.
const GenericMultiComponent3d< Block > const_self
const_pointer const_row_iterator
std::reverse_iterator< const_slice_iterator > const_reverse_slice_iterator
std::reverse_iterator< const_col_iterator > const_reverse_col_iterator
This is some iterator to iterate a 3d container into a plane area defined by the subscripts of the 3d...
std::reverse_iterator< col_range_iterator > reverse_col_range_iterator
slip::stride_iterator< const_block_pointer > const_component_slice_iterator
slip::stride_iterator< pointer > slice_iterator
std::reverse_iterator< iterator > reverse_iterator
CoordType width() const
compute the width of the Box3d.
void fill(const typename Block::pointer value)
Fills the container range [begin(),begin()+size()) with a copy of the value array.
std::reverse_iterator< const_component_iterator > const_reverse_component_iterator
Difference of Point3D class, specialization of DPoint<CoordType,DIM> with DIM = 3.
std::reverse_iterator< component_slice_iterator > reverse_component_slice_iterator
slip::const_component_iterator3d_box< const_self, Block::SIZE > const_component_iterator3d
std::reverse_iterator< const_component_col_iterator > const_reverse_component_col_iterator
slip::stride_iterator< const_col_iterator > const_col_range_iterator
iterator2d plane_upper_left(PLANE_ORIENTATION P, const size_type plane_coordinate)
Returns a read/write iterator that points to the first element of the plane in the GenericMultiCompon...
slip::Array3d< Block >::const_iterator3d_range const_iterator3d_range
std::reverse_iterator< const_slice_range_iterator > const_reverse_slice_range_iterator
const block_value_type const_block_reference
std::reverse_iterator< iterator2d > reverse_iterator2d
std::reverse_iterator< const_component_iterator3d > const_reverse_component_iterator3d
slip::component_iterator3d_box< self, Block::SIZE > component_iterator3d
size_type columns() const
Returns the number of columns (third dimension size) in the GenericMultiComponent3d.
virtual ~GenericMultiComponent3d()
Destructor of the GenericMultiComponent3d.
This is some iterator to iterate a 3d container into two Range defined by the indices and strides of ...
static const std::size_t DIM
size_type dim3() const
Returns the number of columns (third dimension size) in the GenericMultiComponent3d.
size_type rows() const
Returns the number of rows (first dimension size) in the GenericMultiComponent3d. ...
This is a Vector3d struct. It is a specialization of kvector. It implements some specific 3d operatio...
slip::stride_iterator< block_pointer > component_slice_range_iterator
T & min(const GrayscaleImage< T > &M1)
Returns the min element of a GrayscaleImage.
iterator begin()
Returns a read/write iterator that points to the first element in the GenericMultiComponent3d. Iteration is done in ordinary element order.
slip::stride_iterator< pointer > col_iterator
slip::stride_iterator< const_pointer > const_col_iterator
iterator3d back_bottom_right()
Returns a read/write iterator3d that points to the past the end element of the GenericMultiComponent3...
size_type size() const
Returns the number of elements in the GenericMultiComponent3d.
row_iterator row_begin(const size_type slice, const size_type row)
Returns a read/write iterator that points to the first element of the row row of the slice slice in t...
pointer * operator[](const size_type k)
Subscript access to the slice datas contained in the GenericMultiComponent3d.
reverse_row_iterator row_rend(const size_type slice, const size_type row)
Returns a read/write reverse iterator that points to the first element of the row row of the slice sl...
std::reverse_iterator< slice_iterator > reverse_slice_iterator
Provides a class to manipulate iterator2d within a slip::Box2d. It is used to iterate throw 2d contai...
slip::stride_iterator< block_pointer > component_col_iterator
reverse_iterator rbegin()
Returns a read/write reverse iterator that points to the last element in the GenericMultiComponent3d...
const_component_iterator const_component_row_iterator
size_type dim2() const
Returns the number of rows (second dimension size) in the GenericMultiComponent3d.
reverse_iterator plane_rbegin(const size_type slice)
Returns a read/write reverse iterator that points to the last element in the slice plane of the Gener...
void swap(self &M)
Swaps data with another GenericMultiComponent3d.
block_value_type & block_reference
std::reverse_iterator< const_component_iterator3d_range > const_reverse_component_iterator3d_range
std::reverse_iterator< row_range_iterator > reverse_row_range_iterator
slip::stride_iterator< const_slice_iterator > const_slice_range_iterator
GenericMultiComponent3d< Block > & apply(Block(*fun)(Block))
Returns the sums of the elements of the GenericMultiComponent3d.
std::reverse_iterator< component_slice_range_iterator > reverse_component_slice_range_iterator
std::reverse_iterator< iterator3d_range > reverse_iterator3d_range
const_iterator begin() const
Returns a read-only (constant) iterator that points to the first element in the Matrix3d. Iteration is done in ordinary element order.
size_type slices() const
Returns the number of slices (first dimension size) in the GenericMultiComponent3d.
value_type const * const_pointer
const_iterator3d const_default_iterator
Provides a class to iterate a 1d range according to a constant step.
value_type const & const_reference
slip::stride_iterator< const_block_pointer > const_component_row_range_iterator
slip::kstride_iterator< typename Block::pointer, Block::SIZE > component_iterator
PLANE_ORIENTATION
Choose between different plane orientations.
std::reverse_iterator< component_col_range_iterator > reverse_component_col_range_iterator
Provides a class to manipulate iterator3d within a slip::Range. It is used to iterate throw 3d contai...
std::reverse_iterator< slice_range_iterator > reverse_slice_range_iterator
iterator3d front_upper_left()
Returns a read/write iterator3d that points to the first element of the GenericMultiComponent3d. It points to the front upper left element of the GenericMultiComponent3d.
slip::stride_iterator< block_pointer > component_slice_iterator
This is some iterator to iterate a 3d container into two Range defined by the indices and strides of ...
Block::value_type block_value_type
std::reverse_iterator< const_iterator3d_range > const_reverse_iterator3d_range
col_iterator col_end(const size_type slice, const size_type col)
Returns a read/write iterator that points to the past-the-end element of the column column of the sli...
std::reverse_iterator< const_component_slice_iterator > const_reverse_component_slice_iterator
slip::stride_iterator< const_block_pointer > const_component_col_range_iterator
slip::stride_iterator< const_pointer > const_slice_iterator
reverse_col_iterator col_rbegin(const size_type slice, const size_type col)
Returns a read/write reverse iterator that points to the last element of the column column of the sli...
slice_iterator slice_begin(const size_type row, const size_type col)
Returns a read/write iterator that points to the first element of the line (row,col) threw the slices...
std::reverse_iterator< const_iterator > const_reverse_iterator
std::reverse_iterator< const_col_range_iterator > const_reverse_col_range_iterator
void fill(InputIterator first, InputIterator last)
Fills the container range [begin(),begin()+size()) with a copy of the range [first,last)
col_iterator col_begin(const size_type slice, const size_type col)
Returns a read/write iterator that points to the first element of the column column of the slice slic...
size_type slice_size() const
Returns the number of elements in a slice of the GenericMultiComponent3d.
slip::stride_iterator< slice_iterator > slice_range_iterator
slice_iterator slice_end(const size_type row, const size_type col)
Returns a read/write iterator that points to the one past the end element of the line (row...
This is some iterator to iterate a 3d MultiComponentContainer into a Box area defined by the indices ...
Block::value_type operator()(const slip::GenericMultiComponent3d< Block > &__x, const slip::GenericMultiComponent3d< Block > &__y) const
reference operator()(const size_type k, const size_type i, const size_type j)
Subscript access to the data contained in the GenericMultiComponent3d.
row_iterator row_end(const size_type slice, const size_type row)
Returns a read/write iterator that points to the past-the-end element of the row row of the slice sli...
reverse_iterator rend()
Returns a read/write reverse iterator that points to one before the first element in the GenericMulti...
component_iterator component_row_iterator
std::reverse_iterator< const_iterator3d > const_reverse_iterator3d
slip::Array3d< Block >::iterator3d_range iterator3d_range
iterator plane_end(const size_type slice)
Returns a read/write iterator that points one past the last element in the slice plane of the Generic...
slip::stride_iterator< col_iterator > col_range_iterator
This is a GenericMultiComponent3d class. This container statisfies the BidirectionnalContainer concep...
Numerical matrix3d class. This container statisfies the RandomAccessContainer concepts of the STL exc...
slip::stride_iterator< block_pointer > component_row_range_iterator
reverse_iterator3d rfront_upper_left()
Returns a read/write reverse iterator3d. It points to the back bottom right element of the Matrix3d...
std::reverse_iterator< iterator > reverse_row_iterator
void copy(_II first, _II last, _OI output_first)
Copy algorithm optimized for slip iterators.
SubType start() const
Accessor of the start subscript of the Range.
reverse_col_iterator col_rend(const size_type slice, const size_type col)
Returns a read/write reverse iterator that points to the first element of the column column of the sl...
Provides a class to manipulate iterator2d within a slip::Box3d. It is used to iterate throw 3d contai...
slip::Array3d< Block >::const_iterator2d const_iterator2d
reverse_iterator2d plane_rbottom_right(PLANE_ORIENTATION P, const size_type plane_coordinate)
Returns a read/write reverse_iterator that points to the upper left element of the plane in the Gener...
void fill(std::vector< InputIterator > first_iterators_list, InputIterator last)
Fills the container range [begin(),begin()+size()) with a copy of the range [first,last)
block_value_type * block_pointer
slip::kstride_iterator< typename Block::const_pointer, Block::SIZE > const_component_iterator
self & operator=(const self &rhs)
Assign a GenericMultiComponent3d.
HyperVolume< T > sqrt(const HyperVolume< T > &M)
slip::stride_iterator< const_block_pointer > const_component_slice_range_iterator
std::reverse_iterator< component_row_iterator > reverse_component_row_iterator
Provides a class to iterate a 3d MultiComponentContainer into a slip::Box3d.
reverse_iterator3d rback_bottom_right()
Returns a read/write reverse iterator3d. It points to past the front upper left element of the Matrix...
std::reverse_iterator< const_iterator2d > const_reverse_iterator2d
This is some iterator to iterate a 3d MultiComponentContainer into a Box area defined by the indices ...
slip::component_iterator3d_range< self, Block::SIZE > component_iterator3d_range
slip::Array3d< Block >::iterator3d iterator3d
slip::const_component_iterator3d_range< const_self, Block::SIZE > const_component_iterator3d_range
CoordType depth() const
compute the depth of the Box3d.
void resize(const size_type slices, const size_type rows, const size_type cols, const Block &val=Block())
Resizes a GenericMultiComponent3d.
slip::stride_iterator< pointer > row_range_iterator
reverse_iterator2d plane_rupper_left(PLANE_ORIENTATION P, const size_type plane_coordinate)
Returns a read/write reverse_iterator that points to the bottom right element of the plane in the Gen...
reverse_iterator3d rback_bottom_right()
Returns a read/write reverse iterator3d. It points to past the front upper left element of the Generi...
std::reverse_iterator< const_component_row_range_iterator > const_reverse_component_row_range_iterator
Provides a class to iterate 3d containers throw a planes.
This is some iterator to iterate a 3d container into a Box area defined by the subscripts of the 3d c...
Provides a class to iterate a 3d multicomponent container into three Ranges.
GenericMultiComponent3d()
Constructs a GenericMultiComponent3d.
slip::Array3d< Block >::iterator2d iterator2d
std::reverse_iterator< const_component_slice_range_iterator > const_reverse_component_slice_range_iterator
const block_value_type * const_block_pointer
Provides a class to manipulate Matrix3d.
std::ostream & operator<<(std::ostream &out, const Array< T > &a)
This is some iterator to iterate a 3d container into two Range defined by the indices and strides of ...
void fill(const Block &value)
Fills the container range [begin(),begin()+size()) with copies of value.
iterator2d plane_bottom_right(PLANE_ORIENTATION P, const size_type plane_coordinate)
Returns a read/write iterator that points to the last element of the plane in the GenericMultiCompone...
std::reverse_iterator< col_iterator > reverse_col_iterator
iterator plane_begin(const size_type slice)
Returns a read/write iterator that points to the first element in the in the slice plane of the Gener...
reverse_slice_iterator slice_rend(const size_type row, const size_type col)
Returns a read/write iterator that points to the one before the first element of the line (row...
std::reverse_iterator< const_component_row_iterator > const_reverse_component_row_iterator
std::reverse_iterator< const_component_col_range_iterator > const_reverse_component_col_range_iterator
This is some iterator to iterate a 3d container into two Range defined by the indices and strides of ...
iterator end()
Returns a read/write iterator that points one past the last element in the GenericMultiComponent3d. Iteration is done in ordinary element order.
slip::stride_iterator< block_pointer > component_col_range_iterator
reverse_row_iterator row_rbegin(const size_type slice, const size_type row)
Returns a read/write reverse iterator that points to the last element of the row row of the slice sli...
int stride() const
Accessor of the stride of the Range.
std::reverse_iterator< iterator3d > reverse_iterator3d
reverse_iterator plane_rend(const size_type slice)
Returns a read/write reverse iterator that points to one before the first element in the slice plane ...
Provides a class to manipulate Numerical Matrix.
This is some iterator to iterate a 3d container into a plane area defined by the subscripts of the 3d...
const_pointer const_iterator
Provides some algorithms to apply C like functions to ranges.
std::reverse_iterator< const_row_range_iterator > const_reverse_row_range_iterator
Computes the L2 distance between two values x and y: .
std::reverse_iterator< component_col_iterator > reverse_component_col_iterator
Provides a class to iterate a 1d range according to a step.
std::reverse_iterator< component_iterator > reverse_component_iterator
std::reverse_iterator< component_iterator3d > reverse_component_iterator3d
bool operator==(const Array< T > &x, const Array< T > &y)
slip::stride_iterator< const_pointer > const_row_range_iterator
reverse_slice_iterator slice_rbegin(const size_type row, const size_type col)
Returns a read/write iterator that points to the last element of the line (row,col) threw the slices ...
std::reverse_iterator< const_iterator > const_reverse_row_iterator
slip::stride_iterator< const_block_pointer > const_component_col_iterator
bool empty() const
Returns true if the GenericMultiComponent3d is empty. (Thus size() == 0)
reverse_iterator3d rfront_upper_left()
Returns a read/write reverse iterator3d. It points to the back bottom right element of the GenericMul...
ptrdiff_t difference_type
GenericMultiComponent3d(const size_type slices, const size_type rows, const size_type cols, InputIterator first, InputIterator last)
Contructs a GenericMultiComponent3d from a range.
iterator3d default_iterator
slip::Array3d< Block >::const_iterator3d const_iterator3d
iterator end()
Returns a read/write iterator that points one past the last element in the Matrix3d. Iteration is done in ordinary element order.
CoordType height() const
compute the height of the Box3d.
void fill(const Block *value)
Fills the container range [begin(),begin()+size()) with a copy of the value array.
std::reverse_iterator< component_iterator3d_range > reverse_component_iterator3d_range
T & max(const GrayscaleImage< T > &M1)
Returns the max element of a GrayscaleImage.
void fill(std::size_t component, InputIterator first, InputIterator last)
Fills the container range [begin(),begin()+size()) with a copy of the range [first,last)
size_type cols() const
Returns the number of columns (third dimension size) in the GenericMultiComponent3d.
GenericMultiComponent3d(const size_type slices, const size_type rows, const size_type cols, std::vector< InputIterator > first_iterators_list, InputIterator last)
Contructs a GenericMultiComponent3d from a 3 ranges.
iterator3d front_upper_left()
Returns a read/write iterator3d that points to the first element of the Matrix3d. It points to the fr...
iterator3d back_bottom_right()
Returns a read/write iterator3d that points to the past the end element of the Matrix3d. It points to past the end element of the back bottom right element of the Matrix3d.
static const std::size_t COMPONENTS
Block max() const
Returns the max elements of the GenericMultiComponent3d according to the operator <...
size_type dim1() const
Returns the number of slices (first dimension size) in the GenericMultiComponent3d.
Block min() const
Returns the min elements of the GenericMultiComponent3d according to the operator <...
This is some iterator to iterate a 3d container into a Box area defined by the subscripts of the 3d c...