11#ifndef NDARRAY_casts_h_INCLUDED
12#define NDARRAY_casts_h_INCLUDED
22#include <boost/type_traits/add_const.hpp>
23#include <boost/type_traits/remove_const.hpp>
24#include <boost/mpl/comparison.hpp>
25#include <boost/utility/enable_if.hpp>
26#include <boost/static_assert.hpp>
31template <
typename Array_>
34 typedef typename boost::remove_const<ComplexElement>::type ComplexValue;
36 BOOST_STATIC_ASSERT( boost::is_complex<ComplexValue>::value );
37 typedef typename ComplexValue::value_type RealValue;
38 typedef typename boost::mpl::if_<
39 boost::is_const<ComplexElement>, RealValue
const, RealValue
45 static inline Result apply(Array_
const & array, Offset offset) {
46 return Access::construct(
47 reinterpret_cast<RealElement*
>(array.getData()) + offset,
48 Access::Core::create(array.getShape(), array.getStrides() * 2, array.getManager())
62template <
typename T_,
typename T,
int N,
int C>
66 const_cast<T_*
>(array.
getData()),
75template <
int C_,
typename T,
int N,
int C>
91template <
int C_,
typename T,
int N,
int C>
98 for (
int i=1; i <= C_; ++i) {
104 for (
int i=0; i < -C_; ++i) {
109 return static_dimension_cast<C_>(array);
115template <
typename Array_>
116typename detail::ComplexExtractor<Array_>::Result
124template <
typename Array_>
125typename detail::ComplexExtractor<Array_>::Result
136template <
int Nf,
typename T,
int N,
int C>
137inline typename boost::enable_if_c< ((C+Nf-N)>=1), ArrayRef<T,Nf,(C+Nf-N)> >::type
140 typedef typename Access::Core Core;
141 BOOST_STATIC_ASSERT(C+Nf-N >= 1);
144 for (
int n=Nf; n<N; ++n)
145 newShape[Nf-1] *= oldShape[n];
147 newStrides[Nf-1] = 1;
148 return Access::construct(input.
getData(), Core::create(newShape, newStrides, input.
getManager()));
157template <
int Nf,
typename T,
int N,
int C>
158inline typename boost::enable_if_c< ((C+Nf-N)>=1), ArrayRef<T,Nf,(C+Nf-N)> >::type
160 return flatten<Nf>(input.
shallow());
Definitions for ArrayRef.
Manager::Ptr getManager() const
Return the opaque object responsible for memory management.
Definition ArrayBase.h:136
Shallow const shallow() const
Return a Array view to this.
Definition ArrayBase.h:188
Element * getData() const
Return a raw pointer to the first element of the array.
Definition ArrayBase.h:130
Strides getStrides() const
Return a Vector of the strides of all dimensions.
Definition ArrayBase.h:152
Index getShape() const
Return a Vector of the sizes of all dimensions.
Definition ArrayBase.h:149
A proxy class for Array with deep assignment operators.
Definition ArrayRef.h:34
A multidimensional strided array.
Definition Array.h:35
Definition ArrayAccess.h:26
Array< T, N, C_ > dynamic_dimension_cast(Array< T, N, C > const &array)
Definition casts.h:93
Array< T, N, C_ > static_dimension_cast(Array< T, N, C > const &array)
Definition casts.h:77
detail::ComplexExtractor< Array_ >::Result getImag(Array_ const &array)
Return an ArrayRef view into the imaginary part of a complex array.
Definition casts.h:126
boost::enable_if_c<((C+Nf-N)>=1), ArrayRef< T, Nf,(C+Nf-N)> >::type flatten(Array< T, N, C > const &input)
Create a view into an array with trailing contiguous dimensions merged.
Definition casts.h:138
detail::ComplexExtractor< Array_ >::Result getReal(Array_ const &array)
Return an ArrayRef view into the real part of a complex array.
Definition casts.h:117
Array< T_, N, C > const_array_cast(Array< T, N, C > const &array)
Definition casts.h:64
Traits for expressions.
Definition ExpressionTraits.h:30
A fixed-size 1D array class.
Definition Vector.h:82