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

107 lines
2.8 KiB
C++

//
// php-armadillo/dense.cc
//
// @Author CismonX
//
#include "dense.hh"
#include "mat.hh"
#include <armadillo>
namespace php_arma
{
template <typename T, typename ChildT>
PHP_ARMA_METHOD(dense, equals, T, ChildT)
{
zval *other;
ZEND_PARSE_PARAMETERS_START(1, 1)
Z_PARAM_OBJECT_DEREF(other)
ZEND_PARSE_PARAMETERS_END();
if (Z_OBJCE_P(other) != ChildT::ce) {
ex_bad_type(zval_get_type_name(getThis()), zval_get_type_name(other));
RETURN_NULL();
}
using dest_t = typename ChildT::with_int_elem_t;
using dest_native_t = typename dest_t::native_t;
auto eq = (*Z_NATIVE_OBJ_P(getThis()) == *Z_NATIVE_OBJ_P(other)).eval();
RETVAL_OBJ(dest_t::create(std::move(arma::conv_to<dest_native_t>::from(eq))));
}
template <typename T, typename ChildT>
PHP_ARMA_METHOD(dense, notEquals, T, ChildT)
{
zval *other;
ZEND_PARSE_PARAMETERS_START(1, 1)
Z_PARAM_OBJECT_DEREF(other)
ZEND_PARSE_PARAMETERS_END();
if (Z_OBJCE_P(other) != ChildT::ce) {
ex_bad_type(zval_get_type_name(getThis()), zval_get_type_name(other));
RETURN_NULL();
}
using dest_t = typename ChildT::with_int_elem_t;
using dest_native_t = typename dest_t::native_t;
auto eq = (*Z_NATIVE_OBJ_P(getThis()) != *Z_NATIVE_OBJ_P(other)).eval();
RETVAL_OBJ(dest_t::create(std::move(arma::conv_to<dest_native_t>::from(eq))));
}
template <typename T, typename T1>
PHP_ARMA_METHOD(dense, greaterThan, T, T1)
{
}
template <typename T, typename T1>
PHP_ARMA_METHOD(dense, smallerThan, T, T1)
{
}
template <typename T, typename T1>
PHP_ARMA_METHOD(dense, notGreaterThan, T, T1)
{
}
template <typename T, typename T1>
PHP_ARMA_METHOD(dense, notSmallerThan, T, T1)
{
}
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);
}