169 lines
3.9 KiB
C++
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);
|
|
}
|