Server IP : 104.21.38.3 / Your IP : 172.68.242.47 Web Server : Apache System : Linux krdc-ubuntu-s-2vcpu-4gb-amd-blr1-01.localdomain 5.15.0-142-generic #152-Ubuntu SMP Mon May 19 10:54:31 UTC 2025 x86_64 User : www ( 1000) PHP Version : 7.4.33 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /www/server/mysql/src/boost/boost_1_59_0/boost/python/ |
Upload File : |
// Copyright David Abrahams 2002. // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef ENUM_DWA200298_HPP # define ENUM_DWA200298_HPP # include <boost/python/detail/prefix.hpp> # include <boost/python/object/enum_base.hpp> # include <boost/python/converter/rvalue_from_python_data.hpp> # include <boost/python/converter/registered.hpp> namespace boost { namespace python { template <class T> struct enum_ : public objects::enum_base { typedef objects::enum_base base; // Declare a new enumeration type in the current scope() enum_(char const* name, char const* doc = 0); // Add a new enumeration value with the given name and value. inline enum_<T>& value(char const* name, T); // Add all of the defined enumeration values to the current scope with the // same names used here. inline enum_<T>& export_values(); private: static PyObject* to_python(void const* x); static void* convertible_from_python(PyObject* obj); static void construct(PyObject* obj, converter::rvalue_from_python_stage1_data* data); }; template <class T> inline enum_<T>::enum_(char const* name, char const* doc ) : base( name , &enum_<T>::to_python , &enum_<T>::convertible_from_python , &enum_<T>::construct , type_id<T>() , doc ) { } // This is the conversion function that gets registered for converting // these enums to Python. template <class T> PyObject* enum_<T>::to_python(void const* x) { return base::to_python( converter::registered<T>::converters.m_class_object , static_cast<long>(*(T const*)x)); } // // The following two static functions serve as the elements of an // rvalue from_python converter for the enumeration type. // // This checks that a given Python object can be converted to the // enumeration type. template <class T> void* enum_<T>::convertible_from_python(PyObject* obj) { return PyObject_IsInstance( obj , upcast<PyObject>( converter::registered<T>::converters.m_class_object)) ? obj : 0; } // Constructs an instance of the enumeration type in the from_python // data. template <class T> void enum_<T>::construct(PyObject* obj, converter::rvalue_from_python_stage1_data* data) { #if PY_VERSION_HEX >= 0x03000000 T x = static_cast<T>(PyLong_AS_LONG(obj)); #else T x = static_cast<T>(PyInt_AS_LONG(obj)); #endif void* const storage = ((converter::rvalue_from_python_storage<T>*)data)->storage.bytes; new (storage) T(x); data->convertible = storage; } template <class T> inline enum_<T>& enum_<T>::value(char const* name, T x) { this->add_value(name, static_cast<long>(x)); return *this; } template <class T> inline enum_<T>& enum_<T>::export_values() { this->base::export_values(); return *this; } }} // namespace boost::python #endif // ENUM_DWA200298_HPP