This repository has been archived on 2020-06-07. You can view files and clone it, but cannot push or open issues or pull requests.
php-armadillo/src/interfaces.cc
2019-03-22 16:30:44 +08:00

83 lines
4.4 KiB
C++

//
// 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 <typename... Ts>
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",
subview_ce);
}
}