Add some implementation.

This commit is contained in:
CismonX 2019-05-29 23:45:04 +08:00
parent 3f62fb4393
commit c3402e0abe
5 changed files with 85 additions and 37 deletions

View File

@ -77,49 +77,57 @@ namespace php_arma
template <typename T, typename T1>
PHP_ARMA_METHOD(base, min, T, T1)
{
auto native = THIS_NATIVE;
zval_set_scalar(return_value, native->min());
}
template <typename T, typename T1>
PHP_ARMA_METHOD(base, max, T, T1)
{
auto native = THIS_NATIVE;
zval_set_scalar(return_value, native->max());
}
template <typename T, typename T1>
PHP_ARMA_METHOD(base, indexMin, T, T1)
{
auto native = THIS_NATIVE;
RETVAL_LONG(native->index_min());
}
template <typename T, typename T1>
PHP_ARMA_METHOD(base, indexMax, T, T1)
{
auto native = THIS_NATIVE;
RETVAL_LONG(native->index_max());
}
template <typename T, typename T1>
PHP_ARMA_METHOD(base, isEmpty, T, T1)
{
auto native = THIS_NATIVE;
RETVAL_BOOL(native->is_empty());
}
template <typename T, typename T1>
PHP_ARMA_METHOD(base, isFinite, T, T1)
{
auto native = THIS_NATIVE;
RETVAL_BOOL(native->is_finite());
}
template <typename T, typename T1>
PHP_ARMA_METHOD(base, hasInf, T, T1)
{
auto native = THIS_NATIVE;
RETVAL_BOOL(native->has_inf());
}
template <typename T, typename T1>
PHP_ARMA_METHOD(base, hasNan, T, T1)
{
auto native = THIS_NATIVE;
RETVAL_BOOL(native->has_nan());
}
template <typename T, typename T1>

View File

@ -10,32 +10,6 @@
namespace php_arma
{
arma::file_type file_type::native(zend_long val)
{
switch (val) {
case file_type::auto_detect:
return arma::file_type::auto_detect;
case file_type::arma_binary:
return arma::file_type::arma_binary;
case file_type::arma_ascii:
return arma::file_type::arma_ascii;
case file_type::raw_binary:
return arma::file_type::raw_binary;
case file_type::csv_ascii:
return arma::file_type::csv_ascii;
case file_type::coord_ascii:
return arma::file_type::coord_ascii;
case file_type::pgm_binary:
return arma::file_type::pgm_binary;
#ifdef ARMA_USE_HDF5
case file_type::hdf5_binary:
return arma::file_type::hdf5_binary;
#endif // ARMA_USE_HDF5
default:
return arma::file_type::file_type_unknown;
}
}
template <typename... Ts>
zend_always_inline
void const_declare(zend_class_entry *ce, Ts&&... constants)

View File

@ -21,6 +21,33 @@ namespace php_arma
static constexpr auto eye = 3;
static constexpr auto randu = 4;
static constexpr auto randn = 5;
template <typename T>
zend_always_inline
static void invoke(T *obj, zend_long val)
{
switch (val) {
case fill::none:
break;
case fill::zeros:
obj->zeros();
break;
case fill::ones:
obj->ones();
break;
case fill::eye:
obj->eye();
break;
case fill::randu:
obj->randu();
break;
case fill::randn:
obj->randn();
break;
default:
zend_throw_exception(zend_ce_error, "bad fill type", 0);
}
}
};
constexpr const char fill_php_name[] = "Fill";
@ -38,7 +65,32 @@ namespace php_arma
static constexpr auto pgm_binary = 7;
static constexpr auto hdf5_binary = 8;
static arma::file_type native(zend_long);
zend_always_inline
static arma::file_type native(zend_long val)
{
switch (val) {
case file_type::auto_detect:
return arma::file_type::auto_detect;
case file_type::arma_binary:
return arma::file_type::arma_binary;
case file_type::arma_ascii:
return arma::file_type::arma_ascii;
case file_type::raw_binary:
return arma::file_type::raw_binary;
case file_type::csv_ascii:
return arma::file_type::csv_ascii;
case file_type::coord_ascii:
return arma::file_type::coord_ascii;
case file_type::pgm_binary:
return arma::file_type::pgm_binary;
#ifdef ARMA_USE_HDF5
case file_type::hdf5_binary:
return arma::file_type::hdf5_binary;
#endif // ARMA_USE_HDF5
default:
return arma::file_type::file_type_unknown;
}
}
};
constexpr const char file_type_php_name[] = "FileType";

View File

@ -5,6 +5,7 @@
//
#include "mat.hh"
#include "constants.hh"
#include "base.hh"
#include "dense.hh"
#include "matrix.hh"
@ -20,7 +21,19 @@ namespace php_arma
template <typename T>
PHP_ARMA_METHOD(mat, init, T)
{
zend_long n_rows = 0;
zend_long n_cols = 0;
zend_long fill = fill::none;
ZEND_PARSE_PARAMETERS_START(0, 3)
Z_PARAM_OPTIONAL
Z_PARAM_LONG_DEREF(n_rows)
Z_PARAM_LONG_DEREF(n_cols)
Z_PARAM_LONG_DEREF(fill)
ZEND_PARSE_PARAMETERS_END();
auto zobj = create(n_rows, n_cols);
fill::invoke(ZOBJ_NATIVE(zobj), fill);
RETVAL_OBJ(zobj);
}
template <typename T>

View File

@ -70,7 +70,8 @@ namespace php_arma
template <typename T, typename T1>
PHP_ARMA_METHOD(resizable, reset, T, T1)
{
auto native = THIS_NATIVE;
native->reset();
}
template <typename T, typename T1>