76 #ifndef SLIP_MATRIX4D_HPP
77 #define SLIP_MATRIX4D_HPP
94 #include <boost/serialization/access.hpp>
95 #include <boost/serialization/split_member.hpp>
96 #include <boost/serialization/string.hpp>
97 #include <boost/serialization/complex.hpp>
98 #include <boost/serialization/version.hpp>
104 class stride_iterator;
110 template <
typename T>
113 template <
typename T>
116 template <
typename T>
117 std::ostream& operator<<(std::ostream & out, const slip::Matrix4d<T>& a);
128 bool operator<(const slip::Matrix4d<T>& x,
136 bool operator<=(const slip::Matrix4d<T>& x,
166 template <
typename T>
245 static const std::size_t
DIM = 4;
270 const std::size_t d2,
271 const std::size_t d3,
272 const std::size_t d4);
283 const std::size_t d2,
284 const std::size_t d3,
285 const std::size_t d4,
296 const std::size_t d2,
297 const std::size_t d3,
298 const std::size_t d4,
313 template<
typename InputIterator>
317 const std::size_t d4,
320 array_(new
Array4d<T>(d1,d2,d3,d4,first,last))
346 void resize(std::size_t d1,
2663 const range & row_range,
const range & col_range);
2693 const range & row_range,
const range & col_range);
2724 const range & row_range,
const range & col_range)
const;
2755 const range & row_range,
const range & col_range)
const;
2786 const range & row_range,
const range & col_range);
2817 const range & row_range,
const range & col_range);
2848 const range & row_range,
const range & col_range)
const;
2879 const range & row_range,
const range & col_range)
const;
2895 friend std::ostream& operator<< <>(std::ostream & out,
2933 std::fill_n(this->
begin(),this->
size(),value);
2955 template<
typename InputIterator>
3085 std::string
name()
const;
3245 friend class boost::serialization::access;
3246 template<
class Archive>
3247 void save(Archive & ar,
const unsigned int version)
const
3251 template<
class Archive>
3252 void load(Archive & ar,
const unsigned int version)
3256 BOOST_SERIALIZATION_SPLIT_MEMBER();
3295 template<
typename T>
3296 Matrix4d<T>
operator+(
const Matrix4d<T>& M1,
3297 const Matrix4d<T>& M2);
3305 template<
typename T>
3306 Matrix4d<T>
operator+(
const Matrix4d<T>& M1,
3315 template<
typename T>
3317 const Matrix4d<T>& M1);
3329 template<
typename T>
3330 Matrix4d<T>
operator-(
const Matrix4d<T>& M1,
3331 const Matrix4d<T>& M2);
3339 template<
typename T>
3340 Matrix4d<T>
operator-(
const Matrix4d<T>& M1,
3349 template<
typename T>
3351 const Matrix4d<T>& M1);
3363 template<
typename T>
3364 Matrix4d<T>
operator*(
const Matrix4d<T>& M1,
3365 const Matrix4d<T>& M2);
3373 template<
typename T>
3374 Matrix4d<T>
operator*(
const Matrix4d<T>& M1,
3383 template<
typename T>
3385 const Matrix4d<T>& M1);
3397 template<
typename T>
3398 Matrix4d<T>
operator/(
const Matrix4d<T>& M1,
3399 const Matrix4d<T>& M2);
3407 template<
typename T>
3408 Matrix4d<T>
operator/(
const Matrix4d<T>& M1,
3419 template<
typename T>
3420 T&
min(
const Matrix4d<T>& M1);
3428 template<
typename T>
3429 T&
max(
const Matrix4d<T>& M1);
3437 template<
typename T>
3438 Matrix4d<T>
abs(
const Matrix4d<T>& V);
3446 template<
typename T>
3447 Matrix4d<T>
sqrt(
const Matrix4d<T>& V);
3455 template<
typename T>
3456 Matrix4d<T>
cos(
const Matrix4d<T>& V);
3464 template<
typename T>
3465 Matrix4d<T>
acos(
const Matrix4d<T>& V);
3473 template<
typename T>
3474 Matrix4d<T>
sin(
const Matrix4d<T>& V);
3482 template<
typename T>
3483 Matrix4d<T>
asin(
const Matrix4d<T>& V);
3492 template<
typename T>
3493 Matrix4d<T>
tan(
const Matrix4d<T>& V);
3501 template<
typename T>
3502 Matrix4d<T>
atan(
const Matrix4d<T>& V);
3510 template<
typename T>
3511 Matrix4d<T>
exp(
const Matrix4d<T>& V);
3519 template<
typename T>
3520 Matrix4d<T>
log(
const Matrix4d<T>& V);
3528 template<
typename T>
3529 Matrix4d<T>
cosh(
const Matrix4d<T>& V);
3537 template<
typename T>
3538 Matrix4d<T>
sinh(
const Matrix4d<T>& V);
3546 template<
typename T>
3547 Matrix4d<T>
tanh(
const Matrix4d<T>& V);
3555 template<
typename T>
3556 Matrix4d<T>
log10(
const Matrix4d<T>& V);
3567 template<
typename T>
3570 array_(new slip::
Array4d<T>())
3573 template<
typename T>
3579 array_(new slip::
Array4d<T>(d1,d2,d3,d4))
3582 template<
typename T>
3589 array_(new slip::
Array4d<T>(d1,d2,d3,d4,val))
3592 template<
typename T>
3599 array_(new slip::
Array4d<T>(d1,d2,d3,d4,val))
3603 template<
typename T>
3606 array_(new slip::
Array4d<T>((*rhs.array_)))
3609 template<
typename T>
3622 template<
typename T>
3628 *array_ = *(rhs.array_);
3633 template<
typename T>
3637 std::fill_n((*array_)[0][0][0],array_->size(),value);
3641 template<
typename T>
3649 array_->
resize(d1,d2,d3,d4,val);
3666 template<
typename T>
3674 template<
typename T>
3682 template<
typename T>
3686 return array_->
begin();
3689 template<
typename T>
3693 return array_->
end();
3696 template<
typename T>
3703 template<
typename T>
3710 template<
typename T>
3718 template<
typename T>
3728 template<
typename T>
3736 template<
typename T>
3740 Array4d<T>
const * tp(array_);
3741 return tp->slab_begin(slice,row,col);
3744 template<
typename T>
3748 return array_->slab_end(slice,row,col);
3752 template<
typename T>
3756 Array4d<T>
const * tp(array_);
3757 return tp->slab_end(slice,row,col);
3761 template<
typename T>
3765 return array_->slab_rbegin(slice,row,col);
3768 template<
typename T>
3772 Array4d<T>
const * tp(array_);
3773 return tp->slab_rbegin(slice,row,col);
3777 template<
typename T>
3781 return array_->slab_rend(slice,row,col);
3784 template<
typename T>
3788 Array4d<T>
const * tp(array_);
3789 return tp->slab_rend(slice,row,col);
3795 template<
typename T>
3801 return array_->slice_begin(slab,row,col);
3804 template<
typename T>
3810 Array4d<T>
const * tp(array_);
3811 return tp->slice_begin(slab,row,col);
3814 template<
typename T>
3820 return array_->slice_end(slab,row,col);
3823 template<
typename T>
3829 Array4d<T>
const * tp(array_);
3830 return tp->slice_end(slab,row,col);
3833 template<
typename T>
3839 return array_->slice_rbegin(slab,row,col);
3842 template<
typename T>
3848 Array4d<T>
const * tp(array_);
3849 return tp->slice_rbegin(slab,row,col);
3852 template<
typename T>
3858 return array_->slice_rend(slab,row,col);
3861 template<
typename T>
3867 Array4d<T>
const * tp(array_);
3868 return tp->slice_rend(slab,row,col);
3873 template<
typename T>
3879 return array_->row_begin(slab,slice,row);
3882 template<
typename T>
3888 Array4d<T>
const * tp(array_);
3889 return tp->row_begin(slab,slice,row);
3892 template<
typename T>
3898 return array_->row_end(slab,slice,row);
3901 template<
typename T>
3907 Array4d<T>
const * tp(array_);
3908 return tp->row_end(slab,slice,row);
3912 template<
typename T>
3918 return array_->row_rbegin(slab,slice,row);
3921 template<
typename T>
3927 Array4d<T>
const * tp(array_);
3928 return tp->row_rbegin(slab,slice,row);
3932 template<
typename T>
3938 return array_->row_rend(slab,slice,row);
3941 template<
typename T>
3947 Array4d<T>
const * tp(array_);
3948 return tp->row_rend(slab,slice,row);
3953 template<
typename T>
3959 return array_->col_begin(slab,slice,col);
3962 template<
typename T>
3968 Array4d<T>
const * tp(array_);
3969 return tp->col_begin(slab,slice,col);
3973 template<
typename T>
3979 return array_->col_end(slab,slice,col);
3982 template<
typename T>
3988 Array4d<T>
const * tp(array_);
3989 return tp->col_end(slab,slice,col);
3992 template<
typename T>
3998 return array_->col_rbegin(slab,slice,col);
4001 template<
typename T>
4007 Array4d<T>
const * tp(array_);
4008 return tp->col_rbegin(slab,slice,col);
4012 template<
typename T>
4018 return array_->col_rend(slab,slice,col);
4021 template<
typename T>
4027 Array4d<T>
const * tp(array_);
4028 return tp->col_rend(slab,slice,col);
4033 template<
typename T>
4038 return array_->slab_begin(slice,row,col,range);
4042 template<
typename T>
4047 return array_->slab_end(slice,row,col,range);
4051 template<
typename T>
4056 Array4d<T>
const * tp(array_);
4057 return tp->slab_begin(slice,row,col,range);
4060 template<
typename T>
4065 Array4d<T>
const * tp(array_);
4066 return tp->slab_end(slice,row,col,range);
4069 template<
typename T>
4074 return array_->slab_rbegin(slice,row,col,range);
4078 template<
typename T>
4083 return array_->slab_rend(slice,row,col,range);
4087 template<
typename T>
4092 Array4d<T>
const * tp(array_);
4093 return tp->slab_rbegin(slice,row,col,range);
4096 template<
typename T>
4101 Array4d<T>
const * tp(array_);
4102 return tp->slab_rend(slice,row,col,range);
4108 template<
typename T>
4115 return array_->slice_begin(slab,row,col,range);
4118 template<
typename T>
4125 Array4d<T>
const * tp(array_);
4126 return tp->slice_begin(slab,row,col,range);
4129 template<
typename T>
4136 return array_->slice_end(slab,row,col,range);
4139 template<
typename T>
4146 Array4d<T>
const * tp(array_);
4147 return tp->slice_end(slab,row,col,range);
4150 template<
typename T>
4157 return array_->slice_rbegin(slab,row,col,range);
4160 template<
typename T>
4167 Array4d<T>
const * tp(array_);
4168 return tp->slice_rbegin(slab,row,col,range);
4171 template<
typename T>
4178 return array_->slice_rend(slab,row,col,range);
4181 template<
typename T>
4188 Array4d<T>
const * tp(array_);
4189 return tp->slice_rend(slab,row,col,range);
4194 template<
typename T>
4200 return array_->row_begin(slab,slice,row,range);
4203 template<
typename T>
4210 Array4d<T>
const * tp(array_);
4211 return tp->row_begin(slab,slice,row,range);
4214 template<
typename T>
4221 return array_->row_end(slab,slice,row,range);
4224 template<
typename T>
4231 Array4d<T>
const * tp(array_);
4232 return tp->row_end(slab,slice,row,range);
4235 template<
typename T>
4242 return array_->row_rbegin(slab,slice,row,range);
4245 template<
typename T>
4252 Array4d<T>
const * tp(array_);
4253 return tp->row_rbegin(slab,slice,row,range);
4256 template<
typename T>
4263 return array_->row_rend(slab,slice,row,range);
4266 template<
typename T>
4273 Array4d<T>
const * tp(array_);
4274 return tp->row_rend(slab,slice,row,range);
4279 template<
typename T>
4286 return array_->col_begin(slab,slice,col,range);
4289 template<
typename T>
4296 Array4d<T>
const * tp(array_);
4297 return tp->col_begin(slab,slice,col,range);
4300 template<
typename T>
4307 return array_->col_end(slab,slice,col,range);
4310 template<
typename T>
4317 Array4d<T>
const * tp(array_);
4318 return tp->col_end(slab,slice,col,range);
4321 template<
typename T>
4328 return array_->col_rbegin(slab,slice,col,range);
4331 template<
typename T>
4338 Array4d<T>
const * tp(array_);
4339 return tp->col_rbegin(slab,slice,col,range);
4342 template<
typename T>
4349 return array_->col_rend(slab,slice,col,range);
4352 template<
typename T>
4359 Array4d<T>
const * tp(array_);
4360 return tp->col_rend(slab,slice,col,range);
4370 template<
typename T>
4377 template<
typename T>
4386 template<
typename T>
4393 template<
typename T>
4401 template<
typename T>
4409 template<
typename T>
4418 template<
typename T>
4426 template<
typename T>
4437 template<
typename T>
4444 template<
typename T>
4453 template<
typename T>
4461 template<
typename T>
4470 template<
typename T>
4478 template<
typename T>
4487 template<
typename T>
4495 template<
typename T>
4506 template<
typename T>
4517 template<
typename T>
4525 return array_->last_back_bottom_right(slab_range,slice_range,row_range,col_range);
4529 template<
typename T>
4537 Array4d<T>
const * tp(array_);
4538 return tp->first_front_upper_left(slab_range,slice_range,row_range,col_range);
4542 template<
typename T>
4550 Array4d<T>
const * tp(array_);
4551 return tp->last_back_bottom_right(slab_range,slice_range,row_range,col_range);
4554 template<
typename T>
4562 return array_->rfirst_front_upper_left(slab_range,slice_range,row_range,col_range);
4565 template<
typename T>
4573 Array4d<T>
const * tp(array_);
4574 return tp->rfirst_front_upper_left(slab_range,slice_range,row_range,col_range);
4577 template<
typename T>
4585 return array_->rlast_back_bottom_right(slab_range,slice_range,row_range,col_range);
4588 template<
typename T>
4596 Array4d<T>
const * tp(array_);
4597 return tp->rlast_back_bottom_right(slab_range,slice_range,row_range,col_range);
4605 template <
typename T>
4607 std::ostream& operator<<(std::ostream & out, const Matrix4d<T>& a)
4617 template<
typename T>
4622 return (*array_)[l];
4625 template<
typename T>
4630 Array4d<T>
const * tp(array_);
4631 return tp->operator[](l);
4634 template<
typename T>
4642 return (*array_)[l][k][i][j];
4645 template<
typename T>
4653 return (*array_)[l][k][i][j];
4658 template<
typename T>
4663 template<
typename T>
4668 template<
typename T>
4673 template<
typename T>
4678 template<
typename T>
4683 template<
typename T>
4688 template<
typename T>
4693 template<
typename T>
4698 template<
typename T>
4703 template<
typename T>
4709 template<
typename T>
4714 template<
typename T>
4719 template<
typename T>
4723 template<
typename T>
4727 array_->
swap(*(M.array_));
4736 template<
typename T>
4745 template<
typename T>
4757 template<
typename T>
4759 bool operator<(const Matrix4d<T>& x,
4762 return std::lexicographical_compare(x.begin(), x.end(),
4763 y.begin(), y.end());
4767 template<
typename T>
4775 template<
typename T>
4777 bool operator<=(const Matrix4d<T>& x,
4783 template<
typename T>
4798 template<
typename T>
4802 std::transform(array_->begin(),array_->end(),array_->begin(),std::bind2nd(std::plus<T>(),val));
4806 template<
typename T>
4810 std::transform(array_->begin(),array_->end(),array_->begin(),std::bind2nd(std::minus<T>(),val));
4814 template<
typename T>
4818 std::transform(array_->begin(),array_->end(),array_->begin(),std::bind2nd(std::multiplies<T>(),val));
4822 template<
typename T>
4826 std::transform(array_->begin(),array_->end(),array_->begin(),std::bind2nd(std::divides<T>(),val));
4830 template<
typename T>
4835 std::transform(array_->begin(),array_->end(),tmp.
begin(),std::negate<T>());
4839 template<
typename T>
4843 assert(this->dim1() == rhs.
dim1());
4844 assert(this->dim2() == rhs.
dim2());
4845 assert(this->dim3() == rhs.
dim3());
4846 assert(this->dim4() == rhs.
dim4());
4847 std::transform(array_->begin(),array_->end(),(*(rhs.array_)).begin(),array_->begin(),std::plus<T>());
4851 template<
typename T>
4855 assert(this->dim1() == rhs.
dim1());
4856 assert(this->dim2() == rhs.
dim2());
4857 assert(this->dim3() == rhs.
dim3());
4858 assert(this->dim4() == rhs.
dim4());
4859 std::transform(array_->begin(),array_->end(),(*(rhs.array_)).begin(),array_->begin(),std::minus<T>());
4863 template<
typename T>
4867 assert(this->dim1() == rhs.
dim1());
4868 assert(this->dim2() == rhs.
dim2());
4869 assert(this->dim3() == rhs.
dim3());
4870 assert(this->dim4() == rhs.
dim4());
4871 std::transform(array_->begin(),array_->end(),(*(rhs.array_)).begin(),array_->begin(),std::multiplies<T>());
4875 template<
typename T>
4879 assert(this->size() == rhs.
size());
4880 std::transform(array_->begin(),array_->end(),(*(rhs.array_)).begin(),array_->begin(),std::divides<T>());
4886 template<
typename T>
4890 assert(array_->size() != 0);
4891 return *std::min_element(array_->begin(),array_->end());
4894 template<
typename T>
4898 assert(array_->size() != 0);
4899 return *std::max_element(array_->begin(),array_->end());
4902 template<
typename T>
4906 assert(array_->size() != 0);
4907 return std::accumulate(array_->begin(),array_->end(),T());
4911 template<
typename T>
4915 slip::apply(this->begin(),this->end(),this->begin(),fun);
4919 template<
typename T>
4923 slip::apply(this->begin(),this->end(),this->begin(),fun);
4930 template<
typename T>
4941 std::transform(M1.
begin(),M1.
end(),M2.
begin(),tmp.begin(),std::plus<T>());
4945 template<
typename T>
4955 template<
typename T>
4964 template<
typename T>
4975 std::transform(M1.
begin(),M1.
end(),M2.
begin(),tmp.begin(),std::minus<T>());
4979 template<
typename T>
4989 template<
typename T>
4997 template<
typename T>
5008 std::transform(M1.
begin(),M1.
end(),M2.
begin(),tmp.begin(),std::multiplies<T>());
5012 template<
typename T>
5022 template<
typename T>
5030 template<
typename T>
5041 std::transform(M1.
begin(),M1.
end(),M2.
begin(),tmp.begin(),std::divides<T>());
5045 template<
typename T>
5057 template<
typename T>
5064 template<
typename T>
5071 template<
typename T>
5081 template<
typename T>
5090 template<
typename T>
5099 template<
typename T>
5108 template<
typename T>
5117 template<
typename T>
5126 template<
typename T>
5135 template<
typename T>
5144 template<
typename T>
5153 template<
typename T>
5162 template<
typename T>
5171 template<
typename T>
5180 template<
typename T>
5189 template<
typename T>
5201 #endif //SLIP_MATRIX4D_HPP
slab_iterator slab_end(const size_type slice, 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 (slice...
Matrix4d< T > log10(const Matrix4d< T > &M)
reverse_iterator4d rfirst_front_upper_left()
Returns a read/write reverse iterator4d. It points to the last back bottom right element of the Array...
HyperVolume< T > tanh(const HyperVolume< T > &M)
bool operator!=(const Array< T > &x, const Array< T > &y)
This is some iterator to iterate a 4d container into a Box area defined by the subscripts of the 4d c...
iterator4d first_front_upper_left()
Returns a read/write iterator4d that points to the first element of the Matrix4d. It points to the fi...
std::reverse_iterator< const_slice_range_iterator > const_reverse_slice_range_iterator
Matrix4d< T > cos(const Matrix4d< T > &M)
size_type dim1() const
Returns the number of slabs (first dimension size) in the Matrix4d.
Matrix4d< T > tan(const Matrix4d< T > &M)
reverse_iterator4d rfirst_front_upper_left()
Returns a read/write reverse iterator4d. It points to the last back bottom right element of the Matri...
T & max(const GrayscaleImage< T > &M1)
Returns the max element of a GrayscaleImage.
reverse_iterator4d rlast_back_bottom_right()
Returns a read/write reverse iterator4d. It points to past the first front upper left element of the ...
slip::stride_iterator< const_pointer > const_slab_iterator
iterator4d last_back_bottom_right()
Returns a read/write iterator4d that points to the past the end element of the Matrix4d. It points to past the end element of the last back bottom right element of the Matrix4d.
row_iterator row_begin(const size_type slab, const size_type slice, const size_type row)
Returns a read/write iterator that points to the first element of the row row of a given slab slab an...
std::reverse_iterator< const_iterator > const_reverse_row_iterator
iterator4d last_back_bottom_right()
Returns a read/write iterator4d that points to the past the end element of the Array4d. It points to past the end element of the last back bottom right element of the Array4d.
row_iterator row_end(const size_type slab, 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 a given slab ...
std::reverse_iterator< const_col_iterator > const_reverse_col_iterator
value_type const & const_reference
std::reverse_iterator< iterator4d > reverse_iterator4d
reverse_row_iterator row_rbegin(const size_type slab, 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 a given slab ...
slip::Matrix4d< unsigned char > Matrix4d_uc
unsigned char alias
HyperVolume< T > abs(const HyperVolume< T > &V)
Returns the abs value of each element of the HyperVolume.
std::reverse_iterator< const_iterator4d > const_reverse_iterator4d
slice_iterator slice_end(const size_type slab, 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 (slab...
size_type slabs() const
Returns the number of slabs (first dimension size) in the Matrix4d.
self & operator+=(const T &val)
Add val to each element of the Matrix.
This is some iterator to iterate a 4d 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 Array4d. Iteration is done in ordinary element order.
std::reverse_iterator< slab_iterator > reverse_slab_iterator
Matrix4d< T > operator-(const T &val, const Matrix4d< T > &M1)
substraction of a scalar to each element of a Matrix4d
std::reverse_iterator< col_range_iterator > reverse_col_range_iterator
HyperVolume< T > cosh(const HyperVolume< T > &M)
slip::stride_iterator< const_pointer > const_col_iterator
T & min(const GrayscaleImage< T > &M1)
Returns the min element of a GrayscaleImage.
std::reverse_iterator< const_slice_iterator > const_reverse_slice_iterator
slip::stride_iterator< slab_iterator > slab_range_iterator
This is some iterator to iterate a 4d container into a Box area defined by the subscripts of the 4d c...
bool operator!=(const slip::Matrix4d< T > &x, const slip::Matrix4d< T > &y)
Color< T > operator+(const Color< T > &V1, const Color< T > &V2)
slip::Matrix4d< long > Matrix4d_l
long alias
std::reverse_iterator< const_row_range_iterator > const_reverse_row_range_iterator
HyperVolume< T > atan(const HyperVolume< T > &M)
HyperVolume< T > sin(const HyperVolume< T > &V)
Returns the sin value of each element of the HyperVolume.
self & operator*=(const T &val)
size_type columns() const
Returns the number of columns (fourth dimension size) in the Matrix4d.
slip::Array4d< T >::const_iterator4d_range const_iterator4d_range
bool operator>=(const slip::Matrix4d< T > &x, const slip::Matrix4d< T > &y)
slip::Matrix4d< unsigned long > Matrix4d_ul
unsigned long alias
Matrix4d(const size_type d1, const size_type d2, const size_type d3, const std::size_t d4, InputIterator first, InputIterator last)
Contructs a Matrix4d from a range.
std::reverse_iterator< const_iterator4d_range > const_reverse_iterator4d_range
std::reverse_iterator< col_iterator > reverse_col_iterator
HyperVolume< T > exp(const HyperVolume< T > &M)
size_type size() const
Returns the number of elements in the Matrix4d.
self & operator-=(const T &val)
HyperVolume< T > sinh(const HyperVolume< T > &V)
Returns the sinh value of each element of the HyperVolume.
reverse_col_iterator col_rend(const size_type slab, 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 a give...
T & max() const
Returns the max element of the Matrix according to the operator <.
std::reverse_iterator< const_slab_range_iterator > const_reverse_slab_range_iterator
HyperVolume< T > abs(const HyperVolume< T > &M)
bool operator>(const Array< T > &x, const Array< T > &y)
iterator4d first_front_upper_left()
Returns a read/write iterator4d that points to the first element of the Array4d. It points to the fir...
HyperVolume< T > sin(const HyperVolume< T > &M)
slip::stride_iterator< pointer > row_range_iterator
col_iterator col_begin(const size_type slab, const size_type slice, const size_type col)
Returns a read/write iterator that points to the first element of the column column of a given slab s...
HyperVolume< T > tan(const HyperVolume< T > &V)
Returns the tan value of each element of the HyperVolume.
Matrix4d< T > asin(const Matrix4d< T > &M)
HyperVolume< T > cos(const HyperVolume< T > &M)
slip::Array4d< T >::const_iterator4d const_iterator4d
std::string name() const
Returns the name of the class.
Matrix4d< T > tanh(const Matrix4d< T > &M)
HyperVolume< T > log10(const HyperVolume< T > &V)
Returns the log10 value of each element of the HyperVolume.
slab_iterator slab_begin(const size_type slice, const size_type row, const size_type col)
Returns a read/write iterator that points to the first element of the line (slice,row,col) through the slabs in the Matrix4d. Iteration is done in ordinary element order (increasing slab number).
slip::stride_iterator< pointer > slab_iterator
slip::Matrix4d< short > Matrix4d_s
short alias
std::reverse_iterator< iterator > reverse_row_iterator
slip::Matrix4d< unsigned short > Matrix4d_us
unsigned long alias
MultivariatePolynomial< T, DIM > operator*(const MultivariatePolynomial< T, DIM > &P1, const MultivariatePolynomial< T, DIM > &P2)
pointwise multiplication of two MultivariatePolynomial
slip::Matrix4d< unsigned int > Matrix4d_ui
unsigned int alias
slip::stride_iterator< slice_iterator > slice_range_iterator
std::reverse_iterator< slice_iterator > reverse_slice_iterator
std::reverse_iterator< slice_range_iterator > reverse_slice_range_iterator
HyperVolume< T > asin(const HyperVolume< T > &V)
Returns the sin value of each element of the HyperVolume.
T & max(const Matrix4d< T > &M1)
slip::stride_iterator< col_iterator > col_range_iterator
self & operator=(const Matrix4d< T > &rhs)
Assign a Matrix4d.
slip::stride_iterator< const_pointer > const_row_range_iterator
void fill(const T *value)
Fills the container range [begin(),begin()+size()) with a copy of the value array.
Matrix4d< T > log(const Matrix4d< T > &M)
std::reverse_iterator< iterator > reverse_iterator
Matrix4d< T > sin(const Matrix4d< T > &M)
bool empty() const
Returns true if the Matrix4d is empty. (Thus size() == 0)
const_iterator begin() const
Returns a read-only (constant) iterator that points to the first element in the Matrix4d. Iteration is done in ordinary element order.
void copy(_II first, _II last, _OI output_first)
Copy algorithm optimized for slip iterators.
std::reverse_iterator< const_slab_iterator > const_reverse_slab_iterator
Provides a class to manipulate 4d dynamic and generic arrays.
reverse_slice_iterator slice_rend(const size_type slab, 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 (slab...
MultivariatePolynomial< T, DIM > operator-(const MultivariatePolynomial< T, DIM > &P1, const MultivariatePolynomial< T, DIM > &P2)
pointwise substraction of two MultivariatePolynomial
Matrix4d()
Constructs a Matrix4d.
Matrix4d< T > exp(const Matrix4d< T > &M)
std::reverse_iterator< row_range_iterator > reverse_row_range_iterator
std::reverse_iterator< iterator4d_range > reverse_iterator4d_range
std::reverse_iterator< slab_range_iterator > reverse_slab_range_iterator
iterator end()
Returns a read/write iterator that points one past the last element in the Matrix4d. Iteration is done in ordinary element order.
reverse_col_iterator col_rbegin(const size_type slab, 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 a given...
Matrix4d< T > & apply(T(*fun)(T))
Applys the one-parameter C-function fun to each element of the Matrix4d.
T & min(const GrayscaleImage< T > &M1)
Returns the min element of a GrayscaleImage.
HyperVolume< T > sqrt(const HyperVolume< T > &M)
slip::Matrix4d< double > Matrix4d_d
double alias
HyperVolume< T > cos(const HyperVolume< T > &V)
Returns the cos value of each element of the HyperVolume.
slip::stride_iterator< const_slice_iterator > const_slice_range_iterator
This is a four-dimensional dynamic and generic container. This container statisfies the Bidirectionna...
HyperVolume< T > sinh(const HyperVolume< T > &M)
const_iterator4d const_default_iterator
bool operator>(const slip::Matrix4d< T > &x, const slip::Matrix4d< T > &y)
MultivariatePolynomial< T, DIM > operator/(const MultivariatePolynomial< T, DIM > &P, const T &val)
division of a scalar to each element of a MultivariatePolynomial
void fill(const T &value)
Fills the container range [begin(),begin()+size()) with copies of value.
slip::stride_iterator< const_col_iterator > const_col_range_iterator
void resize(std::size_t d1, std::size_t d2, std::size_t d3, std::size_t d4, const T &val=T())
Resizes a Matrix4d.
std::reverse_iterator< const_iterator > const_reverse_iterator
slip::stride_iterator< pointer > slice_iterator
slip::Array4d< T >::iterator4d_range iterator4d_range
T *** operator[](const size_type l)
static const std::size_t DIM
reference operator()(const size_type l, const size_type k, const size_type i, const size_type j)
Subscript access to the data contained in the Matrix4d.
reverse_slab_iterator slab_rend(const size_type slice, 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 (slice...
HyperVolume< T > tanh(const HyperVolume< T > &V)
Returns the tanh value of each element of the HyperVolume.
HyperVolume< T > atan(const HyperVolume< T > &V)
Returns the atan value of each element of the HyperVolume.
self & operator/=(const T &val)
HyperVolume< T > log(const HyperVolume< T > &M)
size_type cols() const
Returns the number of columns (fourth dimension size) in the Matrix4d.
std::reverse_iterator< const_col_range_iterator > const_reverse_col_range_iterator
size_type dim4() const
Returns the number of columns (fourth dimension size) in the Matrix4d.
HyperVolume< T > acos(const HyperVolume< T > &V)
Returns the acos value of each element of the HyperVolume.
size_type dim3() const
Returns the number of rows (third dimension size) in the Matrix4d.
HyperVolume< T > cosh(const HyperVolume< T > &V)
Returns the cosh value of each element of the HyperVolume.
void swap(Matrix4d &M)
Swaps data with another Matrix4d.
size_type rows() const
Returns the number of rows (third dimension size) in the Matrix4d.
Some const iterator to iterate a 4d container into two Range defined by the indices and strides of th...
HyperVolume< T > acos(const HyperVolume< T > &M)
void fill(InputIterator first, InputIterator last)
Fills the container range [begin(),begin()+size()) with a copy of the range [first,last)
Matrix4d< T > acos(const Matrix4d< T > &M)
HyperVolume< T > log10(const HyperVolume< T > &M)
slip::stride_iterator< pointer > col_iterator
Matrix4d< T > atan(const Matrix4d< T > &M)
Matrix4d< T > sinh(const Matrix4d< T > &M)
ptrdiff_t difference_type
Matrix4d< T > abs(const Matrix4d< T > &M)
HyperVolume< T > sqrt(const HyperVolume< T > &V)
Returns the sqrt value of each element of the HyperVolume.
slip::stride_iterator< const_slab_iterator > const_slab_range_iterator
const Matrix4d< T > const_self
T & min() const
Returns the min element of the Matrix according to the operator <.
slip::Array4d< T >::iterator4d iterator4d
Provides some algorithms to apply C like functions to ranges.
Provides a class to manipulate iterator4d within a slip::Range. It is used to iterate throw 4d contai...
const_pointer const_iterator
size_type dim2() const
Returns the number of slices (second dimension size) in the Matrix4d.
slip::stride_iterator< const_pointer > const_slice_iterator
slip::Matrix4d< char > Matrix4d_c
char alias
col_iterator col_end(const size_type slab, 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 a given...
Provides a class to iterate a 1d range according to a step.
~Matrix4d()
Destructor of the Matrix4d.
HyperVolume< T > tan(const HyperVolume< T > &M)
T sum() const
Returns the sum of the elements of the Matrix.
bool operator==(const slip::Matrix4d< T > &x, const slip::Matrix4d< T > &y)
bool operator==(const Array< T > &x, const Array< T > &y)
HyperVolume< T > asin(const HyperVolume< T > &M)
Matrix4d< T > cosh(const Matrix4d< T > &M)
size_type max_size() const
Returns the maximal size (number of elements) in the Matrix4d.
reverse_row_iterator row_rend(const size_type slab, 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 a given slab...
HyperVolume< T > log(const HyperVolume< T > &V)
Returns the log value of each element of the HyperVolume.
slice_iterator slice_begin(const size_type slab, const size_type row, const size_type col)
Returns a read/write iterator that points to the first element of the line (slab,row,col) through the slices in the Matrix4d. Iteration is done in ordinary element order (increasing slice number).
slip::Matrix4d< int > Matrix4d_i
int alias
MultivariatePolynomial< T, DIM > operator+(const MultivariatePolynomial< T, DIM > &P1, const MultivariatePolynomial< T, DIM > &P2)
pointwise addition of two MultivariatePolynomial
Provides a class to manipulate iterator4d within a slip::Box4d. It is used to iterate throw 4d contai...
Color< T > operator*(const Color< T > &V1, const Color< T > &V2)
iterator4d default_iterator
Matrix4d< T > sqrt(const Matrix4d< T > &M)
reverse_iterator rbegin()
Returns a read/write reverse iterator that points to the last element in the Matrix4d. Iteration is done in reverse element order.
reverse_slab_iterator slab_rbegin(const size_type slice, const size_type row, const size_type col)
Returns a read/write iterator that points to the last element of the line (slice,row,col) through the slabs in the Matrix4d. Iteration is done in reverse element order (decreasing slab number).
const_pointer const_row_iterator
reverse_slice_iterator slice_rbegin(const size_type slab, const size_type row, const size_type col)
Returns a read/write iterator that points to the last element of the line (slab,row,col) through the slices in the Matrix4d. Iteration is done in reverse element order (decreasing slice number).
reverse_iterator4d rlast_back_bottom_right()
Returns a read/write reverse iterator4d. It points to past the first front upper left element of the ...
value_type const * const_pointer
void apply(InputIterator first, InputIterator last, OutputIterator result, typename std::iterator_traits< OutputIterator >::value_type(*function)(typename std::iterator_traits< InputIterator >::value_type))
Applies a C-function to each element of a range.
T & max(const GrayscaleImage< T > &M1)
Returns the max element of a GrayscaleImage.
Color< T > operator/(const Color< T > &V1, const Color< T > &V2)
bool operator>=(const Array< T > &x, const Array< T > &y)
Color< T > operator-(const Color< T > &V1, const Color< T > &V2)
slip::Matrix4d< float > Matrix4d_f
float alias
size_type slices() const
Returns the number of slices (second dimension size) in the Matrix4d.
reverse_iterator rend()
Returns a read/write reverse iterator that points to one before the first element in the Matrix4d...
const_iterator begin() const
Returns a read-only (constant) iterator that points to the first element in the Array4d. Iteration is done in ordinary element order.
HyperVolume< T > exp(const HyperVolume< T > &V)
Returns the exp value of each element of the HyperVolume.
T & min(const Matrix4d< T > &M1)