2019-05-25 18:21:48 +00:00
|
|
|
//
|
|
|
|
// php-armadillo/dense.cc
|
|
|
|
//
|
|
|
|
// @Author CismonX
|
|
|
|
//
|
|
|
|
|
|
|
|
#include "dense.hh"
|
|
|
|
#include "mat.hh"
|
|
|
|
|
|
|
|
namespace php_arma
|
|
|
|
{
|
2019-05-30 04:55:33 +00:00
|
|
|
template <typename T, typename ChildT>
|
2019-05-30 06:01:40 +00:00
|
|
|
template <bool IsEq, typename F>
|
|
|
|
zend_always_inline
|
|
|
|
void dense<T, ChildT>::compare(INTERNAL_FUNCTION_PARAMETERS, F&& func)
|
2019-05-25 18:21:48 +00:00
|
|
|
{
|
2019-05-30 04:55:33 +00:00
|
|
|
zval *other;
|
|
|
|
ZEND_PARSE_PARAMETERS_START(1, 1)
|
|
|
|
Z_PARAM_OBJECT_DEREF(other)
|
|
|
|
ZEND_PARSE_PARAMETERS_END();
|
|
|
|
|
2019-05-30 06:01:40 +00:00
|
|
|
compare_op<T, ChildT, IsEq>(getThis(), other, return_value, std::move(func));
|
|
|
|
}
|
2019-05-30 04:55:33 +00:00
|
|
|
|
2019-05-30 06:01:40 +00:00
|
|
|
template <typename T, typename ChildT>
|
|
|
|
PHP_ARMA_METHOD(dense, equals, T, ChildT)
|
|
|
|
{
|
|
|
|
compare<true>(INTERNAL_FUNCTION_PARAM_PASSTHRU, [](auto v1, auto v2) {
|
|
|
|
return *v1 == *v2;
|
|
|
|
});
|
2019-05-25 18:21:48 +00:00
|
|
|
}
|
|
|
|
|
2019-05-30 04:55:33 +00:00
|
|
|
template <typename T, typename ChildT>
|
|
|
|
PHP_ARMA_METHOD(dense, notEquals, T, ChildT)
|
2019-05-25 18:21:48 +00:00
|
|
|
{
|
2019-05-30 06:01:40 +00:00
|
|
|
compare<true>(INTERNAL_FUNCTION_PARAM_PASSTHRU, [](auto v1, auto v2) {
|
|
|
|
return *v1 != *v2;
|
|
|
|
});
|
2019-05-25 18:21:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(dense, greaterThan, T, T1)
|
|
|
|
{
|
2019-05-30 06:01:40 +00:00
|
|
|
compare<false>(INTERNAL_FUNCTION_PARAM_PASSTHRU, [](auto v1, auto v2) {
|
|
|
|
return *v1 > *v2;
|
|
|
|
});
|
2019-05-25 18:21:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(dense, smallerThan, T, T1)
|
|
|
|
{
|
2019-05-30 06:01:40 +00:00
|
|
|
compare<false>(INTERNAL_FUNCTION_PARAM_PASSTHRU, [](auto v1, auto v2) {
|
|
|
|
return *v1 < *v2;
|
|
|
|
});
|
2019-05-25 18:21:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(dense, notGreaterThan, T, T1)
|
|
|
|
{
|
2019-05-30 06:01:40 +00:00
|
|
|
compare<false>(INTERNAL_FUNCTION_PARAM_PASSTHRU, [](auto v1, auto v2) {
|
|
|
|
return *v1 <= *v2;
|
|
|
|
});
|
2019-05-25 18:21:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(dense, notSmallerThan, T, T1)
|
|
|
|
{
|
2019-05-30 06:01:40 +00:00
|
|
|
compare<false>(INTERNAL_FUNCTION_PARAM_PASSTHRU, [](auto v1, auto v2) {
|
|
|
|
return *v1 >= *v2;
|
|
|
|
});
|
2019-05-25 18:21:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(dense, fill, T, T1)
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_METHOD(dense, imbue, T, T1)
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
template <typename T, typename T1>
|
|
|
|
PHP_ARMA_START_ME(dense, T, T1)
|
|
|
|
PHP_ARMA_ME(equals, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(notEquals, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(greaterThan, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(smallerThan, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(notGreaterThan, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(notSmallerThan, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(fill, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_ME(imbue, ZEND_ACC_PUBLIC)
|
|
|
|
PHP_ARMA_END_ME();
|
|
|
|
|
|
|
|
void dense_init()
|
|
|
|
{
|
|
|
|
dense_ce = interface_register<dense_php_name>();
|
|
|
|
}
|
|
|
|
|
|
|
|
PHP_ARMA_INSTANTIATE(dense, mat);
|
|
|
|
}
|