// // php-armadillo/constants.cc // // @Author CismonX // #include "constants.hh" #include namespace php_arma { template zend_always_inline void const_declare(zend_class_entry *ce, F&& func, Ts&&... constants) { for (auto&& [name, val] : { constants... }) { func(ce, name, strlen(name), val); } } template zend_always_inline void long_const_declare(zend_class_entry *ce, Ts&&... constants) { const_declare(ce, zend_declare_class_constant_long, std::forward(constants)...); } template zend_always_inline void bool_const_declare(zend_class_entry *ce, Ts&&... constants) { const_declare(ce, zend_declare_class_constant_bool, std::forward(constants)...); } void constants_init() { long_const_declare(fill_ce = abstract_class_register(), std::make_tuple("NONE", fill::none), std::make_tuple("ZEROS", fill::zeros), std::make_tuple("ONES", fill::ones), std::make_tuple("EYE", fill::eye), std::make_tuple("RANDU", fill::randu), std::make_tuple("RANDN", fill::randn) ); long_const_declare(file_type_ce = abstract_class_register(), std::make_tuple("AUTO_DETECT", file_type::auto_detect), std::make_tuple("ARMA_BINARY", file_type::arma_binary), std::make_tuple("ARMA_ASCII", file_type::arma_ascii), std::make_tuple("RAW_BINARY", file_type::raw_binary), std::make_tuple("RAW_ASCII", file_type::raw_ascii), std::make_tuple("CSV_ASCII", file_type::csv_ascii), std::make_tuple("COORD_ASCII", file_type::coord_ascii), std::make_tuple("PGM_BINARY", file_type::pgm_binary), std::make_tuple("HDF5_BINARY", file_type::hdf5_binary) ); long_const_declare(sort_direction_ce = abstract_class_register(), std::make_tuple("ASCEND", sort_direction::ascend), std::make_tuple("DESCEND", sort_direction::descend), std::make_tuple("STRICT_ASCEND", sort_direction::strict_ascend), std::make_tuple("STRICT_DESCEND", sort_direction::strict_descend) ); #ifdef ARMA_USE_HDF5 long_const_declare(hdf5_opts_ce = abstract_class_register(), std::make_tuple("NONE", hdf5_opts::none), std::make_tuple("TRANS", hdf5_opts::trans), std::make_tuple("APPEND", hdf5_opts::append), std::make_tuple("REPLACE", hdf5_opts::replace) ); #endif // ARMA_USE_HDF5 bool_const_declare(features_ce = abstract_class_register(), std::make_tuple("OPERATORS", features::operators), std::make_tuple("HDF5", features::hdf5), std::make_tuple("STREAM_RES", features::stream_res) ); } }