53 lines
1.3 KiB
C++
53 lines
1.3 KiB
C++
//
|
|
// php-armadillo/shared_methods.cc
|
|
//
|
|
// @Author CismonX
|
|
//
|
|
|
|
#include "shared_methods.hh"
|
|
#include "mapval.hh"
|
|
#include "diagonal.hh"
|
|
|
|
namespace php_arma
|
|
{
|
|
template <typename T, typename ChildT>
|
|
PHP_ARMA_METHOD(linear_element_acccess, __invoke, T, ChildT)
|
|
{
|
|
zend_long i;
|
|
ZEND_PARSE_PARAMETERS_START(1, 1)
|
|
Z_PARAM_LONG(i)
|
|
ZEND_PARSE_PARAMETERS_END();
|
|
|
|
auto native = THIS_NATIVE;
|
|
auto parent = get_parent_zval<ChildT>(&EX(This));
|
|
|
|
zend_object *zobj;
|
|
try {
|
|
zobj = mapval_dense<T>::create(parent, &native->operator()(i));
|
|
} catch (const std::logic_error& err) {
|
|
// Index out of bounds.
|
|
throw_exception(err.what());
|
|
return;
|
|
}
|
|
|
|
RETVAL_OBJ(zobj);
|
|
}
|
|
|
|
template <typename T, typename ChildT>
|
|
PHP_ARMA_METHOD(linear_element_acccess, at, T, ChildT)
|
|
{
|
|
zend_long i;
|
|
ZEND_PARSE_PARAMETERS_START(1, 1)
|
|
Z_PARAM_LONG(i)
|
|
ZEND_PARSE_PARAMETERS_END();
|
|
|
|
auto native = THIS_NATIVE;
|
|
auto parent = get_parent_zval<ChildT>(&EX(This));
|
|
|
|
auto zobj = mapval_dense<T>::create(parent, &native->operator[](i));
|
|
RETVAL_OBJ(zobj);
|
|
}
|
|
|
|
PHP_ARMA_INSTANTIATE(linear_element_acccess, diagview);
|
|
}
|