2019-05-25 18:21:48 +00:00
|
|
|
//
|
|
|
|
// php-armadillo/dense_resizable_matrix.cc
|
|
|
|
//
|
|
|
|
// @Author CismonX
|
|
|
|
//
|
|
|
|
|
|
|
|
#include "dense_resizable_matrix.hh"
|
2019-06-12 03:11:27 +00:00
|
|
|
#include "constants.hh"
|
2019-06-06 15:56:10 +00:00
|
|
|
#include "dense_matrix.hh"
|
|
|
|
#include "resizable_matrix.hh"
|
2019-05-25 18:21:48 +00:00
|
|
|
#include "mat.hh"
|
|
|
|
|
|
|
|
namespace php_arma
|
|
|
|
{
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(dense_resizable_matrix, ones, T, T1)
|
|
|
|
{
|
2019-06-12 03:11:27 +00:00
|
|
|
zend_long n_rows = 0;
|
|
|
|
zend_long n_cols = 0;
|
|
|
|
ZEND_PARSE_PARAMETERS_START(0, 2)
|
|
|
|
Z_PARAM_OPTIONAL
|
|
|
|
Z_PARAM_LONG(n_rows)
|
|
|
|
Z_PARAM_LONG(n_cols)
|
|
|
|
ZEND_PARSE_PARAMETERS_END();
|
|
|
|
|
|
|
|
auto native = THIS_NATIVE;
|
|
|
|
native->ones(n_rows, n_cols);
|
|
|
|
RETVAL_THIS();
|
2019-05-25 18:21:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(dense_resizable_matrix, randu, T, T1)
|
|
|
|
{
|
2019-06-12 03:11:27 +00:00
|
|
|
zend_long n_rows = 0;
|
|
|
|
zend_long n_cols = 0;
|
|
|
|
ZEND_PARSE_PARAMETERS_START(0, 2)
|
|
|
|
Z_PARAM_OPTIONAL
|
|
|
|
Z_PARAM_LONG(n_rows)
|
|
|
|
Z_PARAM_LONG(n_cols)
|
|
|
|
ZEND_PARSE_PARAMETERS_END();
|
|
|
|
|
|
|
|
auto native = THIS_NATIVE;
|
|
|
|
native->randu(n_rows, n_cols);
|
|
|
|
RETVAL_THIS();
|
2019-05-25 18:21:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(dense_resizable_matrix, randn, T, T1)
|
|
|
|
{
|
2019-06-12 03:11:27 +00:00
|
|
|
zend_long n_rows = 0;
|
|
|
|
zend_long n_cols = 0;
|
|
|
|
ZEND_PARSE_PARAMETERS_START(0, 2)
|
|
|
|
Z_PARAM_OPTIONAL
|
|
|
|
Z_PARAM_LONG(n_rows)
|
|
|
|
Z_PARAM_LONG(n_cols)
|
|
|
|
ZEND_PARSE_PARAMETERS_END();
|
|
|
|
|
|
|
|
auto native = THIS_NATIVE;
|
|
|
|
native->randn(n_rows, n_cols);
|
|
|
|
RETVAL_THIS();
|
2019-05-25 18:21:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(dense_resizable_matrix, insertRows, T, T1)
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(dense_resizable_matrix, insertCols, T, T1)
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2019-06-12 03:11:27 +00:00
|
|
|
template <typename T, typename ChildT>
|
|
|
|
PHP_ARMA_METHOD(dense_resizable_matrix, swap, T, ChildT)
|
2019-05-25 18:21:48 +00:00
|
|
|
{
|
2019-06-12 03:11:27 +00:00
|
|
|
zval *other;
|
|
|
|
ZEND_PARSE_PARAMETERS_START(1, 1)
|
|
|
|
Z_PARAM_OBJECT(other)
|
|
|
|
ZEND_PARSE_PARAMETERS_END();
|
|
|
|
|
|
|
|
auto native = THIS_NATIVE;
|
2019-05-25 18:21:48 +00:00
|
|
|
|
2019-06-12 03:11:27 +00:00
|
|
|
if (UNEXPECTED(ChildT::ce != Z_OBJCE_P(other))) {
|
|
|
|
ex_bad_type(zval_get_type_name(&EX(This)), zval_get_type_name(other));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
native->swap(*Z_NATIVE_OBJ_P(other));
|
2019-05-25 18:21:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(dense_resizable_matrix, isSorted, T, T1)
|
|
|
|
{
|
2019-06-12 03:11:27 +00:00
|
|
|
zend_long sort_direction = sort_direction::ascend;
|
|
|
|
zend_long dim = 0;
|
|
|
|
ZEND_PARSE_PARAMETERS_START(0, 2)
|
|
|
|
Z_PARAM_OPTIONAL
|
|
|
|
Z_PARAM_LONG(sort_direction)
|
|
|
|
Z_PARAM_LONG(dim)
|
|
|
|
ZEND_PARSE_PARAMETERS_END();
|
|
|
|
|
|
|
|
auto native = THIS_NATIVE;
|
|
|
|
RETVAL_BOOL(native->is_sorted(sort_direction::native(sort_direction), dim));
|
2019-05-25 18:21:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_START_ME(dense_resizable_matrix, T, T1)
|
|
|
|
PHP_ARMA_ME(ones, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(randu, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(randn, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(insertRows, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(insertCols, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(swap, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(isSorted, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_END_ME();
|
|
|
|
|
|
|
|
void dense_resizable_matrix_init()
|
|
|
|
{
|
2019-06-06 15:56:10 +00:00
|
|
|
dense_resizable_matrix_ce = interface_register<dense_resizable_matrix_php_name>(
|
|
|
|
dense_matrix_ce, resizable_matrix_ce);
|
2019-05-25 18:21:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
PHP_ARMA_INSTANTIATE(dense_resizable_matrix, mat);
|
|
|
|
}
|