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/linear_element_access.cc

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