53 lines
1.3 KiB
C++
53 lines
1.3 KiB
C++
//
|
|
// php-armadillo/linear_element_access.cc
|
|
//
|
|
// @Author CismonX
|
|
//
|
|
|
|
#include "linear_element_access.hh"
|
|
#include "mapval.hh"
|
|
#include "diagonal.hh"
|
|
|
|
namespace php_arma
|
|
{
|
|
template <typename T, typename ChildT>
|
|
PHP_ARMA_METHOD(linear_element_access, __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_access, 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_access, diagview);
|
|
}
|