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/instantiable.hh

42 lines
1014 B
C++

//
// php-armadillo/instantiable.hh
//
// @Author CismonX
//
#ifndef PHP_ARMA_INSTANTIABLE_HH
#define PHP_ARMA_INSTANTIABLE_HH
#include "php_arma.hh"
namespace php_arma
{
template <typename ChildT, bool IsSubview> struct instantiable;
template <typename ChildT>
struct instantiable<ChildT, false>
{
template <typename... Ts>
zend_always_inline
static zend_object *create(Ts&&... args)
{
return object_create_ctor<typename ChildT::native_t>(ChildT::ce, &ChildT::handlers, args...);
}
};
template <typename ChildT>
struct instantiable<ChildT, true>
{
template <typename... Ts>
zend_always_inline
static zend_object *create(zval *parent, Ts&&... args)
{
auto zobj = object_create_ctor<typename ChildT::native_t>(ChildT::ce, &ChildT::handlers, args...);
object_set_property(zobj, 0, parent);
return zobj;
}
};
}
#endif // !PHP_ARMA_INSTANTIABLE_HH