WPILibC++ 2023.4.3
ArrayBase.h
Go to the documentation of this file.
1// This file is part of Eigen, a lightweight C++ template library
2// for linear algebra.
3//
4// Copyright (C) 2009 Gael Guennebaud <gael.guennebaud@inria.fr>
5//
6// This Source Code Form is subject to the terms of the Mozilla
7// Public License v. 2.0. If a copy of the MPL was not distributed
8// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
9
10#ifndef EIGEN_ARRAYBASE_H
11#define EIGEN_ARRAYBASE_H
12
13namespace Eigen {
14
15template<typename ExpressionType> class MatrixWrapper;
16
17/** \class ArrayBase
18 * \ingroup Core_Module
19 *
20 * \brief Base class for all 1D and 2D array, and related expressions
21 *
22 * An array is similar to a dense vector or matrix. While matrices are mathematical
23 * objects with well defined linear algebra operators, an array is just a collection
24 * of scalar values arranged in a one or two dimensionnal fashion. As the main consequence,
25 * all operations applied to an array are performed coefficient wise. Furthermore,
26 * arrays support scalar math functions of the c++ standard library (e.g., std::sin(x)), and convenient
27 * constructors allowing to easily write generic code working for both scalar values
28 * and arrays.
29 *
30 * This class is the base that is inherited by all array expression types.
31 *
32 * \tparam Derived is the derived type, e.g., an array or an expression type.
33 *
34 * This class can be extended with the help of the plugin mechanism described on the page
35 * \ref TopicCustomizing_Plugins by defining the preprocessor symbol \c EIGEN_ARRAYBASE_PLUGIN.
36 *
37 * \sa class MatrixBase, \ref TopicClassHierarchy
38 */
39template<typename Derived> class ArrayBase
40 : public DenseBase<Derived>
41{
42 public:
43#ifndef EIGEN_PARSED_BY_DOXYGEN
44 /** The base class for a given storage type. */
46
48
53
62 using Base::Flags;
63
64 using Base::derived;
65 using Base::const_cast_derived;
66 using Base::rows;
67 using Base::cols;
68 using Base::size;
69 using Base::coeff;
70 using Base::coeffRef;
71 using Base::lazyAssign;
72 using Base::operator-;
73 using Base::operator=;
74 using Base::operator+=;
75 using Base::operator-=;
76 using Base::operator*=;
77 using Base::operator/=;
78
80
81#endif // not EIGEN_PARSED_BY_DOXYGEN
82
83#ifndef EIGEN_PARSED_BY_DOXYGEN
85
86 /** \internal Represents a matrix with all coefficients equal to one another*/
88#endif // not EIGEN_PARSED_BY_DOXYGEN
89
90#define EIGEN_CURRENT_STORAGE_BASE_CLASS Eigen::ArrayBase
91#define EIGEN_DOC_UNARY_ADDONS(X,Y)
92# include "../plugins/MatrixCwiseUnaryOps.h"
93# include "../plugins/ArrayCwiseUnaryOps.h"
94# include "../plugins/CommonCwiseBinaryOps.h"
95# include "../plugins/MatrixCwiseBinaryOps.h"
96# include "../plugins/ArrayCwiseBinaryOps.h"
97# ifdef EIGEN_ARRAYBASE_PLUGIN
98# include EIGEN_ARRAYBASE_PLUGIN
99# endif
100#undef EIGEN_CURRENT_STORAGE_BASE_CLASS
101#undef EIGEN_DOC_UNARY_ADDONS
102
103 /** Special case of the template operator=, in order to prevent the compiler
104 * from generating a default operator= (issue hit with g++ 4.1)
105 */
107 Derived& operator=(const ArrayBase& other)
108 {
109 internal::call_assignment(derived(), other.derived());
110 return derived();
111 }
112
113 /** Set all the entries to \a value.
114 * \sa DenseBase::setConstant(), DenseBase::fill() */
116 Derived& operator=(const Scalar &value)
117 { Base::setConstant(value); return derived(); }
118
120 Derived& operator+=(const Scalar& scalar);
122 Derived& operator-=(const Scalar& scalar);
123
124 template<typename OtherDerived>
126 Derived& operator+=(const ArrayBase<OtherDerived>& other);
127 template<typename OtherDerived>
129 Derived& operator-=(const ArrayBase<OtherDerived>& other);
130
131 template<typename OtherDerived>
133 Derived& operator*=(const ArrayBase<OtherDerived>& other);
134
135 template<typename OtherDerived>
137 Derived& operator/=(const ArrayBase<OtherDerived>& other);
138
139 public:
141 ArrayBase<Derived>& array() { return *this; }
143 const ArrayBase<Derived>& array() const { return *this; }
144
145 /** \returns an \link Eigen::MatrixBase Matrix \endlink expression of this array
146 * \sa MatrixBase::array() */
151
152// template<typename Dest>
153// inline void evalTo(Dest& dst) const { dst = matrix(); }
154
155 protected:
158
159 private:
160 explicit ArrayBase(Index);
162 template<typename OtherDerived> explicit ArrayBase(const ArrayBase<OtherDerived>&);
163 protected:
164 // mixing arrays and matrices is not legal
165 template<typename OtherDerived> Derived& operator+=(const MatrixBase<OtherDerived>& )
166 {EIGEN_STATIC_ASSERT(std::ptrdiff_t(sizeof(typename OtherDerived::Scalar))==-1,YOU_CANNOT_MIX_ARRAYS_AND_MATRICES); return *this;}
167 // mixing arrays and matrices is not legal
168 template<typename OtherDerived> Derived& operator-=(const MatrixBase<OtherDerived>& )
169 {EIGEN_STATIC_ASSERT(std::ptrdiff_t(sizeof(typename OtherDerived::Scalar))==-1,YOU_CANNOT_MIX_ARRAYS_AND_MATRICES); return *this;}
170};
171
172/** replaces \c *this by \c *this - \a other.
173 *
174 * \returns a reference to \c *this
175 */
176template<typename Derived>
177template<typename OtherDerived>
180{
182 return derived();
183}
184
185/** replaces \c *this by \c *this + \a other.
186 *
187 * \returns a reference to \c *this
188 */
189template<typename Derived>
190template<typename OtherDerived>
193{
195 return derived();
196}
197
198/** replaces \c *this by \c *this * \a other coefficient wise.
199 *
200 * \returns a reference to \c *this
201 */
202template<typename Derived>
203template<typename OtherDerived>
206{
208 return derived();
209}
210
211/** replaces \c *this by \c *this / \a other coefficient wise.
212 *
213 * \returns a reference to \c *this
214 */
215template<typename Derived>
216template<typename OtherDerived>
219{
221 return derived();
222}
223
224} // end namespace Eigen
225
226#endif // EIGEN_ARRAYBASE_H
#define EIGEN_DEFAULT_COPY_CONSTRUCTOR(CLASS)
Definition: Macros.h:1231
#define EIGEN_DEFAULT_EMPTY_CONSTRUCTOR_AND_DESTRUCTOR(Derived)
Definition: Macros.h:1257
#define EIGEN_DEVICE_FUNC
Definition: Macros.h:986
#define EIGEN_STRONG_INLINE
Definition: Macros.h:927
#define EIGEN_STATIC_ASSERT(CONDITION, MSG)
Definition: StaticAssert.h:127
Base class for all 1D and 2D array, and related expressions.
Definition: ArrayBase.h:41
EIGEN_DEVICE_FUNC MatrixWrapper< Derived > matrix()
Definition: ArrayBase.h:148
CwiseNullaryOp< internal::scalar_constant_op< Scalar >, PlainObject > ConstantReturnType
Definition: ArrayBase.h:87
DenseBase< Derived > Base
Definition: ArrayBase.h:54
EIGEN_DEVICE_FUNC const ArrayBase< Derived > & array() const
Definition: ArrayBase.h:143
Derived & operator-=(const MatrixBase< OtherDerived > &)
Definition: ArrayBase.h:168
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived & operator+=(const Scalar &scalar)
Definition: SelfCwiseBinaryOp.h:25
ArrayBase Eigen_BaseClassForSpecializationOfGlobalMathFuncImpl
Definition: ArrayBase.h:47
NumTraits< Scalar >::Real RealScalar
Definition: ArrayBase.h:52
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived & operator*=(const ArrayBase< OtherDerived > &other)
replaces *this by *this * other coefficient wise.
Definition: ArrayBase.h:205
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived & operator=(const ArrayBase &other)
Special case of the template operator=, in order to prevent the compiler from generating a default op...
Definition: ArrayBase.h:107
Base::PlainObject PlainObject
Definition: ArrayBase.h:84
Derived & operator+=(const MatrixBase< OtherDerived > &)
Definition: ArrayBase.h:165
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived & operator-=(const Scalar &scalar)
Definition: SelfCwiseBinaryOp.h:32
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived & operator-=(const ArrayBase< OtherDerived > &other)
replaces *this by *this - other.
Definition: ArrayBase.h:179
internal::traits< Derived >::StorageKind StorageKind
Definition: ArrayBase.h:49
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived & operator=(const Scalar &value)
Set all the entries to value.
Definition: ArrayBase.h:116
ArrayBase StorageBaseType
The base class for a given storage type.
Definition: ArrayBase.h:45
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived & operator/=(const ArrayBase< OtherDerived > &other)
replaces *this by *this / other coefficient wise.
Definition: ArrayBase.h:218
internal::packet_traits< Scalar >::type PacketScalar
Definition: ArrayBase.h:51
internal::traits< Derived >::Scalar Scalar
Definition: ArrayBase.h:50
Base::CoeffReturnType CoeffReturnType
Definition: ArrayBase.h:79
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived & operator+=(const ArrayBase< OtherDerived > &other)
replaces *this by *this + other.
Definition: ArrayBase.h:192
EIGEN_DEVICE_FUNC const MatrixWrapper< const Derived > matrix() const
Definition: ArrayBase.h:150
EIGEN_DEVICE_FUNC ArrayBase< Derived > & array()
Definition: ArrayBase.h:141
Generic expression of a matrix where all coefficients are defined by a functor.
Definition: CwiseNullaryOp.h:61
Base class for all dense matrices, vectors, and arrays.
Definition: DenseBase.h:47
EIGEN_DEVICE_FUNC Derived & setConstant(const Scalar &value)
Sets all coefficients in this expression to value val.
Definition: CwiseNullaryOp.h:345
Base::CoeffReturnType CoeffReturnType
Definition: DenseBase.h:96
internal::traits< Derived >::Scalar Scalar
The numeric type of the expression' coefficients, e.g.
Definition: DenseBase.h:66
EIGEN_DEPRECATED EIGEN_DEVICE_FUNC Derived & lazyAssign(const DenseBase< OtherDerived > &other)
@ IsVectorAtCompileTime
This is set to true if either the number of rows or the number of columns is known at compile-time to...
Definition: DenseBase.h:153
@ SizeAtCompileTime
This is equal to the number of coefficients, i.e.
Definition: DenseBase.h:113
@ MaxSizeAtCompileTime
This value is equal to the maximum possible number of coefficients that this expression might have.
Definition: DenseBase.h:141
@ Flags
This stores expression Flags flags which may or may not be inherited by new expressions constructed f...
Definition: DenseBase.h:165
@ ColsAtCompileTime
The number of columns at compile-time.
Definition: DenseBase.h:106
@ MaxColsAtCompileTime
This value is equal to the maximum possible number of columns that this expression might have.
Definition: DenseBase.h:130
@ MaxRowsAtCompileTime
This value is equal to the maximum possible number of rows that this expression might have.
Definition: DenseBase.h:119
@ RowsAtCompileTime
The number of rows at compile-time.
Definition: DenseBase.h:100
internal::conditional< internal::is_same< typenameinternal::traits< Derived >::XprKind, MatrixXpr >::value, PlainMatrix, PlainArray >::type PlainObject
The plain matrix or array type corresponding to this expression.
Definition: DenseBase.h:210
Base class for all dense matrices, vectors, and expressions.
Definition: MatrixBase.h:50
Expression of an array as a mathematical vector or matrix.
Definition: ArrayWrapper.h:141
Definition: core.h:1240
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void call_assignment(Dst &dst, const Src &src)
Definition: AssignEvaluator.h:834
EIGEN_CONSTEXPR Index size(const T &x)
Definition: Meta.h:479
Namespace containing all symbols from the Eigen library.
Definition: MatrixExponential.h:16
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:74
unit< std::ratio< 1 >, units::category::scalar_unit > scalar
Definition: base.h:2510
Holds information about the various numeric (i.e.
Definition: NumTraits.h:233
Definition: AssignmentFunctors.h:46
Definition: AssignmentFunctors.h:110
Definition: AssignmentFunctors.h:89
T type
Definition: GenericPacketMath.h:108
Definition: AssignmentFunctors.h:67
Definition: ForwardDeclarations.h:17
Definition: Meta.h:96