// // php-armadillo/base.cc // // @Author CismonX // #include "base.hh" #include "mat.hh" #include "stream_utils.hh" #include #include namespace php_arma { template PHP_ARMA_METHOD(base, nElem, T, T1) { zend_long count; count_elements(getThis(), &count); RETVAL_LONG(count); } template PHP_ARMA_METHOD(base, add, T, T1) { } template PHP_ARMA_METHOD(base, sub, T, T1) { } template PHP_ARMA_METHOD(base, neg, T, T1) { } template PHP_ARMA_METHOD(base, mul, T, T1) { } template PHP_ARMA_METHOD(base, dotMul, T, T1) { } template PHP_ARMA_METHOD(base, div, T, T1) { } template PHP_ARMA_METHOD(base, replace, T, T1) { } template PHP_ARMA_METHOD(base, transform, T, T1) { } template PHP_ARMA_METHOD(base, forEach, T, T1) { } template PHP_ARMA_METHOD(base, min, T, T1) { auto native = THIS_NATIVE; zval_set_scalar(return_value, native->min()); } template PHP_ARMA_METHOD(base, max, T, T1) { auto native = THIS_NATIVE; zval_set_scalar(return_value, native->max()); } template PHP_ARMA_METHOD(base, indexMin, T, T1) { auto native = THIS_NATIVE; RETVAL_LONG(native->index_min()); } template PHP_ARMA_METHOD(base, indexMax, T, T1) { auto native = THIS_NATIVE; RETVAL_LONG(native->index_max()); } template PHP_ARMA_METHOD(base, isEmpty, T, T1) { auto native = THIS_NATIVE; RETVAL_BOOL(native->is_empty()); } template PHP_ARMA_METHOD(base, isFinite, T, T1) { auto native = THIS_NATIVE; RETVAL_BOOL(native->is_finite()); } template PHP_ARMA_METHOD(base, hasInf, T, T1) { auto native = THIS_NATIVE; RETVAL_BOOL(native->has_inf()); } template PHP_ARMA_METHOD(base, hasNan, T, T1) { auto native = THIS_NATIVE; RETVAL_BOOL(native->has_nan()); } template PHP_ARMA_METHOD(base, print, T, T1) { zval *stream = nullptr; ZEND_PARSE_PARAMETERS_START(0, 1) Z_PARAM_OPTIONAL Z_PARAM_ZVAL_DEREF(stream) ZEND_PARSE_PARAMETERS_END(); auto native = THIS_NATIVE; if (stream == nullptr) { native->print(); } else { Z_OSTREAM_P(stream, os); if constexpr (ZVAL_TO_IOSTREAM_SUPPORTED) { native->print(os); } } } template PHP_ARMA_METHOD(base, rawPrint, T, T1) { zval *stream = nullptr; ZEND_PARSE_PARAMETERS_START(0, 1) Z_PARAM_OPTIONAL Z_PARAM_ZVAL_DEREF(stream) ZEND_PARSE_PARAMETERS_END(); auto native = THIS_NATIVE; if (stream == nullptr) { native->raw_print(); } else { Z_OSTREAM_P(stream, os); if constexpr (ZVAL_TO_IOSTREAM_SUPPORTED) { native->raw_print(os); } } } template 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(); void base_init() { base_ce = interface_register( #if PHP_VERSION_ID >= 70200 zend_ce_countable #endif ); } PHP_ARMA_INSTANTIATE(base, mat); }