33#ifndef GKO_PUBLIC_CORE_BASE_DIM_HPP_
34#define GKO_PUBLIC_CORE_BASE_DIM_HPP_
40#include <ginkgo/core/base/types.hpp>
54template <
size_type Dimensionality,
typename DimensionType =
size_type>
57 friend struct dim<dimensionality + 1>;
66 constexpr GKO_ATTRIBUTES
dim(
const dimension_type& size = dimension_type{})
67 : first_{size}, rest_{size}
83 template <
typename...
Rest>
84 constexpr GKO_ATTRIBUTES
dim(
const dimension_type& first,
103 return GKO_ASSERT(
dimension < dimensionality),
113 return GKO_ASSERT(
dimension < dimensionality),
128 explicit constexpr GKO_ATTRIBUTES
operator bool()
const
130 return static_cast<bool>(first_) &&
static_cast<bool>(rest_);
143 return x.first_ == y.first_ && x.rest_ == y.rest_;
156 return dim(x.first_ * y.first_, x.rest_ * y.rest_);
176 void inline print_to(std::ostream&
os)
const
178 os << first_ <<
", ";
183 constexpr GKO_ATTRIBUTES
dim(
const dimension_type first,
185 : first_{first}, rest_{
rest}
188 dimension_type first_;
189 dim<dimensionality - 1, dimension_type> rest_;
194template <
typename DimensionType>
196 static constexpr size_type dimensionality = 1u;
197 friend struct dim<2>;
201 constexpr GKO_ATTRIBUTES
dim(
const dimension_type& size = dimension_type{})
205 constexpr GKO_ATTRIBUTES
const dimension_type&
operator[](
208 return GKO_ASSERT(
dimension == 0), first_;
213 return GKO_ASSERT(
dimension == 0), first_;
216 explicit constexpr GKO_ATTRIBUTES
operator bool()
const
218 return static_cast<bool>(first_);
223 return x.first_ == y.first_;
228 return dim(x.first_ * y.first_);
240 void inline print_to(std::ostream&
os)
const {
os << first_; }
242 dimension_type first_;
257template <
size_type Dimensionality,
typename DimensionType>
275template <
typename DimensionType>
The Ginkgo namespace.
Definition abstract_factory.hpp:48
constexpr T one()
Returns the multiplicative identity for T.
Definition math.hpp:803
constexpr bool operator!=(const dim< Dimensionality, DimensionType > &x, const dim< Dimensionality, DimensionType > &y)
Checks if two dim objects are different.
Definition dim.hpp:258
std::size_t size_type
Integral type used for allocation quantities.
Definition types.hpp:120
batch_dim< 2, DimensionType > transpose(const batch_dim< 2, DimensionType > &input)
Returns a batch_dim object with its dimensions swapped for batched operators.
Definition batch_dim.hpp:148
A type representing the dimensions of a multidimensional object.
Definition dim.hpp:55
constexpr dim(const dimension_type &first, const Rest &... rest)
Creates a dimension object with the specified dimensions.
Definition dim.hpp:84
friend constexpr dim operator*(const dim &x, const dim &y)
Multiplies two dim objects.
Definition dim.hpp:154
friend constexpr bool operator==(const dim &x, const dim &y)
Checks if two dim objects are equal.
Definition dim.hpp:141
friend std::ostream & operator<<(std::ostream &os, const dim &x)
A stream operator overload for dim.
Definition dim.hpp:167
constexpr dim(const dimension_type &size=dimension_type{})
Creates a dimension object with all dimensions set to the same value.
Definition dim.hpp:66
constexpr const dimension_type & operator[](const size_type &dimension) const noexcept
Returns the requested dimension.
Definition dim.hpp:100
dimension_type & operator[](const size_type &dimension) noexcept
Definition dim.hpp:110