chromium/third_party/eigen3/src/Eigen/src/Core/DenseCoeffsBase.h

// This file is part of Eigen, a lightweight C++ template library
// for linear algebra.
//
// Copyright (C) 2006-2010 Benoit Jacob <[email protected]>
//
// 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/.

#ifndef EIGEN_DENSECOEFFSBASE_H
#define EIGEN_DENSECOEFFSBASE_H

// IWYU pragma: private
#include "./InternalHeaderCheck.h"

namespace Eigen {

namespace internal {
template <typename T>
struct add_const_on_value_type_if_arithmetic {};
}  // namespace internal

/** \brief Base class providing read-only coefficient access to matrices and arrays.
 * \ingroup Core_Module
 * \tparam Derived Type of the derived class
 *
 * \note #ReadOnlyAccessors Constant indicating read-only access
 *
 * This class defines the \c operator() \c const function and friends, which can be used to read specific
 * entries of a matrix or array.
 *
 * \sa DenseCoeffsBase<Derived, WriteAccessors>, DenseCoeffsBase<Derived, DirectAccessors>,
 *     \ref TopicClassHierarchy
 */
DenseCoeffsBase<Derived, ReadOnlyAccessors>;

/** \brief Base class providing read/write coefficient access to matrices and arrays.
 * \ingroup Core_Module
 * \tparam Derived Type of the derived class
 *
 * \note #WriteAccessors Constant indicating read/write access
 *
 * This class defines the non-const \c operator() function and friends, which can be used to write specific
 * entries of a matrix or array. This class inherits DenseCoeffsBase<Derived, ReadOnlyAccessors> which
 * defines the const variant for reading specific entries.
 *
 * \sa DenseCoeffsBase<Derived, DirectAccessors>, \ref TopicClassHierarchy
 */
DenseCoeffsBase<Derived, WriteAccessors>;

/** \brief Base class providing direct read-only coefficient access to matrices and arrays.
 * \ingroup Core_Module
 * \tparam Derived Type of the derived class
 *
 * \note #DirectAccessors Constant indicating direct access
 *
 * This class defines functions to work with strides which can be used to access entries directly. This class
 * inherits DenseCoeffsBase<Derived, ReadOnlyAccessors> which defines functions to access entries read-only using
 * \c operator() .
 *
 * \sa \blank \ref TopicClassHierarchy
 */
DenseCoeffsBase<Derived, DirectAccessors>;

/** \brief Base class providing direct read/write coefficient access to matrices and arrays.
 * \ingroup Core_Module
 * \tparam Derived Type of the derived class
 *
 * \note #DirectWriteAccessors Constant indicating direct access
 *
 * This class defines functions to work with strides which can be used to access entries directly. This class
 * inherits DenseCoeffsBase<Derived, WriteAccessors> which defines functions to access entries read/write using
 * \c operator().
 *
 * \sa \blank \ref TopicClassHierarchy
 */
DenseCoeffsBase<Derived, DirectWriteAccessors>;

namespace internal {

template <int Alignment, typename Derived, bool JustReturnZero>
struct first_aligned_impl {};

first_aligned_impl<Alignment, Derived, false>;

/** \internal \returns the index of the first element of the array stored by \a m that is properly aligned with respect
 * to \a Alignment for vectorization.
 *
 * \tparam Alignment requested alignment in Bytes.
 *
 * There is also the variant first_aligned(const Scalar*, Integer) defined in Memory.h. See it for more
 * documentation.
 */
template <int Alignment, typename Derived>
static inline Index first_aligned(const DenseBase<Derived>& m) {}

template <typename Derived>
static inline Index first_default_aligned(const DenseBase<Derived>& m) {}

template <typename Derived, bool HasDirectAccess = has_direct_access<Derived>::ret>
struct inner_stride_at_compile_time {};

inner_stride_at_compile_time<Derived, false>;

template <typename Derived, bool HasDirectAccess = has_direct_access<Derived>::ret>
struct outer_stride_at_compile_time {};

outer_stride_at_compile_time<Derived, false>;

}  // end namespace internal

}  // end namespace Eigen

#endif  // EIGEN_DENSECOEFFSBASE_H