67 lines
2.4 KiB
C++
67 lines
2.4 KiB
C++
//
|
|
// php-armadillo/diagonal.cc
|
|
//
|
|
// @Author CismonX
|
|
//
|
|
|
|
#include "diagonal.hh"
|
|
#include "base.hh"
|
|
#include "non_resizable.hh"
|
|
#include "subview.hh"
|
|
#include "dense.hh"
|
|
// #include "sparse.hh"
|
|
|
|
namespace php_arma
|
|
{
|
|
template <typename T, bool B>
|
|
PHP_ARMA_START_ME(diagonal, T, B)
|
|
PHP_ARMA_ME_EX(linear, __invoke, ZEND_ACC_PUBLIC | ZEND_ACC_CALL_VIA_HANDLER)
|
|
PHP_ARMA_ME_EX(linear, at, ZEND_ACC_PUBLIC)
|
|
PHP_ARMA_END_ME();
|
|
|
|
template <typename T, bool IsSparse>
|
|
void diagonal<T, IsSparse>::ce_init(zend_class_entry *parent_ce)
|
|
{
|
|
// TODO: edit this line when sparse is added.
|
|
using parent_t = std::conditional_t<IsSparse, dense<T, diagonal>, dense<T, diagonal>>;
|
|
|
|
ce = class_register<php_name::val>(parent_ce, fentry_list_concat(
|
|
PHP_ARMA_FENTRY((base <T, diagonal>::me)),
|
|
PHP_ARMA_FENTRY((parent_t ::me)),
|
|
PHP_ARMA_FENTRY((non_resizable<T, diagonal>::me)),
|
|
PHP_ARMA_FENTRY((subview <T, diagonal>::me)),
|
|
PHP_ARMA_FENTRY(me)
|
|
));
|
|
ce->create_object = object_non_constructible;
|
|
declare_subview_parent(ce);
|
|
|
|
object_handlers_init(&handlers);
|
|
handlers.offset = sizeof(native_t);
|
|
handlers.clone_obj = nullptr;
|
|
handlers.count_elements = base<T, diagonal>::count_elements;
|
|
}
|
|
|
|
PHP_ARMA_NAME_DECLARE(diagview, "DDiagView", double);
|
|
PHP_ARMA_NAME_DECLARE(diagview, "IDiagView", zend_long);
|
|
PHP_ARMA_NAME_DECLARE(diagview, "CxDDiagView", cx_double);
|
|
|
|
PHP_ARMA_NAME_DECLARE(spdiagview, "SpDDiagView", double);
|
|
PHP_ARMA_NAME_DECLARE(spdiagview, "SpIDiagView", zend_long);
|
|
PHP_ARMA_NAME_DECLARE(spdiagview, "SpCxDDiagView", cx_double);
|
|
|
|
void diagonal_init()
|
|
{
|
|
diagonal_ce = interface_register<diagonal_php_name>(base_ce, non_resizable_ce, subview_ce);
|
|
|
|
diagview_ce = abstract_class_register<diagview_php_name>(diagonal_ce, dense_ce);
|
|
diagview<double >::ce_init(diagview_ce);
|
|
diagview<zend_long>::ce_init(diagview_ce);
|
|
diagview<cx_double>::ce_init(diagview_ce);
|
|
|
|
// spdiagview_ce = abstract_class_register<spdiagview_php_name>(diagonal_ce, sparse_ce);
|
|
// spdiagview<double >::ce_init(spdiagview_ce);
|
|
// spdiagview<zend_long>::ce_init(spdiagview_ce);
|
|
// spdiagview<cx_double>::ce_init(spdiagview_ce);
|
|
}
|
|
}
|