rotgen/include/rotgen/detail/product.hpp
Joel Falcou 95524402db Fix product proxy internals
See merge request oss/rotgen!53
2026-01-02 22:47:55 +01:00

57 lines
1.7 KiB
C++

//==================================================================================================
/*
ROTGEN - Runtime Overlay for Eigen
Copyright : CODE RECKONS
SPDX-License-Identifier: BSL-1.0
*/
//==================================================================================================
#pragma once
#include <rotgen/detail/helpers.hpp>
#include <rotgen/container/matrix.hpp>
namespace rotgen
{
// Emulate EIGEN 1x1 pseudo product type
template<typename M> struct product
{
using rotgen_tag = void;
using value_type = typename M::value_type;
using concrete_type = matrix<value_type, 1, 1>;
static constexpr auto storage_order = concrete_type::storage_order;
static constexpr int RowsAtCompileTime = 1;
static constexpr int ColsAtCompileTime = 1;
static constexpr int SizeAtCompileTime = 1;
static constexpr int MaxRowsAtCompileTime = 1;
static constexpr int MaxColsAtCompileTime = 1;
static constexpr bool IsVectorAtCompileTime =
concrete_type::IsVectorAtCompileTime;
product(M const& m) : storage_(m) {}
auto size() const { return storage_.size(); }
auto _rows() const { return storage_._rows(); }
auto _cols() const { return storage_._cols(); }
auto operator()(int i) const { return storage_(i); }
auto operator[](int i) const { return storage_(i); }
auto operator()(int r, int c) const { return storage_(r, c); }
auto _sum() const { return storage_._sum(); }
auto const& base() const { return storage_.base(); }
operator value_type const() const { return storage_(0); }
operator concrete_type() const { return storage_; }
concrete_type storage_;
};
}