code refactor

This commit is contained in:
CismonX 2019-08-19 03:02:55 +08:00
parent 9033f84132
commit cc8bafe60b
5 changed files with 19 additions and 7 deletions

View File

@ -9,6 +9,8 @@
#include "mat.hh" #include "mat.hh"
#include "subview_mat.hh" #include "subview_mat.hh"
#include <armadillo>
namespace php_arma namespace php_arma
{ {
template <typename T, typename T1> template <typename T, typename T1>

View File

@ -10,8 +10,6 @@
#include "php_arma.hh" #include "php_arma.hh"
#include "complex.hh" #include "complex.hh"
#include <armadillo>
#define PHP_ARMA_DENSE_OPERATOR_EX2(cls, type, func) \ #define PHP_ARMA_DENSE_OPERATOR_EX2(cls, type, func) \
PHP_ARMA_OPERATOR_EX2((dense<type, cls<type>>), cls<type>, func) PHP_ARMA_OPERATOR_EX2((dense<type, cls<type>>), cls<type>, func)
@ -26,6 +24,11 @@
PHP_ARMA_DENSE_OPERATOR_EX(subview_mat, func) \ PHP_ARMA_DENSE_OPERATOR_EX(subview_mat, func) \
PHP_ARMA_OPERATOR_END() PHP_ARMA_OPERATOR_END()
namespace arma
{
template <typename T> class conv_to;
}
namespace php_arma namespace php_arma
{ {
template <typename T, typename ChildT> template <typename T, typename ChildT>
@ -52,8 +55,9 @@ namespace php_arma
using n_subview_t = typename ChildT::subview_t::native_t; using n_subview_t = typename ChildT::subview_t::native_t;
using dest_t = typename ChildT::with_int_elem_t::orig_t; using dest_t = typename ChildT::with_int_elem_t::orig_t;
using dest_native_t = typename dest_t::native_t; using dest_native_t = typename dest_t::native_t;
using n_uint_t = decltype(func(std::declval<n_orig_t*>(), std::declval<n_orig_t*>()).eval());
try { try {
arma::umat ret; n_uint_t ret;
auto o1 = Z_OBJ_P(zv1); auto o1 = Z_OBJ_P(zv1);
auto o2 = Z_OBJ_P(zv2); auto o2 = Z_OBJ_P(zv2);
if (Z_OBJCE_P(zv1) == ChildT::orig_t::ce) { if (Z_OBJCE_P(zv1) == ChildT::orig_t::ce) {

View File

@ -95,15 +95,19 @@
#define PHP_ARMA_OPERATOR_EX(cls, func) \ #define PHP_ARMA_OPERATOR_EX(cls, func) \
PHP_ARMA_OPERATOR_EX2(cls, cls, func) PHP_ARMA_OPERATOR_EX2(cls, cls, func)
#define PHP_ARMA_ASSIGN_OPERATOR_EX(cls, func) \ #define PHP_ARMA_ASSIGN_OPERATOR_EX2(base, child, func) \
if (instanceof_function(ce, cls::ce)) { \ if (instanceof_function(ce, child::ce)) { \
auto v = cls::operators::func(zv1, zv2, zv1); \ using base_t = arg_type<void(base)>::type; \
auto v = base_t::operators::func(zv1, zv2, zv1); \
if (rv) { \ if (rv) { \
ZVAL_COPY(rv, zv1); \ ZVAL_COPY(rv, zv1); \
} \ } \
return v; \ return v; \
} }
#define PHP_ARMA_ASSIGN_OPERATOR_EX(cls, func) \
PHP_ARMA_ASSIGN_OPERATOR_EX2(cls, cls, func)
#endif // PHP_ARMA_OPERATORS #endif // PHP_ARMA_OPERATORS
/// Helper macros for handling native objects. /// Helper macros for handling native objects.

View File

@ -14,6 +14,8 @@
#include "non_resizable_matrix.hh" #include "non_resizable_matrix.hh"
#include "dense_non_resizable_matrix.hh" #include "dense_non_resizable_matrix.hh"
#include <armadillo>
namespace php_arma namespace php_arma
{ {
template <typename T> template <typename T>

View File

@ -17,7 +17,7 @@ require_once 'includes/assert.php';
$file_name = getenv('TMP_FILE'); $file_name = getenv('TMP_FILE');
$mat = Arma\CxDMat::fromString('(1 2) (3 4); (5 6) (7 8)'); $mat = Arma\CxDMat::fromString('(1,2) (3,4); (5,6) (7,8)');
batch_assert('saving of `Arma\\Mat`', batch_assert('saving of `Arma\\Mat`',
[true, $mat->save($file_name, Arma\FileType::ARMA_BINARY)] [true, $mat->save($file_name, Arma\FileType::ARMA_BINARY)]
); );