This repository has been archived on 2020-06-07. You can view files and clone it, but cannot push or open issues or pull requests.
php-armadillo/src/diagonal.cc

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);
}
}