86 lines
2.7 KiB
C++
86 lines
2.7 KiB
C++
//
|
|
// php-armadillo/mapval.cc
|
|
//
|
|
// @Author CismonX
|
|
//
|
|
|
|
#include "mapval.hh"
|
|
#include "complex.hh"
|
|
|
|
#include <armadillo>
|
|
|
|
namespace php_arma
|
|
{
|
|
template <typename T, bool B1, bool B2>
|
|
PHP_ARMA_METHOD(mapval, val, T, B1, B2)
|
|
{
|
|
auto current = Z_OBJ(EX(This));
|
|
zval_set_scalar(return_value, get_val(current));
|
|
}
|
|
|
|
template <typename T, bool B1, bool B2>
|
|
PHP_ARMA_METHOD(mapval, setTo, T, B1, B2)
|
|
{
|
|
zval *val;
|
|
ZEND_PARSE_PARAMETERS_START(1, 1)
|
|
Z_PARAM_ZVAL(val)
|
|
ZEND_PARSE_PARAMETERS_END();
|
|
|
|
if (!zval_check_scalar<T>(val)) {
|
|
return;
|
|
}
|
|
|
|
auto current = Z_OBJ(EX(This));
|
|
set_val(current, zval_get_scalar<T>(val));
|
|
}
|
|
|
|
template <typename T, bool B1, bool B2>
|
|
PHP_ARMA_START_ME(mapval, T, B1, B2)
|
|
PHP_ARMA_ME(val, ZEND_ACC_PUBLIC)
|
|
PHP_ARMA_ME(setTo, ZEND_ACC_PUBLIC)
|
|
PHP_ARMA_END_ME();
|
|
|
|
template <typename T, bool B1, bool B2>
|
|
zend_always_inline
|
|
void mapval<T, B1, B2>::ce_init(zend_class_entry *parent_ce)
|
|
{
|
|
ce = class_register<php_name::val>(parent_ce, me);
|
|
ce->create_object = object_non_constructible;
|
|
object_handlers_init(&handlers);
|
|
handlers.offset = sizeof(native_t);
|
|
handlers.clone_obj = nullptr;
|
|
}
|
|
|
|
PHP_ARMA_NAME_DECLARE(mapval_dense, "DMapVal", double);
|
|
PHP_ARMA_NAME_DECLARE(mapval_dense, "IMapVal", zend_long);
|
|
PHP_ARMA_NAME_DECLARE(mapval_dense, "CxDMapVal", cx_double);
|
|
|
|
PHP_ARMA_NAME_DECLARE(mapval_spmat, "SpDMapVal", double);
|
|
PHP_ARMA_NAME_DECLARE(mapval_spmat, "SpIMapVal", zend_long);
|
|
PHP_ARMA_NAME_DECLARE(mapval_spmat, "SpCxDMapVal", cx_double);
|
|
|
|
PHP_ARMA_NAME_DECLARE(mapval_sp_subview, "SpSvDMapVal", double);
|
|
PHP_ARMA_NAME_DECLARE(mapval_sp_subview, "SpSvIMapVal", zend_long);
|
|
PHP_ARMA_NAME_DECLARE(mapval_sp_subview, "SpSvCxDMapVal", cx_double);
|
|
|
|
void mapval_init()
|
|
{
|
|
scalar_ce = interface_register<scalar_php_name>();
|
|
|
|
mapval_ce = abstract_class_register<mapval_php_name>(scalar_ce);
|
|
mapval_dense<double >::ce_init(mapval_ce);
|
|
mapval_dense<zend_long>::ce_init(mapval_ce);
|
|
mapval_dense<cx_double>::ce_init(mapval_ce);
|
|
|
|
sp_mapval_ce = abstract_class_register<sp_mapval_php_name>(scalar_ce);
|
|
mapval_spmat<double >::ce_init(sp_mapval_ce);
|
|
mapval_spmat<zend_long>::ce_init(sp_mapval_ce);
|
|
mapval_spmat<cx_double>::ce_init(sp_mapval_ce);
|
|
|
|
spsv_mapval_ce = abstract_class_register<spsv_mapval_php_name>(scalar_ce);
|
|
mapval_sp_subview<double >::ce_init(spsv_mapval_ce);
|
|
mapval_sp_subview<zend_long>::ce_init(spsv_mapval_ce);
|
|
mapval_sp_subview<cx_double>::ce_init(spsv_mapval_ce);
|
|
}
|
|
}
|