2019-05-25 18:21:48 +00:00
|
|
|
//
|
|
|
|
// php-armadillo/matrix.cc
|
|
|
|
//
|
|
|
|
// @Author CismonX
|
|
|
|
//
|
|
|
|
|
|
|
|
#include "matrix.hh"
|
|
|
|
#include "mat.hh"
|
|
|
|
|
2019-05-27 08:51:57 +00:00
|
|
|
#include <armadillo>
|
|
|
|
|
2019-05-25 18:21:48 +00:00
|
|
|
namespace php_arma
|
|
|
|
{
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(matrix, nRows, T, T1)
|
|
|
|
{
|
2019-05-27 08:51:57 +00:00
|
|
|
auto native = THIS_NATIVE;
|
|
|
|
RETVAL_LONG(native->n_rows);
|
2019-05-25 18:21:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(matrix, nCols, T, T1)
|
|
|
|
{
|
2019-05-27 08:51:57 +00:00
|
|
|
auto native = THIS_NATIVE;
|
|
|
|
RETVAL_LONG(native->n_cols);
|
2019-05-25 18:21:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(matrix, isVec, T, T1)
|
|
|
|
{
|
2019-05-27 08:51:57 +00:00
|
|
|
auto native = THIS_NATIVE;
|
|
|
|
RETVAL_BOOL(native->is_vec());
|
2019-05-25 18:21:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(matrix, isCol, T, T1)
|
|
|
|
{
|
2019-05-27 08:51:57 +00:00
|
|
|
auto native = THIS_NATIVE;
|
|
|
|
RETVAL_BOOL(native->is_colvec());
|
2019-05-25 18:21:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(matrix, isRow, T, T1)
|
|
|
|
{
|
2019-05-27 08:51:57 +00:00
|
|
|
auto native = THIS_NATIVE;
|
|
|
|
RETVAL_BOOL(native->is_rowvec());
|
2019-05-25 18:21:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(matrix, isSquare, T, T1)
|
|
|
|
{
|
2019-05-27 08:51:57 +00:00
|
|
|
auto native = THIS_NATIVE;
|
|
|
|
RETVAL_BOOL(native->is_square());
|
2019-05-25 18:21:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
2019-06-07 07:48:43 +00:00
|
|
|
PHP_ARMA_METHOD(matrix, isSymmetric, T, T1)
|
2019-05-25 18:21:48 +00:00
|
|
|
{
|
2019-06-07 07:48:43 +00:00
|
|
|
zval *tol = nullptr;
|
|
|
|
ZEND_PARSE_PARAMETERS_START(0, 1)
|
|
|
|
Z_PARAM_OPTIONAL
|
|
|
|
Z_PARAM_ZVAL_DEREF(tol)
|
|
|
|
ZEND_PARSE_PARAMETERS_END();
|
|
|
|
|
|
|
|
auto native = THIS_NATIVE;
|
|
|
|
|
|
|
|
if (tol == nullptr) {
|
|
|
|
RETURN_BOOL(native->is_symmetric());
|
|
|
|
}
|
|
|
|
|
|
|
|
using base_t = typename arma::get_pod_type<T>::result;
|
|
|
|
if (!zval_check_scalar<base_t>(tol)) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
RETVAL_BOOL(native->is_symmetric(zval_get_scalar<base_t>(tol)));
|
2019-05-25 18:21:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
2019-06-07 07:48:43 +00:00
|
|
|
PHP_ARMA_METHOD(matrix, isHermitian, T, T1)
|
2019-05-25 18:21:48 +00:00
|
|
|
{
|
2019-06-07 07:48:43 +00:00
|
|
|
zval *tol = nullptr;
|
|
|
|
ZEND_PARSE_PARAMETERS_START(0, 1)
|
|
|
|
Z_PARAM_OPTIONAL
|
|
|
|
Z_PARAM_ZVAL_DEREF(tol)
|
|
|
|
ZEND_PARSE_PARAMETERS_END();
|
|
|
|
|
|
|
|
auto native = THIS_NATIVE;
|
|
|
|
|
|
|
|
if (tol == nullptr) {
|
|
|
|
RETURN_BOOL(native->is_hermitian());
|
|
|
|
}
|
|
|
|
|
|
|
|
using base_t = typename arma::get_pod_type<T>::result;
|
|
|
|
if (!zval_check_scalar<base_t>(tol)) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
RETVAL_BOOL(native->is_hermitian(zval_get_scalar<base_t>(tol)));
|
2019-05-25 18:21:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(matrix, inRange, T, T1)
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(matrix, swapRows, T, T1)
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(matrix, swapCols, T, T1)
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(matrix, t, T, T1)
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_START_ME(matrix, T, T1)
|
|
|
|
PHP_ARMA_ME(nRows, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(nCols, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(isVec, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(isCol, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(isRow, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(isSquare, ZEND_ACC_PUBLIC)
|
2019-06-07 07:48:43 +00:00
|
|
|
PHP_ARMA_ME(isSymmetric, ZEND_ACC_PUBLIC)
|
2019-05-25 18:21:48 +00:00
|
|
|
PHP_ARMA_ME(isHermitian, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(inRange, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(swapRows, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(swapCols, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(t, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_END_ME();
|
|
|
|
|
|
|
|
void matrix_init()
|
|
|
|
{
|
|
|
|
matrix_ce = interface_register<matrix_php_name>();
|
|
|
|
}
|
|
|
|
|
|
|
|
PHP_ARMA_INSTANTIATE(matrix, mat);
|
|
|
|
}
|