// // php-armadillo/interfaces.cc // // @Author CismonX // #include "interfaces.hh" #include "php_arma.hh" #define N_INT "Internal\\" namespace php_arma { zend_always_inline zend_class_entry *interface_register(const char *name) { // Although methods are declared in interfaces as you see in the stubs, // nothing is declared in the internal interface implementation. return ce_init(name, nullptr, zend_register_internal_class); } template zend_always_inline zend_class_entry *interface_register(const char *name, Ts... parents) { return ce_init(name, nullptr, zend_register_internal_class, parents...); } void internal_interfaces_init() { base_ce = interface_register(N_INT "Base"); vector_ce = interface_register(N_INT "Vector"); matrix_ce = interface_register(N_INT "Matrix"); dense_ce = interface_register(N_INT "Dense", base_ce); sparse_ce = interface_register(N_INT "Sparse", base_ce); dense_vector_ce = interface_register(N_INT "DenseVector", vector_ce, dense_ce); dense_matrix_ce = interface_register(N_INT "DenseMatrix", matrix_ce, dense_ce); sparse_vector_ce = interface_register(N_INT "SparseVector", vector_ce, sparse_ce); sparse_matrix_ce = interface_register(N_INT "SparseMatrix", matrix_ce, sparse_ce); resizable_ce = interface_register(N_INT "Resizable"); resizable_vector_ce = interface_register(N_INT "ResizableVector", resizable_ce, vector_ce); resizable_matrix_ce = interface_register(N_INT "ResizableMatrix", resizable_ce, matrix_ce); dense_resizable_vector_ce = interface_register(N_INT "DenseResizableVector", dense_vector_ce, resizable_vector_ce); dense_resizable_matrix_ce = interface_register(N_INT "DenseResizableMatrix", dense_matrix_ce, resizable_matrix_ce); sparse_resizable_vector_ce = interface_register(N_INT "SparseResizableVector", sparse_vector_ce, resizable_vector_ce); sparse_resizable_matrix_ce = interface_register(N_INT "SparseResizableMatrix", sparse_matrix_ce, resizable_matrix_ce); non_resizable_ce = interface_register(N_INT "NonResizable"); non_resizable_vector_ce = interface_register(N_INT "NonResizableVector", non_resizable_ce); non_resizable_matrix_ce = interface_register(N_INT "NonResizableMatrix", non_resizable_ce); dense_non_resizable_vector_ce = interface_register(N_INT "DenseNonResizableVector", dense_vector_ce, non_resizable_vector_ce); dense_non_resizable_matrix_ce = interface_register(N_INT "DenseNonResizableMatrix", dense_matrix_ce, non_resizable_matrix_ce); sparse_non_resizable_matrix_ce = interface_register(N_INT "SparseNonResizableMatrix", sparse_matrix_ce, non_resizable_matrix_ce); subview_ce = interface_register(N_INT "Subview"); diagonal_ce = interface_register(N_INT "Diagonal", base_ce, non_resizable_ce, subview_ce); scalar_ce = interface_register(N_INT "Scalar"); } }