75 lines
2.8 KiB
C++
75 lines
2.8 KiB
C++
//==================================================================================================
|
|
/*
|
|
ROTGEN - Runtime Overlay for Eigen
|
|
Copyright : CODE RECKONS
|
|
SPDX-License-Identifier: BSL-1.0
|
|
*/
|
|
//==================================================================================================
|
|
#pragma once
|
|
|
|
#include <cstddef>
|
|
#include <memory>
|
|
#include <rotgen/impl/matrix.hpp>
|
|
#include <Eigen/Dense>
|
|
|
|
namespace rotgen
|
|
{
|
|
//==================================================================================================
|
|
// Internal payload - Requried for cross-referencing from block_impl*
|
|
//==================================================================================================
|
|
struct matrix_impl64_col::payload
|
|
{
|
|
using data_type = Eigen::Matrix<double,Eigen::Dynamic,Eigen::Dynamic,Eigen::ColMajor>;
|
|
|
|
data_type data;
|
|
payload(std::size_t r=0, std::size_t c=0) : data(r, c) {}
|
|
payload(std::initializer_list<std::initializer_list<double>> init) : data(init) {}
|
|
payload(data_type&& matrix) : data(std::move(matrix)) {}
|
|
|
|
void assign(Eigen::Block<data_type> ref) { data = ref; }
|
|
void assign(data_type const& mat) { data = mat; }
|
|
void assign(data_type&& mat) { data = std::move(mat); }
|
|
};
|
|
|
|
struct matrix_impl64_row::payload
|
|
{
|
|
using data_type = Eigen::Matrix<double,Eigen::Dynamic,Eigen::Dynamic,Eigen::RowMajor>;
|
|
|
|
data_type data;
|
|
payload(std::size_t r=0, std::size_t c=0) : data(r, c) {}
|
|
payload(std::initializer_list<std::initializer_list<double>> init) : data(init) {}
|
|
payload(data_type&& matrix) : data(std::move(matrix)) {}
|
|
|
|
void assign(Eigen::Block<data_type> ref) { data = ref; }
|
|
void assign(data_type const& mat) { data = mat; }
|
|
void assign(data_type&& mat) { data = std::move(mat); }
|
|
};
|
|
|
|
struct matrix_impl32_col::payload
|
|
{
|
|
using data_type = Eigen::Matrix<float,Eigen::Dynamic,Eigen::Dynamic,Eigen::ColMajor>;
|
|
|
|
data_type data;
|
|
payload(std::size_t r=0, std::size_t c=0) : data(r, c) {}
|
|
payload(std::initializer_list<std::initializer_list<float>> init) : data(init) {}
|
|
payload(data_type&& matrix) : data(std::move(matrix)) {}
|
|
|
|
void assign(Eigen::Block<data_type> ref) { data = ref; }
|
|
void assign(data_type const& mat) { data = mat; }
|
|
void assign(data_type&& mat) { data = std::move(mat); }
|
|
};
|
|
|
|
struct matrix_impl32_row::payload
|
|
{
|
|
using data_type = Eigen::Matrix<float,Eigen::Dynamic,Eigen::Dynamic,Eigen::RowMajor>;
|
|
|
|
data_type data;
|
|
payload(std::size_t r=0, std::size_t c=0) : data(r, c) {}
|
|
payload(std::initializer_list<std::initializer_list<float>> init) : data(init) {}
|
|
payload(data_type&& matrix) : data(std::move(matrix)) {}
|
|
|
|
void assign(Eigen::Block<data_type> ref) { data = ref; }
|
|
void assign(data_type const& mat) { data = mat; }
|
|
void assign(data_type&& mat) { data = std::move(mat); }
|
|
};
|
|
}
|