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_resizable_matrix.cc

127 lines
3.5 KiB
C++
Raw Normal View History

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