update
This commit is contained in:
parent
8163e4af9d
commit
1461b148b2
|
@ -1,2 +1,6 @@
|
||||||
# ext-armadillo
|
# php-armadillo
|
||||||
PHP binding for Armadillo.
|
|
||||||
|
[![Travis-CI](https://travis-ci.org/CismonX/php-armadillo.svg?branch=master)](https://travis-ci.org/CismonX/php-armadillo)
|
||||||
|
[![MIT license](https://img.shields.io/badge/licence-MIT-blue.svg)](https://opensource.org/licenses/MIT)
|
||||||
|
|
||||||
|
PHP bindings for Armadillo.
|
||||||
|
|
|
@ -90,7 +90,7 @@ namespace php_arma
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
PHP_ARMA_OPERATOR_BEGIN(Z_OBJCE_P(zv1), complex_ce)
|
PHP_ARMA_OPERATOR_BEGIN(zv1, complex_ce)
|
||||||
PHP_ARMA_COMPLEX_OPERATOR(double, add)
|
PHP_ARMA_COMPLEX_OPERATOR(double, add)
|
||||||
PHP_ARMA_OPERATOR_END();
|
PHP_ARMA_OPERATOR_END();
|
||||||
|
|
||||||
|
@ -105,7 +105,7 @@ namespace php_arma
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
PHP_ARMA_OPERATOR_BEGIN(Z_OBJCE_P(zv1), complex_ce)
|
PHP_ARMA_OPERATOR_BEGIN(zv1, complex_ce)
|
||||||
PHP_ARMA_COMPLEX_OPERATOR_ASSIGN(double, add)
|
PHP_ARMA_COMPLEX_OPERATOR_ASSIGN(double, add)
|
||||||
PHP_ARMA_OPERATOR_END();
|
PHP_ARMA_OPERATOR_END();
|
||||||
|
|
||||||
|
@ -120,7 +120,7 @@ namespace php_arma
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
PHP_ARMA_OPERATOR_BEGIN(Z_OBJCE_P(zv1), complex_ce)
|
PHP_ARMA_OPERATOR_BEGIN(zv1, complex_ce)
|
||||||
PHP_ARMA_COMPLEX_OPERATOR(double, sub)
|
PHP_ARMA_COMPLEX_OPERATOR(double, sub)
|
||||||
PHP_ARMA_OPERATOR_END();
|
PHP_ARMA_OPERATOR_END();
|
||||||
|
|
||||||
|
@ -135,7 +135,7 @@ namespace php_arma
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
PHP_ARMA_OPERATOR_BEGIN(Z_OBJCE_P(zv1), complex_ce)
|
PHP_ARMA_OPERATOR_BEGIN(zv1, complex_ce)
|
||||||
PHP_ARMA_COMPLEX_OPERATOR_ASSIGN(double, sub)
|
PHP_ARMA_COMPLEX_OPERATOR_ASSIGN(double, sub)
|
||||||
PHP_ARMA_OPERATOR_END();
|
PHP_ARMA_OPERATOR_END();
|
||||||
|
|
||||||
|
@ -150,7 +150,7 @@ namespace php_arma
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
PHP_ARMA_OPERATOR_BEGIN(Z_OBJCE_P(zv1), complex_ce)
|
PHP_ARMA_OPERATOR_BEGIN(zv1, complex_ce)
|
||||||
PHP_ARMA_COMPLEX_OPERATOR(double, mul)
|
PHP_ARMA_COMPLEX_OPERATOR(double, mul)
|
||||||
PHP_ARMA_OPERATOR_END();
|
PHP_ARMA_OPERATOR_END();
|
||||||
|
|
||||||
|
@ -165,7 +165,7 @@ namespace php_arma
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
PHP_ARMA_OPERATOR_BEGIN(Z_OBJCE_P(zv1), complex_ce)
|
PHP_ARMA_OPERATOR_BEGIN(zv1, complex_ce)
|
||||||
PHP_ARMA_COMPLEX_OPERATOR_ASSIGN(double, mul)
|
PHP_ARMA_COMPLEX_OPERATOR_ASSIGN(double, mul)
|
||||||
PHP_ARMA_OPERATOR_END();
|
PHP_ARMA_OPERATOR_END();
|
||||||
|
|
||||||
|
@ -180,7 +180,7 @@ namespace php_arma
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
PHP_ARMA_OPERATOR_BEGIN(Z_OBJCE_P(zv1), complex_ce)
|
PHP_ARMA_OPERATOR_BEGIN(zv1, complex_ce)
|
||||||
PHP_ARMA_COMPLEX_OPERATOR(double, div)
|
PHP_ARMA_COMPLEX_OPERATOR(double, div)
|
||||||
PHP_ARMA_OPERATOR_END();
|
PHP_ARMA_OPERATOR_END();
|
||||||
|
|
||||||
|
@ -195,7 +195,7 @@ namespace php_arma
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
PHP_ARMA_OPERATOR_BEGIN(Z_OBJCE_P(zv1), complex_ce)
|
PHP_ARMA_OPERATOR_BEGIN(zv1, complex_ce)
|
||||||
PHP_ARMA_COMPLEX_OPERATOR_ASSIGN(double, div)
|
PHP_ARMA_COMPLEX_OPERATOR_ASSIGN(double, div)
|
||||||
PHP_ARMA_OPERATOR_END();
|
PHP_ARMA_OPERATOR_END();
|
||||||
|
|
||||||
|
@ -210,7 +210,7 @@ namespace php_arma
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
PHP_ARMA_OPERATOR_BEGIN(Z_OBJCE_P(zv1), complex_ce)
|
PHP_ARMA_OPERATOR_BEGIN(zv1, complex_ce)
|
||||||
PHP_ARMA_COMPLEX_OPERATOR(double, pow)
|
PHP_ARMA_COMPLEX_OPERATOR(double, pow)
|
||||||
PHP_ARMA_OPERATOR_END();
|
PHP_ARMA_OPERATOR_END();
|
||||||
|
|
||||||
|
@ -225,7 +225,7 @@ namespace php_arma
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
PHP_ARMA_OPERATOR_BEGIN(Z_OBJCE_P(zv1), complex_ce)
|
PHP_ARMA_OPERATOR_BEGIN(zv1, complex_ce)
|
||||||
PHP_ARMA_COMPLEX_OPERATOR_ASSIGN(double, pow)
|
PHP_ARMA_COMPLEX_OPERATOR_ASSIGN(double, pow)
|
||||||
PHP_ARMA_OPERATOR_END();
|
PHP_ARMA_OPERATOR_END();
|
||||||
|
|
||||||
|
@ -240,7 +240,7 @@ namespace php_arma
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
PHP_ARMA_OPERATOR_BEGIN(Z_OBJCE_P(zv1), complex_ce)
|
PHP_ARMA_OPERATOR_BEGIN(zv1, complex_ce)
|
||||||
PHP_ARMA_COMPLEX_OPERATOR(double, conj)
|
PHP_ARMA_COMPLEX_OPERATOR(double, conj)
|
||||||
PHP_ARMA_OPERATOR_END();
|
PHP_ARMA_OPERATOR_END();
|
||||||
|
|
||||||
|
@ -248,18 +248,29 @@ namespace php_arma
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename... Ts>
|
||||||
|
zend_always_inline
|
||||||
|
void set_op_handlers(Ts... op_handlers)
|
||||||
|
{
|
||||||
|
for (auto [opcode, handler] : { op_handlers... }) {
|
||||||
|
zend_set_user_opcode_handler(opcode, handler);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void operators_init()
|
void operators_init()
|
||||||
{
|
{
|
||||||
zend_set_user_opcode_handler(ZEND_ADD, add_handler);
|
set_op_handlers(
|
||||||
zend_set_user_opcode_handler(ZEND_ASSIGN_ADD, add_assign_handler);
|
std::tuple(ZEND_ADD, add_handler),
|
||||||
zend_set_user_opcode_handler(ZEND_SUB, sub_handler);
|
std::tuple(ZEND_ASSIGN_ADD, add_assign_handler),
|
||||||
zend_set_user_opcode_handler(ZEND_ASSIGN_SUB, sub_assign_handler);
|
std::tuple(ZEND_SUB, sub_handler),
|
||||||
zend_set_user_opcode_handler(ZEND_MUL, mul_handler);
|
std::tuple(ZEND_ASSIGN_SUB, sub_assign_handler),
|
||||||
zend_set_user_opcode_handler(ZEND_ASSIGN_MUL, mul_assign_handler);
|
std::tuple(ZEND_MUL, mul_handler),
|
||||||
zend_set_user_opcode_handler(ZEND_DIV, div_handler);
|
std::tuple(ZEND_ASSIGN_MUL, mul_assign_handler),
|
||||||
zend_set_user_opcode_handler(ZEND_ASSIGN_DIV, div_assign_handler);
|
std::tuple(ZEND_DIV, div_handler),
|
||||||
zend_set_user_opcode_handler(ZEND_POW, pow_handler);
|
std::tuple(ZEND_ASSIGN_DIV, div_assign_handler),
|
||||||
zend_set_user_opcode_handler(ZEND_ASSIGN_POW, pow_assign_handler);
|
std::tuple(ZEND_POW, pow_handler),
|
||||||
zend_set_user_opcode_handler(ZEND_BW_NOT, bw_not_handler);
|
std::tuple(ZEND_ASSIGN_POW, pow_assign_handler),
|
||||||
|
std::tuple(ZEND_BW_NOT, bw_not_handler)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,12 +4,12 @@
|
||||||
// @Author CismonX
|
// @Author CismonX
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef PHP_ARMA_OPERATOR_HH
|
#ifndef PHP_ARMA_OPERATORS_HH
|
||||||
#define PHP_ARMA_OPERATOR_HH
|
#define PHP_ARMA_OPERATORS_HH
|
||||||
|
|
||||||
namespace php_arma
|
namespace php_arma
|
||||||
{
|
{
|
||||||
void operators_init();
|
void operators_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // !PHP_ARMA_OPERATOR_HH
|
#endif // !PHP_ARMA_OPERATORS_HH
|
||||||
|
|
|
@ -69,9 +69,9 @@ extern zend_module_entry arma_module_entry;
|
||||||
|
|
||||||
/// Helper macros for handling operator overloading.
|
/// Helper macros for handling operator overloading.
|
||||||
|
|
||||||
#define PHP_ARMA_OPERATOR_BEGIN(ce, parent_ce) \
|
#define PHP_ARMA_OPERATOR_BEGIN(zv, parent_ce) \
|
||||||
{ \
|
{ \
|
||||||
auto _ce = ce; \
|
auto _ce = Z_OBJCE_P(zv); \
|
||||||
if (instanceof_function(_ce, parent_ce)) {
|
if (instanceof_function(_ce, parent_ce)) {
|
||||||
|
|
||||||
#define PHP_ARMA_OPERATOR_END() \
|
#define PHP_ARMA_OPERATOR_END() \
|
||||||
|
|
Reference in New Issue