2019-04-02 08:16:11 +00:00
|
|
|
//
|
|
|
|
// php-armadillo/base.cc
|
|
|
|
//
|
|
|
|
// @Author CismonX
|
|
|
|
//
|
|
|
|
|
|
|
|
#include "base.hh"
|
2019-05-25 18:21:48 +00:00
|
|
|
#include "mat.hh"
|
2019-05-30 15:49:31 +00:00
|
|
|
#include "stream_utils.hh"
|
2019-05-25 18:21:48 +00:00
|
|
|
|
|
|
|
#include <armadillo>
|
2019-05-27 08:51:46 +00:00
|
|
|
#include <zend_interfaces.h>
|
2019-04-02 08:16:11 +00:00
|
|
|
|
|
|
|
namespace php_arma
|
|
|
|
{
|
2019-05-25 18:21:48 +00:00
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(base, nElem, T, T1)
|
|
|
|
{
|
|
|
|
zend_long count;
|
|
|
|
count_elements(getThis(), &count);
|
|
|
|
RETVAL_LONG(count);
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(base, add, T, T1)
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(base, sub, T, T1)
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(base, neg, T, T1)
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(base, mul, T, T1)
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(base, dotMul, T, T1)
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(base, div, T, T1)
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(base, replace, T, T1)
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(base, transform, T, T1)
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(base, forEach, T, T1)
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(base, min, T, T1)
|
|
|
|
{
|
2019-05-29 15:45:04 +00:00
|
|
|
auto native = THIS_NATIVE;
|
|
|
|
zval_set_scalar(return_value, native->min());
|
2019-05-25 18:21:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(base, max, T, T1)
|
|
|
|
{
|
2019-05-29 15:45:04 +00:00
|
|
|
auto native = THIS_NATIVE;
|
|
|
|
zval_set_scalar(return_value, native->max());
|
2019-05-25 18:21:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(base, indexMin, T, T1)
|
|
|
|
{
|
2019-05-29 15:45:04 +00:00
|
|
|
auto native = THIS_NATIVE;
|
|
|
|
RETVAL_LONG(native->index_min());
|
2019-05-25 18:21:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(base, indexMax, T, T1)
|
|
|
|
{
|
2019-05-29 15:45:04 +00:00
|
|
|
auto native = THIS_NATIVE;
|
|
|
|
RETVAL_LONG(native->index_max());
|
2019-05-25 18:21:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(base, isEmpty, T, T1)
|
|
|
|
{
|
2019-05-29 15:45:04 +00:00
|
|
|
auto native = THIS_NATIVE;
|
|
|
|
RETVAL_BOOL(native->is_empty());
|
2019-05-25 18:21:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(base, isFinite, T, T1)
|
|
|
|
{
|
2019-05-29 15:45:04 +00:00
|
|
|
auto native = THIS_NATIVE;
|
|
|
|
RETVAL_BOOL(native->is_finite());
|
2019-05-25 18:21:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(base, hasInf, T, T1)
|
|
|
|
{
|
2019-05-29 15:45:04 +00:00
|
|
|
auto native = THIS_NATIVE;
|
|
|
|
RETVAL_BOOL(native->has_inf());
|
2019-05-25 18:21:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(base, hasNan, T, T1)
|
|
|
|
{
|
2019-05-29 15:45:04 +00:00
|
|
|
auto native = THIS_NATIVE;
|
|
|
|
RETVAL_BOOL(native->has_nan());
|
2019-05-25 18:21:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(base, print, T, T1)
|
|
|
|
{
|
2019-05-30 15:49:31 +00:00
|
|
|
zval *stream = nullptr;
|
|
|
|
ZEND_PARSE_PARAMETERS_START(0, 1)
|
|
|
|
Z_PARAM_OPTIONAL
|
2019-06-08 10:10:20 +00:00
|
|
|
Z_PARAM_ZVAL(stream)
|
2019-05-30 15:49:31 +00:00
|
|
|
ZEND_PARSE_PARAMETERS_END();
|
|
|
|
|
|
|
|
auto native = THIS_NATIVE;
|
|
|
|
if (stream == nullptr) {
|
|
|
|
native->print();
|
|
|
|
} else {
|
2019-06-07 17:56:22 +00:00
|
|
|
Z_OSTREAM_P(stream, os);
|
2019-06-11 10:18:40 +00:00
|
|
|
if constexpr (zval_to_iostream_supported) {
|
2019-06-07 17:56:22 +00:00
|
|
|
native->print(os);
|
|
|
|
}
|
2019-05-30 15:49:31 +00:00
|
|
|
}
|
2019-05-25 18:21:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(base, rawPrint, T, T1)
|
|
|
|
{
|
2019-05-30 15:49:31 +00:00
|
|
|
zval *stream = nullptr;
|
|
|
|
ZEND_PARSE_PARAMETERS_START(0, 1)
|
|
|
|
Z_PARAM_OPTIONAL
|
2019-06-08 10:10:20 +00:00
|
|
|
Z_PARAM_ZVAL(stream)
|
2019-05-30 15:49:31 +00:00
|
|
|
ZEND_PARSE_PARAMETERS_END();
|
|
|
|
|
|
|
|
auto native = THIS_NATIVE;
|
|
|
|
if (stream == nullptr) {
|
|
|
|
native->raw_print();
|
|
|
|
} else {
|
2019-06-07 17:56:22 +00:00
|
|
|
Z_OSTREAM_P(stream, os);
|
2019-06-11 10:18:40 +00:00
|
|
|
if constexpr (zval_to_iostream_supported) {
|
2019-06-07 17:56:22 +00:00
|
|
|
native->raw_print(os);
|
|
|
|
}
|
2019-05-30 15:49:31 +00:00
|
|
|
}
|
2019-05-25 18:21:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_START_ME(base, T, T1)
|
|
|
|
PHP_ARMA_ME(nElem, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(add, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(sub, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(neg, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(mul, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(dotMul, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(div, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(replace, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(transform, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(forEach, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(min, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(max, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(indexMin, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(indexMax, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(isEmpty, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(isFinite, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(hasInf, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(hasNan, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(print, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(rawPrint, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_END_ME();
|
|
|
|
|
2019-04-02 08:16:11 +00:00
|
|
|
void base_init()
|
|
|
|
{
|
2019-05-27 09:00:04 +00:00
|
|
|
base_ce = interface_register<base_php_name>(
|
|
|
|
#if PHP_VERSION_ID >= 70200
|
|
|
|
zend_ce_countable
|
|
|
|
#endif
|
|
|
|
);
|
2019-04-02 08:16:11 +00:00
|
|
|
}
|
2019-05-25 18:21:48 +00:00
|
|
|
|
|
|
|
PHP_ARMA_INSTANTIATE(base, mat);
|
2019-04-02 08:16:11 +00:00
|
|
|
}
|