mirror of
https://github.com/boostorg/python.git
synced 2026-01-24 06:02:14 +00:00
initial development of NumericDispatcher
[SVN r8022]
This commit is contained in:
76
module.h
76
module.h
@@ -12,6 +12,7 @@
|
||||
# include "pyconfig.h"
|
||||
# include "pyptr.h"
|
||||
# include "functions.h"
|
||||
# include "numeric.h"
|
||||
|
||||
namespace py {
|
||||
|
||||
@@ -33,6 +34,81 @@ public:
|
||||
{
|
||||
add(new_wrapped_function(fn), name);
|
||||
}
|
||||
|
||||
template <class T1, class U1, class T2, class U2>
|
||||
void
|
||||
def_numeric(ExtensionClass<T1,U1> * l, ExtensionClass<T2,U2> * r,
|
||||
char const * name)
|
||||
{
|
||||
PyTypeObject * tl = l;
|
||||
PyTypeObject * tr = r;
|
||||
|
||||
l->def(coerce_wrapped, "__coerce__");
|
||||
r->def(coerce_wrapped, "__coerce__");
|
||||
if(strcmp(name,"__add__") == 0)
|
||||
{
|
||||
NumericDispatcher::add_functions[std::make_pair(tl,tr)] =
|
||||
NumericOperators<T1, T2>::add;
|
||||
l->def(py::NumericDispatcher::add, "__add__");
|
||||
r->def(py::NumericDispatcher::add, "__add__");
|
||||
}
|
||||
else if(strcmp(name,"__sub__") == 0)
|
||||
{
|
||||
NumericDispatcher::sub_functions[std::make_pair(tl,tr)] =
|
||||
NumericOperators<T1, T2>::subtract;
|
||||
l->def(py::NumericDispatcher::sub, "__sub__");
|
||||
r->def(py::NumericDispatcher::sub, "__sub__");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template <class T1, class U1>
|
||||
void
|
||||
def_numeric(ExtensionClass<T1,U1> * l, PyTypeObject * r,
|
||||
char const * name)
|
||||
{
|
||||
PyTypeObject * tl = l;
|
||||
PyTypeObject * tr = r;
|
||||
|
||||
l->def(coerce_wrapped, "__coerce__");
|
||||
if(strcmp(name,"__add__") == 0)
|
||||
{
|
||||
NumericDispatcher::add_functions[std::make_pair(tl,tr)] =
|
||||
NumericOperators<T1, int>::add;
|
||||
l->def(py::NumericDispatcher::add, "__add__");
|
||||
}
|
||||
else if(strcmp(name,"__sub__") == 0)
|
||||
{
|
||||
NumericDispatcher::sub_functions[std::make_pair(tl,tr)] =
|
||||
NumericOperators<T1, int>::subtract;
|
||||
l->def(py::NumericDispatcher::sub, "__sub__");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template <class T2, class U2>
|
||||
void
|
||||
def_numeric(PyTypeObject * l, ExtensionClass<T2,U2> * r,
|
||||
char const * name)
|
||||
{
|
||||
PyTypeObject * tl = l;
|
||||
PyTypeObject * tr = r;
|
||||
|
||||
r->def(coerce_wrapped, "__coerce__");
|
||||
if(strcmp(name,"__add__") == 0)
|
||||
{
|
||||
NumericDispatcher::add_functions[std::make_pair(tl,tr)] =
|
||||
NumericOperators<int, T2>::add;
|
||||
r->def(py::NumericDispatcher::add, "__add__");
|
||||
}
|
||||
else if(strcmp(name,"__sub__") == 0)
|
||||
{
|
||||
NumericDispatcher::sub_functions[std::make_pair(tl,tr)] =
|
||||
NumericOperators<int, T2>::subtract;
|
||||
r->def(py::NumericDispatcher::sub, "__sub__");
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
PyObject* m_module;
|
||||
static PyMethodDef initial_methods[1];
|
||||
|
||||
Reference in New Issue
Block a user