Base class for any TensorOp that has only TensorLikes as children. More...
#include <TensorExpr.hpp>
Public Types | |
| using | ValueType = sp::value_type_or_common_t< Subtype, typename Children::ValueType... > | 
| using | Opts = typename sp::MergeTensorOpts< typename Children::Opts... >::type | 
  Public Types inherited from sp::Operator< Subtype, Children... > | |
| using | Traits = f::Traits< void > | 
Public Member Functions | |
| TensorTensorOp (Children... args) | |
| auto | dimsImpl () const | 
Delegate dims() to the first subexpression. A helpful default.  More... | |
| int | totalSizeImpl () const | 
Delegate totalSize() to the first child.  More... | |
  Public Member Functions inherited from sp::TensorOp< Subtype, ExprRank, Children... > | |
| constexpr | TensorOp (Children... args) | 
  Public Member Functions inherited from sp::Operator< Subtype, Children... > | |
| constexpr auto & | child () | 
| Access children.  More... | |
| constexpr const auto & | child () const | 
| constexpr auto & | lhs () | 
| Get the first subexpression if this is a binary operation.  More... | |
| constexpr const auto & | lhs () const | 
| constexpr auto & | rhs () | 
| Get the second subexpression if this is a binary operation.  More... | |
| constexpr const auto & | rhs () const | 
| constexpr void | forEachChild (F &lambda) | 
| Run a lambda function on each child.  More... | |
  Public Member Functions inherited from sp::TensorLike< Subtype, ExprRank==INHERIT_RANK ? sp::deduce_rank_v< __type_pack_element< 0, Children... > > :ExprRank > | |
| auto | dims () const | 
| bool | boundsCheck (const Vec< int, Rank > &pos) const | 
| auto | vectorRead (const Vec< int, Rank > &pos) const | 
| auto | vectorOffsetRead (const Vec< int, Rank > &base, const Vec< int, Rank > &offset) const | 
| auto | maskedVectorRead (const Vec< int, Rank > &pos) const | 
| void | vectorWrite (const Vec< int, Rank > &pos, const Vec< T, L > &values) | 
| void | maskedVectorWrite (const Vec< int, Rank > &pos, const Vec< T, L > &values) | 
| int | sizeQuantisation () const | 
| int | totalSize () const | 
Get the total memory occupied by the Tensor, in terms of elements.  More... | |
| auto | getView (const sp::Vec< int, Rank > &start, const sp::Vec< int, Rank > &size) | 
| Get an object that represents (and aliases) a portion of this object.  More... | |
| int | dim (int d) const | 
| Behaviour common to all TensorLikes ///.  More... | |
| auto | read (const Vec< int, Rank > &pos) const | 
| Get the element at a given position.  More... | |
| void | write (const Vec< int, Rank > &pos, const T &value) | 
| Set a single element.  More... | |
| int | size () const | 
| void | boundsCheckAccess (Vec< int, Rank > pos) const | 
Bounds-check an L-element vector read at pos.  More... | |
Static Public Attributes | |
| static constexpr int | Arity = sizeof...(Children) | 
| static constexpr int | MaxVectorSize = sp::min(Children::MaxVectorSize...) | 
  Static Public Attributes inherited from sp::Operator< Subtype, Children... > | |
| static constexpr int | Arity | 
  Static Public Attributes inherited from sp::TensorLike< Subtype, ExprRank==INHERIT_RANK ? sp::deduce_rank_v< __type_pack_element< 0, Children... > > :ExprRank > | |
| constexpr static int | Rank | 
Additional Inherited Members | |
  Static Public Member Functions inherited from sp::Operator< Subtype, Children... > | |
| constexpr static bool | commutative () | 
| constexpr static bool | associative () | 
| constexpr static bool | total () | 
| constexpr static bool | hasIdentity () | 
| constexpr static bool | invertible () | 
| constexpr static auto | getIdentityImpl () | 
| constexpr static auto | getIdentity () | 
  Protected Member Functions inherited from sp::Operator< Subtype, Children... > | |
| constexpr | Operator (Children... args) | 
| constexpr void | forEachChild (F &lambda, sp::int_sequence< I... > &) | 
  Protected Member Functions inherited from sp::TensorLike< Subtype, ExprRank==INHERIT_RANK ? sp::deduce_rank_v< __type_pack_element< 0, Children... > > :ExprRank > | |
| auto | dimsImpl () const | 
Get an sp::Vec<int, X> representing the dimensions of the object.  More... | |
| bool | boundsCheckImpl (const sp::Vec< int, Rank > &) const | 
| Return true iff the given coordinates are inside the object (Default implementation below)  More... | |
| int | sizeQuantisationImpl () const | 
| The last dimension is rounded up to the next multiple of this value for the purposes of bounds checks.  More... | |
| auto | vectorReadImpl (const Vec< int, Rank > &) const | 
| Read L elements, adjacent in the last dimension, starting at the given position.  More... | |
| auto | vectorOffsetReadImpl (const Vec< int, Rank > &base, const Vec< int, Rank > &offset) const | 
Read L elements, adjacent in the last dimension, from position base + offset.  More... | |
| auto | maskedVectorReadImpl (const Vec< int, Rank > &pos) const | 
| Do a vectorRead that copes with the possibility of part of the vector being out of bounds.  More... | |
| void | maskedVectorWriteImpl (const Vec< int, Rank > &pos, const Vec< T, L > &values) | 
| Do a vectorWrite that copes with the possibility of part of the vector being out of bounds.  More... | |
| void | vectorWriteImpl (const Vec< int, Rank > &pos, const Vec< T, L > &values) | 
| Write L elements, adjacent in the last dimension, starting at the given position.  More... | |
| auto | getViewImpl (const sp::Vec< int, Rank > &start, const sp::Vec< int, Rank > &size) | 
The default implementation just makes a TensorView. Not hugely fast, but always works.  More... | |
  Protected Attributes inherited from sp::Operator< Subtype, Children... > | |
| std::tuple< Children... > | children | 
Base class for any TensorOp that has only TensorLikes as children.
This provides some boilerplate-saving defaults for a few things, but is otherwise identical to TensorOp.
When implementing a new operator, you'll want to extend either this, EltwiseTensorOp (if your operator is an element-wise function of TensorLikes), or TensorOp (if your operator has non-TensorLike children, or is otherwise just a bit insane).
| Subtype | Curiously-recurring template type parameter. | 
| auto sp::TensorTensorOp< Subtype, ExprRank, Children >::dimsImpl | ( | ) | const | 
Delegate dims() to the first subexpression. A helpful default. 
| int sp::TensorTensorOp< Subtype, ExprRank, Children >::totalSizeImpl | ( | ) | const | 
Delegate totalSize() to the first child.