// (C) Copyright David Abrahams 2000. Permission to copy, use, modify, sell and // distribute this software is granted provided this copyright notice appears // in all copies. This software is provided "as is" without express or implied // warranty, and with no claim as to its suitability for any purpose. // // The author gratefully acknowleges the support of Dragon Systems, Inc., in // producing this work. // // This file was generated for %d-argument constructors by gen_init_function.py #ifndef INIT_FUNCTION_DWA052000_H_ # define INIT_FUNCTION_DWA052000_H_ # include "pyconfig.h" # include "functions.h" # include "signatures.h" # include namespace py { class ExtensionInstance; class InstanceHolderBase; class Init; template struct Init0; template struct Init1; template struct Init2; template struct Init3; template struct Init4; template struct Init5; template struct InitFunction { static Init* create(Signature0) { return new Init0; } template static Init* create(Signature1) { return new Init1; } template static Init* create(Signature2) { return new Init2; } template static Init* create(Signature3) { return new Init3; } template static Init* create(Signature4) { return new Init4; } template static Init* create(Signature5) { return new Init5; } }; class Init : public Function { private: // override Function hook PyObject* do_call(PyObject* args, PyObject* keywords) const; private: virtual InstanceHolderBase* create_holder(ExtensionInstance* self, PyObject* tail_args, PyObject* keywords) const = 0; }; template struct Init0 : Init { virtual InstanceHolderBase* create_holder(ExtensionInstance* self, PyObject* args, PyObject* /*keywords*/) const { if (!PyArg_ParseTuple(args, const_cast(""))) throw ArgumentError(); return new T(self ); } const char* description() const { return typeid(void (*)()).name(); } }; template struct Init1 : Init { virtual InstanceHolderBase* create_holder(ExtensionInstance* self, PyObject* args, PyObject* /*keywords*/) const { PyObject* a1; if (!PyArg_ParseTuple(args, const_cast("O"), &a1)) throw ArgumentError(); return new T(self, from_python(a1, Type()) ); } const char* description() const { return typeid(void (*)(A1)).name(); } }; template struct Init2 : Init { virtual InstanceHolderBase* create_holder(ExtensionInstance* self, PyObject* args, PyObject* /*keywords*/) const { PyObject* a1; PyObject* a2; if (!PyArg_ParseTuple(args, const_cast("OO"), &a1, &a2)) throw ArgumentError(); return new T(self, from_python(a1, Type()), from_python(a2, Type()) ); } const char* description() const { return typeid(void (*)(A1, A2)).name(); } }; template struct Init3 : Init { virtual InstanceHolderBase* create_holder(ExtensionInstance* self, PyObject* args, PyObject* /*keywords*/) const { PyObject* a1; PyObject* a2; PyObject* a3; if (!PyArg_ParseTuple(args, const_cast("OOO"), &a1, &a2, &a3)) throw ArgumentError(); return new T(self, from_python(a1, Type()), from_python(a2, Type()), from_python(a3, Type()) ); } const char* description() const { return typeid(void (*)(A1, A2, A3)).name(); } }; template struct Init4 : Init { virtual InstanceHolderBase* create_holder(ExtensionInstance* self, PyObject* args, PyObject* /*keywords*/) const { PyObject* a1; PyObject* a2; PyObject* a3; PyObject* a4; if (!PyArg_ParseTuple(args, const_cast("OOOO"), &a1, &a2, &a3, &a4)) throw ArgumentError(); return new T(self, from_python(a1, Type()), from_python(a2, Type()), from_python(a3, Type()), from_python(a4, Type()) ); } const char* description() const { return typeid(void (*)(A1, A2, A3, A4)).name(); } }; template struct Init5 : Init { virtual InstanceHolderBase* create_holder(ExtensionInstance* self, PyObject* args, PyObject* /*keywords*/) const { PyObject* a1; PyObject* a2; PyObject* a3; PyObject* a4; PyObject* a5; if (!PyArg_ParseTuple(args, const_cast("OOOOO"), &a1, &a2, &a3, &a4, &a5)) throw ArgumentError(); return new T(self, from_python(a1, Type()), from_python(a2, Type()), from_python(a3, Type()), from_python(a4, Type()), from_python(a5, Type()) ); } const char* description() const { return typeid(void (*)(A1, A2, A3, A4, A5)).name(); } }; } #endif // INIT_FUNCTION_DWA052000_H_