diff options
Diffstat (limited to 'unsupported/Eigen/CXX11/src/Tensor/TensorSyclPlaceHolder.h')
-rw-r--r-- | unsupported/Eigen/CXX11/src/Tensor/TensorSyclPlaceHolder.h | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/unsupported/Eigen/CXX11/src/Tensor/TensorSyclPlaceHolder.h b/unsupported/Eigen/CXX11/src/Tensor/TensorSyclPlaceHolder.h new file mode 100644 index 000000000..87995a25e --- /dev/null +++ b/unsupported/Eigen/CXX11/src/Tensor/TensorSyclPlaceHolder.h @@ -0,0 +1,151 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Mehdi Goli Codeplay Software Ltd. +// Ralph Potter Codeplay Software Ltd. +// Luke Iwanski Codeplay Software Ltd. +// Contact: <eigen@codeplay.com> +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +/***************************************************************** + * TensorSyclPlaceHolder.h + * + * \brief: + * The PlaceHolder expression are nothing but a container preserving + * the order of actual data in the tuple of sycl buffer. + * +*****************************************************************/ + +#ifndef UNSUPPORTED_EIGEN_CXX11_SRC_TENSORYSYCL_PLACEHOLDER_HPP +#define UNSUPPORTED_EIGEN_CXX11_SRC_TENSORYSYCL_PLACEHOLDER_HPP + +namespace Eigen { +namespace internal { +/// \struct PlaceHolder +/// \brief PlaceHolder is used to replace the \ref TensorMap in the expression +/// tree. +/// PlaceHolder contains the order of the leaf node in the expression tree. +template <typename Scalar, size_t N> +struct PlaceHolder { + static constexpr size_t I = N; + using Type = Scalar; +}; + +template <typename PlainObjectType, int Options_, + template <class> class MakePointer_, size_t N> +struct PlaceHolder<const TensorMap<PlainObjectType, Options_, MakePointer_>, + N> { + static constexpr size_t I = N; + + using Type = const TensorMap<PlainObjectType, Options_, MakePointer_>; + + typedef typename Type::Self Self; + typedef typename Type::Base Base; + typedef typename Type::Nested Nested; + typedef typename Type::StorageKind StorageKind; + typedef typename Type::Index Index; + typedef typename Type::Scalar Scalar; + typedef typename Type::RealScalar RealScalar; + typedef typename Type::CoeffReturnType CoeffReturnType; +}; + +/// \brief specialisation of the PlaceHolder node for TensorForcedEvalOp. The +/// TensorForcedEvalOp act as a leaf node for its parent node. +template <typename Expression, size_t N> +struct PlaceHolder<const TensorForcedEvalOp<Expression>, N> { + static constexpr size_t I = N; + + using Type = const TensorForcedEvalOp<Expression>; + + typedef typename Type::Nested Nested; + typedef typename Type::StorageKind StorageKind; + typedef typename Type::Index Index; + + typedef typename Type::Scalar Scalar; + typedef typename Type::Packet Packet; + + typedef typename Type::RealScalar RealScalar; + typedef typename Type::CoeffReturnType CoeffReturnType; + typedef typename Type::PacketReturnType PacketReturnType; +}; + +template <typename Expression, size_t N> +struct PlaceHolder<TensorForcedEvalOp<Expression>, N> { + static constexpr size_t I = N; + + using Type = TensorForcedEvalOp<Expression>; + + typedef typename Type::Nested Nested; + typedef typename Type::StorageKind StorageKind; + typedef typename Type::Index Index; + + typedef typename Type::Scalar Scalar; + typedef typename Type::Packet Packet; + + typedef typename Type::RealScalar RealScalar; + typedef typename Type::CoeffReturnType CoeffReturnType; + typedef typename Type::PacketReturnType PacketReturnType; +}; + +/// \brief specialisation of the PlaceHolder node for const TensorMap +template <typename PlainObjectType, int Options_, + template <class> class Makepointer_, size_t N> +struct PlaceHolder<TensorMap<PlainObjectType, Options_, Makepointer_>, N> { + static constexpr size_t I = N; + + using Type = TensorMap<PlainObjectType, Options_, Makepointer_>; + + typedef typename Type::Self Self; + typedef typename Type::Base Base; + typedef typename Type::Nested Nested; + typedef typename Type::StorageKind StorageKind; + typedef typename Type::Index Index; + typedef typename Type::Scalar Scalar; + typedef typename Type::Packet Packet; + typedef typename Type::RealScalar RealScalar; + typedef typename Type::CoeffReturnType CoeffReturnType; + typedef typename Base::PacketReturnType PacketReturnType; +}; + +/// specialisation of the traits struct for PlaceHolder +template <typename PlainObjectType, int Options_, + template <class> class Makepointer_, size_t N> +struct traits< + PlaceHolder<TensorMap<PlainObjectType, Options_, Makepointer_>, N>> + : public traits<PlainObjectType> { + typedef traits<PlainObjectType> BaseTraits; + typedef typename BaseTraits::Scalar Scalar; + typedef typename BaseTraits::StorageKind StorageKind; + typedef typename BaseTraits::Index Index; + static const int NumDimensions = BaseTraits::NumDimensions; + static const int Layout = BaseTraits::Layout; + enum { + Options = Options_, + Flags = BaseTraits::Flags, + }; +}; + +template <typename PlainObjectType, int Options_, + template <class> class Makepointer_, size_t N> +struct traits< + PlaceHolder<const TensorMap<PlainObjectType, Options_, Makepointer_>, N>> + : public traits<PlainObjectType> { + typedef traits<PlainObjectType> BaseTraits; + typedef typename BaseTraits::Scalar Scalar; + typedef typename BaseTraits::StorageKind StorageKind; + typedef typename BaseTraits::Index Index; + static const int NumDimensions = BaseTraits::NumDimensions; + static const int Layout = BaseTraits::Layout; + enum { + Options = Options_, + Flags = BaseTraits::Flags, + }; +}; + +} // end namespoace internal +} // end namespoace Eigen + +#endif // UNSUPPORTED_EIGEN_CXX11_SRC_TENSORYSYCL_PLACEHOLDER_HPP |