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/dense_matrix.cc
2019-06-06 23:56:10 +08:00

169 lines
3.9 KiB
C++

//
// php-armadillo/dense_matrix.cc
//
// @Author CismonX
//
#include "dense_matrix.hh"
#include "dense.hh"
#include "matrix.hh"
#include "mapval.hh"
#include "mat.hh"
#include <armadillo>
namespace php_arma
{
template <typename T, typename T1>
PHP_ARMA_METHOD(dense_matrix, __invoke, T, T1)
{
zend_long i, j;
ZEND_PARSE_PARAMETERS_START(1, 2)
Z_PARAM_LONG_DEREF(i)
Z_PARAM_OPTIONAL
Z_PARAM_LONG_DEREF(j)
ZEND_PARSE_PARAMETERS_END();
auto native = THIS_NATIVE;
zend_object *zobj;
try {
if (EX_NUM_ARGS() == 1) {
zobj = mapval_dense<T>::create(&native->operator()(i));
} else {
zobj = mapval_dense<T>::create(&native->operator()(i, j));
}
} catch (const std::logic_error& err) {
zend_throw_exception(zend_ce_exception, "index out of bounds", 0);
return;
}
RETVAL_OBJ(zobj);
}
template <typename T, typename T1>
PHP_ARMA_METHOD(dense_matrix, at, T, T1)
{
zend_long i, j;
ZEND_PARSE_PARAMETERS_START(1, 2)
Z_PARAM_LONG_DEREF(i)
Z_PARAM_OPTIONAL
Z_PARAM_LONG_DEREF(j)
ZEND_PARSE_PARAMETERS_END();
auto native = THIS_NATIVE;
zend_object *zobj;
if (EX_NUM_ARGS() == 1) {
zobj = mapval_dense<T>::create(&native->at(i));
} else {
zobj = mapval_dense<T>::create(&native->at(i, j));
}
RETVAL_OBJ(zobj);
}
template <typename T, typename T1>
PHP_ARMA_METHOD(dense_matrix, col, T, T1)
{
}
template <typename T, typename T1>
PHP_ARMA_METHOD(dense_matrix, row, T, T1)
{
}
template <typename T, typename T1>
PHP_ARMA_METHOD(dense_matrix, cols, T, T1)
{
}
template <typename T, typename T1>
PHP_ARMA_METHOD(dense_matrix, rows, T, T1)
{
}
template <typename T, typename T1>
PHP_ARMA_METHOD(dense_matrix, submat, T, T1)
{
}
template <typename T, typename T1>
PHP_ARMA_METHOD(dense_matrix, headCols, T, T1)
{
}
template <typename T, typename T1>
PHP_ARMA_METHOD(dense_matrix, headRows, T, T1)
{
}
template <typename T, typename T1>
PHP_ARMA_METHOD(dense_matrix, tailCols, T, T1)
{
}
template <typename T, typename T1>
PHP_ARMA_METHOD(dense_matrix, tailRows, T, T1)
{
}
template <typename T, typename T1>
PHP_ARMA_METHOD(dense_matrix, diag, T, T1)
{
}
template <typename T, typename T1>
PHP_ARMA_METHOD(dense_matrix, eachRow, T, T1)
{
}
template <typename T, typename T1>
PHP_ARMA_METHOD(dense_matrix, eachCol, T, T1)
{
}
template <typename T, typename T1>
PHP_ARMA_METHOD(dense_matrix, i, T, T1)
{
}
template <typename T, typename T1>
PHP_ARMA_START_ME(dense_matrix, T, T1)
PHP_ARMA_ME(__invoke, ZEND_ACC_PUBLIC | ZEND_ACC_CALL_VIA_HANDLER)
PHP_ARMA_ME(at, ZEND_ACC_PUBLIC)
PHP_ARMA_ME(col, ZEND_ACC_PUBLIC)
PHP_ARMA_ME(row, ZEND_ACC_PUBLIC)
PHP_ARMA_ME(cols, ZEND_ACC_PUBLIC)
PHP_ARMA_ME(rows, ZEND_ACC_PUBLIC)
PHP_ARMA_ME(submat, ZEND_ACC_PUBLIC)
PHP_ARMA_ME(headCols, ZEND_ACC_PUBLIC)
PHP_ARMA_ME(headRows, ZEND_ACC_PUBLIC)
PHP_ARMA_ME(tailCols, ZEND_ACC_PUBLIC)
PHP_ARMA_ME(tailRows, ZEND_ACC_PUBLIC)
PHP_ARMA_ME(diag, ZEND_ACC_PUBLIC)
PHP_ARMA_ME(eachRow, ZEND_ACC_PUBLIC)
PHP_ARMA_ME(eachCol, ZEND_ACC_PUBLIC)
PHP_ARMA_ME(i, ZEND_ACC_PUBLIC)
PHP_ARMA_END_ME();
void dense_matrix_init()
{
dense_matrix_ce = interface_register<dense_matrix_php_name>(dense_ce, matrix_ce);
}
PHP_ARMA_INSTANTIATE(dense_matrix, mat);
}