2
0
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:
Ullrich Köthe
2000-10-20 08:48:01 +00:00
parent 6b0144ef31
commit 90fca10190
6 changed files with 407 additions and 1 deletions

View File

@@ -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];