/* This file was generated by PyBindGen 0.15.0.809 */
#define PY_SSIZE_T_CLEAN
#include <Python.h>
#include <stddef.h>


#if PY_VERSION_HEX < 0x020400F0

#define PyEval_ThreadsInitialized() 1

#define Py_CLEAR(op)				\
        do {                            	\
                if (op) {			\
                        PyObject *tmp = (PyObject *)(op);	\
                        (op) = NULL;		\
                        Py_DECREF(tmp);		\
                }				\
        } while (0)


#define Py_VISIT(op)							\
        do { 								\
                if (op) {						\
                        int vret = visit((PyObject *)(op), arg);	\
                        if (vret)					\
                                return vret;				\
                }							\
        } while (0)

#endif



#if PY_VERSION_HEX < 0x020500F0

typedef int Py_ssize_t;
# define PY_SSIZE_T_MAX INT_MAX
# define PY_SSIZE_T_MIN INT_MIN
typedef inquiry lenfunc;
typedef intargfunc ssizeargfunc;
typedef intobjargproc ssizeobjargproc;

#endif


#if     __GNUC__ > 2
# define PYBINDGEN_UNUSED(param) param __attribute__((__unused__))
#elif     __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
# define PYBINDGEN_UNUSED(param) __attribute__((__unused__)) param
#else
# define PYBINDGEN_UNUSED(param) param
#endif  /* !__GNUC__ */

typedef enum _PyBindGenWrapperFlags {
   PYBINDGEN_WRAPPER_FLAG_NONE = 0,
   PYBINDGEN_WRAPPER_FLAG_OBJECT_NOT_OWNED = (1<<0),
} PyBindGenWrapperFlags;


#include "ns3/uan-module.h"
#include <ostream>
#include <sstream>
#include <typeinfo>
#include <map>
#include <iostream>
/* --- forward declarations --- */


typedef struct {
    PyObject_HEAD
    ns3::Address *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3Address;


extern PyTypeObject *_PyNs3Address_Type;
#define PyNs3Address_Type (*_PyNs3Address_Type)

extern std::map<void*, PyObject*> *_PyNs3Address_wrapper_registry;
#define PyNs3Address_wrapper_registry (*_PyNs3Address_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::AttributeConstructionList *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3AttributeConstructionList;


extern PyTypeObject *_PyNs3AttributeConstructionList_Type;
#define PyNs3AttributeConstructionList_Type (*_PyNs3AttributeConstructionList_Type)

extern std::map<void*, PyObject*> *_PyNs3AttributeConstructionList_wrapper_registry;
#define PyNs3AttributeConstructionList_wrapper_registry (*_PyNs3AttributeConstructionList_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::AttributeConstructionList::Item *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3AttributeConstructionListItem;


extern PyTypeObject *_PyNs3AttributeConstructionListItem_Type;
#define PyNs3AttributeConstructionListItem_Type (*_PyNs3AttributeConstructionListItem_Type)

extern std::map<void*, PyObject*> *_PyNs3AttributeConstructionListItem_wrapper_registry;
#define PyNs3AttributeConstructionListItem_wrapper_registry (*_PyNs3AttributeConstructionListItem_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::Buffer *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3Buffer;


extern PyTypeObject *_PyNs3Buffer_Type;
#define PyNs3Buffer_Type (*_PyNs3Buffer_Type)

extern std::map<void*, PyObject*> *_PyNs3Buffer_wrapper_registry;
#define PyNs3Buffer_wrapper_registry (*_PyNs3Buffer_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::Buffer::Iterator *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3BufferIterator;


extern PyTypeObject *_PyNs3BufferIterator_Type;
#define PyNs3BufferIterator_Type (*_PyNs3BufferIterator_Type)

extern std::map<void*, PyObject*> *_PyNs3BufferIterator_wrapper_registry;
#define PyNs3BufferIterator_wrapper_registry (*_PyNs3BufferIterator_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::ByteTagIterator *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3ByteTagIterator;


extern PyTypeObject *_PyNs3ByteTagIterator_Type;
#define PyNs3ByteTagIterator_Type (*_PyNs3ByteTagIterator_Type)

extern std::map<void*, PyObject*> *_PyNs3ByteTagIterator_wrapper_registry;
#define PyNs3ByteTagIterator_wrapper_registry (*_PyNs3ByteTagIterator_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::ByteTagIterator::Item *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3ByteTagIteratorItem;


extern PyTypeObject *_PyNs3ByteTagIteratorItem_Type;
#define PyNs3ByteTagIteratorItem_Type (*_PyNs3ByteTagIteratorItem_Type)

extern std::map<void*, PyObject*> *_PyNs3ByteTagIteratorItem_wrapper_registry;
#define PyNs3ByteTagIteratorItem_wrapper_registry (*_PyNs3ByteTagIteratorItem_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::ByteTagList *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3ByteTagList;


extern PyTypeObject *_PyNs3ByteTagList_Type;
#define PyNs3ByteTagList_Type (*_PyNs3ByteTagList_Type)

extern std::map<void*, PyObject*> *_PyNs3ByteTagList_wrapper_registry;
#define PyNs3ByteTagList_wrapper_registry (*_PyNs3ByteTagList_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::ByteTagList::Iterator *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3ByteTagListIterator;


extern PyTypeObject *_PyNs3ByteTagListIterator_Type;
#define PyNs3ByteTagListIterator_Type (*_PyNs3ByteTagListIterator_Type)

extern std::map<void*, PyObject*> *_PyNs3ByteTagListIterator_wrapper_registry;
#define PyNs3ByteTagListIterator_wrapper_registry (*_PyNs3ByteTagListIterator_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::ByteTagList::Iterator::Item *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3ByteTagListIteratorItem;


extern PyTypeObject *_PyNs3ByteTagListIteratorItem_Type;
#define PyNs3ByteTagListIteratorItem_Type (*_PyNs3ByteTagListIteratorItem_Type)

extern std::map<void*, PyObject*> *_PyNs3ByteTagListIteratorItem_wrapper_registry;
#define PyNs3ByteTagListIteratorItem_wrapper_registry (*_PyNs3ByteTagListIteratorItem_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::CallbackBase *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3CallbackBase;


extern PyTypeObject *_PyNs3CallbackBase_Type;
#define PyNs3CallbackBase_Type (*_PyNs3CallbackBase_Type)

extern std::map<void*, PyObject*> *_PyNs3CallbackBase_wrapper_registry;
#define PyNs3CallbackBase_wrapper_registry (*_PyNs3CallbackBase_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::DeviceEnergyModelContainer *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3DeviceEnergyModelContainer;


extern PyTypeObject *_PyNs3DeviceEnergyModelContainer_Type;
#define PyNs3DeviceEnergyModelContainer_Type (*_PyNs3DeviceEnergyModelContainer_Type)

extern std::map<void*, PyObject*> *_PyNs3DeviceEnergyModelContainer_wrapper_registry;
#define PyNs3DeviceEnergyModelContainer_wrapper_registry (*_PyNs3DeviceEnergyModelContainer_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::DeviceEnergyModelHelper *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3DeviceEnergyModelHelper;


extern PyTypeObject *_PyNs3DeviceEnergyModelHelper_Type;
#define PyNs3DeviceEnergyModelHelper_Type (*_PyNs3DeviceEnergyModelHelper_Type)

class PyNs3DeviceEnergyModelHelper__PythonHelper : public ns3::DeviceEnergyModelHelper
{
public:
    PyObject *m_pyself;

    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3DeviceEnergyModelHelper__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }

};

extern std::map<void*, PyObject*> *_PyNs3DeviceEnergyModelHelper_wrapper_registry;
#define PyNs3DeviceEnergyModelHelper_wrapper_registry (*_PyNs3DeviceEnergyModelHelper_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::EnergySourceHelper *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3EnergySourceHelper;


extern PyTypeObject *_PyNs3EnergySourceHelper_Type;
#define PyNs3EnergySourceHelper_Type (*_PyNs3EnergySourceHelper_Type)

class PyNs3EnergySourceHelper__PythonHelper : public ns3::EnergySourceHelper
{
public:
    PyObject *m_pyself;

    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3EnergySourceHelper__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }

};

extern std::map<void*, PyObject*> *_PyNs3EnergySourceHelper_wrapper_registry;
#define PyNs3EnergySourceHelper_wrapper_registry (*_PyNs3EnergySourceHelper_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::EventId *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3EventId;


extern PyTypeObject *_PyNs3EventId_Type;
#define PyNs3EventId_Type (*_PyNs3EventId_Type)

extern std::map<void*, PyObject*> *_PyNs3EventId_wrapper_registry;
#define PyNs3EventId_wrapper_registry (*_PyNs3EventId_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::Ipv4Address *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3Ipv4Address;


extern PyTypeObject *_PyNs3Ipv4Address_Type;
#define PyNs3Ipv4Address_Type (*_PyNs3Ipv4Address_Type)

extern std::map<void*, PyObject*> *_PyNs3Ipv4Address_wrapper_registry;
#define PyNs3Ipv4Address_wrapper_registry (*_PyNs3Ipv4Address_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::Ipv4Mask *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3Ipv4Mask;


extern PyTypeObject *_PyNs3Ipv4Mask_Type;
#define PyNs3Ipv4Mask_Type (*_PyNs3Ipv4Mask_Type)

extern std::map<void*, PyObject*> *_PyNs3Ipv4Mask_wrapper_registry;
#define PyNs3Ipv4Mask_wrapper_registry (*_PyNs3Ipv4Mask_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::Ipv6Address *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3Ipv6Address;


extern PyTypeObject *_PyNs3Ipv6Address_Type;
#define PyNs3Ipv6Address_Type (*_PyNs3Ipv6Address_Type)

extern std::map<void*, PyObject*> *_PyNs3Ipv6Address_wrapper_registry;
#define PyNs3Ipv6Address_wrapper_registry (*_PyNs3Ipv6Address_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::Ipv6Prefix *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3Ipv6Prefix;


extern PyTypeObject *_PyNs3Ipv6Prefix_Type;
#define PyNs3Ipv6Prefix_Type (*_PyNs3Ipv6Prefix_Type)

extern std::map<void*, PyObject*> *_PyNs3Ipv6Prefix_wrapper_registry;
#define PyNs3Ipv6Prefix_wrapper_registry (*_PyNs3Ipv6Prefix_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::NetDeviceContainer *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3NetDeviceContainer;


extern PyTypeObject *_PyNs3NetDeviceContainer_Type;
#define PyNs3NetDeviceContainer_Type (*_PyNs3NetDeviceContainer_Type)

extern std::map<void*, PyObject*> *_PyNs3NetDeviceContainer_wrapper_registry;
#define PyNs3NetDeviceContainer_wrapper_registry (*_PyNs3NetDeviceContainer_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::NodeContainer *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3NodeContainer;


extern PyTypeObject *_PyNs3NodeContainer_Type;
#define PyNs3NodeContainer_Type (*_PyNs3NodeContainer_Type)

extern std::map<void*, PyObject*> *_PyNs3NodeContainer_wrapper_registry;
#define PyNs3NodeContainer_wrapper_registry (*_PyNs3NodeContainer_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::ObjectBase *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3ObjectBase;


extern PyTypeObject *_PyNs3ObjectBase_Type;
#define PyNs3ObjectBase_Type (*_PyNs3ObjectBase_Type)

class PyNs3ObjectBase__PythonHelper : public ns3::ObjectBase
{
public:
    PyObject *m_pyself;

    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3ObjectBase__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }

};

extern std::map<void*, PyObject*> *_PyNs3ObjectBase_wrapper_registry;
#define PyNs3ObjectBase_wrapper_registry (*_PyNs3ObjectBase_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::ObjectDeleter *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3ObjectDeleter;


extern PyTypeObject *_PyNs3ObjectDeleter_Type;
#define PyNs3ObjectDeleter_Type (*_PyNs3ObjectDeleter_Type)

extern std::map<void*, PyObject*> *_PyNs3ObjectDeleter_wrapper_registry;
#define PyNs3ObjectDeleter_wrapper_registry (*_PyNs3ObjectDeleter_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::ObjectFactory *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3ObjectFactory;


extern PyTypeObject *_PyNs3ObjectFactory_Type;
#define PyNs3ObjectFactory_Type (*_PyNs3ObjectFactory_Type)

extern std::map<void*, PyObject*> *_PyNs3ObjectFactory_wrapper_registry;
#define PyNs3ObjectFactory_wrapper_registry (*_PyNs3ObjectFactory_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::PacketMetadata *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3PacketMetadata;


extern PyTypeObject *_PyNs3PacketMetadata_Type;
#define PyNs3PacketMetadata_Type (*_PyNs3PacketMetadata_Type)

extern std::map<void*, PyObject*> *_PyNs3PacketMetadata_wrapper_registry;
#define PyNs3PacketMetadata_wrapper_registry (*_PyNs3PacketMetadata_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::PacketMetadata::Item *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3PacketMetadataItem;


extern PyTypeObject *_PyNs3PacketMetadataItem_Type;
#define PyNs3PacketMetadataItem_Type (*_PyNs3PacketMetadataItem_Type)

extern std::map<void*, PyObject*> *_PyNs3PacketMetadataItem_wrapper_registry;
#define PyNs3PacketMetadataItem_wrapper_registry (*_PyNs3PacketMetadataItem_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::PacketMetadata::ItemIterator *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3PacketMetadataItemIterator;


extern PyTypeObject *_PyNs3PacketMetadataItemIterator_Type;
#define PyNs3PacketMetadataItemIterator_Type (*_PyNs3PacketMetadataItemIterator_Type)

extern std::map<void*, PyObject*> *_PyNs3PacketMetadataItemIterator_wrapper_registry;
#define PyNs3PacketMetadataItemIterator_wrapper_registry (*_PyNs3PacketMetadataItemIterator_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::PacketTagIterator *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3PacketTagIterator;


extern PyTypeObject *_PyNs3PacketTagIterator_Type;
#define PyNs3PacketTagIterator_Type (*_PyNs3PacketTagIterator_Type)

extern std::map<void*, PyObject*> *_PyNs3PacketTagIterator_wrapper_registry;
#define PyNs3PacketTagIterator_wrapper_registry (*_PyNs3PacketTagIterator_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::PacketTagIterator::Item *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3PacketTagIteratorItem;


extern PyTypeObject *_PyNs3PacketTagIteratorItem_Type;
#define PyNs3PacketTagIteratorItem_Type (*_PyNs3PacketTagIteratorItem_Type)

extern std::map<void*, PyObject*> *_PyNs3PacketTagIteratorItem_wrapper_registry;
#define PyNs3PacketTagIteratorItem_wrapper_registry (*_PyNs3PacketTagIteratorItem_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::PacketTagList *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3PacketTagList;


extern PyTypeObject *_PyNs3PacketTagList_Type;
#define PyNs3PacketTagList_Type (*_PyNs3PacketTagList_Type)

extern std::map<void*, PyObject*> *_PyNs3PacketTagList_wrapper_registry;
#define PyNs3PacketTagList_wrapper_registry (*_PyNs3PacketTagList_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::PacketTagList::TagData *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3PacketTagListTagData;


extern PyTypeObject *_PyNs3PacketTagListTagData_Type;
#define PyNs3PacketTagListTagData_Type (*_PyNs3PacketTagListTagData_Type)

extern std::map<void*, PyObject*> *_PyNs3PacketTagListTagData_wrapper_registry;
#define PyNs3PacketTagListTagData_wrapper_registry (*_PyNs3PacketTagListTagData_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::SimpleRefCount< ns3::Object, ns3::ObjectBase, ns3::ObjectDeleter > *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter;


extern PyTypeObject *_PyNs3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_Type;
#define PyNs3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_Type (*_PyNs3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter_Type)



#include <map>
#include <string>
#include <typeinfo>
#if defined(__GNUC__) && __GNUC__ >= 3
# include <cxxabi.h>
#endif

#define PBG_TYPEMAP_DEBUG 0

namespace pybindgen {

class TypeMap
{
   std::map<std::string, PyTypeObject *> m_map;

public:

   TypeMap() {}

   void register_wrapper(const std::type_info &cpp_type_info, PyTypeObject *python_wrapper)
   {

#if PBG_TYPEMAP_DEBUG
   std::cerr << "register_wrapper(this=" << this << ", type_name=" << cpp_type_info.name()
             << ", python_wrapper=" << python_wrapper->tp_name << ")" << std::endl;
#endif

       m_map[std::string(cpp_type_info.name())] = python_wrapper;
   }



   PyTypeObject * lookup_wrapper(const std::type_info &cpp_type_info, PyTypeObject *fallback_wrapper)
   {

#if PBG_TYPEMAP_DEBUG
   std::cerr << "lookup_wrapper(this=" << this << ", type_name=" << cpp_type_info.name() << ")" << std::endl;
#endif

       PyTypeObject *python_wrapper = m_map[cpp_type_info.name()];
       if (python_wrapper)
           return python_wrapper;
       else {
#if defined(__GNUC__) && __GNUC__ >= 3

           // Get closest (in the single inheritance tree provided by cxxabi.h)
           // registered python wrapper.
           const abi::__si_class_type_info *_typeinfo =
               dynamic_cast<const abi::__si_class_type_info*> (&cpp_type_info);
#if PBG_TYPEMAP_DEBUG
          std::cerr << "  -> looking at C++ type " << _typeinfo->name() << std::endl;
#endif
           while (_typeinfo && (python_wrapper = m_map[std::string(_typeinfo->name())]) == 0) {
               _typeinfo = dynamic_cast<const abi::__si_class_type_info*> (_typeinfo->__base_type);
#if PBG_TYPEMAP_DEBUG
               std::cerr << "  -> looking at C++ type " << _typeinfo->name() << std::endl;
#endif
           }

#if PBG_TYPEMAP_DEBUG
          if (python_wrapper) {
              std::cerr << "  -> found match " << std::endl;
          } else {
              std::cerr << "  -> return fallback wrapper" << std::endl;
          }
#endif

           return python_wrapper? python_wrapper : fallback_wrapper;

#else // non gcc 3+ compilers can only match against explicitly registered classes, not hidden subclasses
           return fallback_wrapper;
#endif
       }
   }
};

}


extern pybindgen::TypeMap *_PyNs3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter__typeid_map;

#define PyNs3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter__typeid_map (*_PyNs3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter__typeid_map)


typedef struct {
    PyObject_HEAD
    ns3::Simulator *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3Simulator;


extern PyTypeObject *_PyNs3Simulator_Type;
#define PyNs3Simulator_Type (*_PyNs3Simulator_Type)

extern std::map<void*, PyObject*> *_PyNs3Simulator_wrapper_registry;
#define PyNs3Simulator_wrapper_registry (*_PyNs3Simulator_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::Tag *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3Tag;


extern PyTypeObject *_PyNs3Tag_Type;
#define PyNs3Tag_Type (*_PyNs3Tag_Type)


typedef struct {
    PyObject_HEAD
    ns3::TagBuffer *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3TagBuffer;


extern PyTypeObject *_PyNs3TagBuffer_Type;
#define PyNs3TagBuffer_Type (*_PyNs3TagBuffer_Type)

extern std::map<void*, PyObject*> *_PyNs3TagBuffer_wrapper_registry;
#define PyNs3TagBuffer_wrapper_registry (*_PyNs3TagBuffer_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::TracedValue< double > *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3TracedValue__Double;


extern PyTypeObject *_PyNs3TracedValue__Double_Type;
#define PyNs3TracedValue__Double_Type (*_PyNs3TracedValue__Double_Type)

extern std::map<void*, PyObject*> *_PyNs3TracedValue__Double_wrapper_registry;
#define PyNs3TracedValue__Double_wrapper_registry (*_PyNs3TracedValue__Double_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::TypeId *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3TypeId;


extern PyTypeObject *_PyNs3TypeId_Type;
#define PyNs3TypeId_Type (*_PyNs3TypeId_Type)

extern std::map<void*, PyObject*> *_PyNs3TypeId_wrapper_registry;
#define PyNs3TypeId_wrapper_registry (*_PyNs3TypeId_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::TypeId::AttributeInformation *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3TypeIdAttributeInformation;


extern PyTypeObject *_PyNs3TypeIdAttributeInformation_Type;
#define PyNs3TypeIdAttributeInformation_Type (*_PyNs3TypeIdAttributeInformation_Type)

extern std::map<void*, PyObject*> *_PyNs3TypeIdAttributeInformation_wrapper_registry;
#define PyNs3TypeIdAttributeInformation_wrapper_registry (*_PyNs3TypeIdAttributeInformation_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::TypeId::TraceSourceInformation *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3TypeIdTraceSourceInformation;


extern PyTypeObject *_PyNs3TypeIdTraceSourceInformation_Type;
#define PyNs3TypeIdTraceSourceInformation_Type (*_PyNs3TypeIdTraceSourceInformation_Type)

extern std::map<void*, PyObject*> *_PyNs3TypeIdTraceSourceInformation_wrapper_registry;
#define PyNs3TypeIdTraceSourceInformation_wrapper_registry (*_PyNs3TypeIdTraceSourceInformation_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::Vector2D *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3Vector2D;


extern PyTypeObject *_PyNs3Vector2D_Type;
#define PyNs3Vector2D_Type (*_PyNs3Vector2D_Type)

extern std::map<void*, PyObject*> *_PyNs3Vector2D_wrapper_registry;
#define PyNs3Vector2D_wrapper_registry (*_PyNs3Vector2D_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::Vector3D *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3Vector3D;


extern PyTypeObject *_PyNs3Vector3D_Type;
#define PyNs3Vector3D_Type (*_PyNs3Vector3D_Type)

extern std::map<void*, PyObject*> *_PyNs3Vector3D_wrapper_registry;
#define PyNs3Vector3D_wrapper_registry (*_PyNs3Vector3D_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::empty *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3Empty;


extern PyTypeObject *_PyNs3Empty_Type;
#define PyNs3Empty_Type (*_PyNs3Empty_Type)

extern std::map<void*, PyObject*> *_PyNs3Empty_wrapper_registry;
#define PyNs3Empty_wrapper_registry (*_PyNs3Empty_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::int64x64_t *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3Int64x64_t;


extern PyTypeObject *_PyNs3Int64x64_t_Type;
#define PyNs3Int64x64_t_Type (*_PyNs3Int64x64_t_Type)

extern std::map<void*, PyObject*> *_PyNs3Int64x64_t_wrapper_registry;
#define PyNs3Int64x64_t_wrapper_registry (*_PyNs3Int64x64_t_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::Chunk *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3Chunk;


extern PyTypeObject *_PyNs3Chunk_Type;
#define PyNs3Chunk_Type (*_PyNs3Chunk_Type)


typedef struct {
    PyObject_HEAD
    ns3::Header *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3Header;


extern PyTypeObject *_PyNs3Header_Type;
#define PyNs3Header_Type (*_PyNs3Header_Type)


typedef struct {
    PyObject_HEAD
    ns3::Object *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3Object;


extern PyTypeObject *_PyNs3Object_Type;
#define PyNs3Object_Type (*_PyNs3Object_Type)

class PyNs3Object__PythonHelper : public ns3::Object
{
public:
    PyObject *m_pyself;

    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3Object__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }

};


typedef struct {
    PyObject_HEAD
    ns3::Object::AggregateIterator *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3ObjectAggregateIterator;


extern PyTypeObject *_PyNs3ObjectAggregateIterator_Type;
#define PyNs3ObjectAggregateIterator_Type (*_PyNs3ObjectAggregateIterator_Type)

extern std::map<void*, PyObject*> *_PyNs3ObjectAggregateIterator_wrapper_registry;
#define PyNs3ObjectAggregateIterator_wrapper_registry (*_PyNs3ObjectAggregateIterator_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::RandomVariableStream *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3RandomVariableStream;


extern PyTypeObject *_PyNs3RandomVariableStream_Type;
#define PyNs3RandomVariableStream_Type (*_PyNs3RandomVariableStream_Type)

class PyNs3RandomVariableStream__PythonHelper : public ns3::RandomVariableStream
{
public:
    PyObject *m_pyself;

    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3RandomVariableStream__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }

};


typedef struct {
    PyObject_HEAD
    ns3::SequentialRandomVariable *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3SequentialRandomVariable;


extern PyTypeObject *_PyNs3SequentialRandomVariable_Type;
#define PyNs3SequentialRandomVariable_Type (*_PyNs3SequentialRandomVariable_Type)

class PyNs3SequentialRandomVariable__PythonHelper : public ns3::SequentialRandomVariable
{
public:
    PyObject *m_pyself;

    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3SequentialRandomVariable__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }

};


typedef struct {
    PyObject_HEAD
    ns3::SimpleRefCount< ns3::AttributeAccessor, ns3::empty, ns3::DefaultDeleter<ns3::AttributeAccessor> > *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3SimpleRefCount__Ns3AttributeAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeAccessor__gt__;


extern PyTypeObject *_PyNs3SimpleRefCount__Ns3AttributeAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeAccessor__gt___Type;
#define PyNs3SimpleRefCount__Ns3AttributeAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeAccessor__gt___Type (*_PyNs3SimpleRefCount__Ns3AttributeAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeAccessor__gt___Type)


extern pybindgen::TypeMap *_PyNs3SimpleRefCount__Ns3AttributeAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeAccessor__gt____typeid_map;

#define PyNs3SimpleRefCount__Ns3AttributeAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeAccessor__gt____typeid_map (*_PyNs3SimpleRefCount__Ns3AttributeAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeAccessor__gt____typeid_map)


typedef struct {
    PyObject_HEAD
    ns3::SimpleRefCount< ns3::AttributeChecker, ns3::empty, ns3::DefaultDeleter<ns3::AttributeChecker> > *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3SimpleRefCount__Ns3AttributeChecker_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeChecker__gt__;


extern PyTypeObject *_PyNs3SimpleRefCount__Ns3AttributeChecker_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeChecker__gt___Type;
#define PyNs3SimpleRefCount__Ns3AttributeChecker_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeChecker__gt___Type (*_PyNs3SimpleRefCount__Ns3AttributeChecker_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeChecker__gt___Type)


extern pybindgen::TypeMap *_PyNs3SimpleRefCount__Ns3AttributeChecker_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeChecker__gt____typeid_map;

#define PyNs3SimpleRefCount__Ns3AttributeChecker_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeChecker__gt____typeid_map (*_PyNs3SimpleRefCount__Ns3AttributeChecker_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeChecker__gt____typeid_map)


typedef struct {
    PyObject_HEAD
    ns3::SimpleRefCount< ns3::AttributeValue, ns3::empty, ns3::DefaultDeleter<ns3::AttributeValue> > *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt__;


extern PyTypeObject *_PyNs3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___Type;
#define PyNs3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___Type (*_PyNs3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt___Type)


extern pybindgen::TypeMap *_PyNs3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt____typeid_map;

#define PyNs3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt____typeid_map (*_PyNs3SimpleRefCount__Ns3AttributeValue_Ns3Empty_Ns3DefaultDeleter__lt__ns3AttributeValue__gt____typeid_map)


typedef struct {
    PyObject_HEAD
    ns3::SimpleRefCount< ns3::CallbackImplBase, ns3::empty, ns3::DefaultDeleter<ns3::CallbackImplBase> > *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt__;


extern PyTypeObject *_PyNs3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___Type;
#define PyNs3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___Type (*_PyNs3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt___Type)


extern pybindgen::TypeMap *_PyNs3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt____typeid_map;

#define PyNs3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt____typeid_map (*_PyNs3SimpleRefCount__Ns3CallbackImplBase_Ns3Empty_Ns3DefaultDeleter__lt__ns3CallbackImplBase__gt____typeid_map)


typedef struct {
    PyObject_HEAD
    ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt__;


extern PyTypeObject *_PyNs3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___Type;
#define PyNs3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___Type (*_PyNs3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___Type)


extern pybindgen::TypeMap *_PyNs3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt____typeid_map;

#define PyNs3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt____typeid_map (*_PyNs3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt____typeid_map)


typedef struct {
    PyObject_HEAD
    ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt__;


extern PyTypeObject *_PyNs3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___Type;
#define PyNs3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___Type (*_PyNs3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___Type)


extern pybindgen::TypeMap *_PyNs3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt____typeid_map;

#define PyNs3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt____typeid_map (*_PyNs3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt____typeid_map)


typedef struct {
    PyObject_HEAD
    ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> > *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt__;


extern PyTypeObject *_PyNs3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___Type;
#define PyNs3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___Type (*_PyNs3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___Type)


extern pybindgen::TypeMap *_PyNs3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt____typeid_map;

#define PyNs3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt____typeid_map (*_PyNs3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt____typeid_map)


typedef struct {
    PyObject_HEAD
    ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt__;


extern PyTypeObject *_PyNs3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___Type;
#define PyNs3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___Type (*_PyNs3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___Type)


extern pybindgen::TypeMap *_PyNs3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt____typeid_map;

#define PyNs3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt____typeid_map (*_PyNs3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt____typeid_map)


typedef struct {
    PyObject_HEAD
    ns3::Time *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3Time;


extern PyTypeObject *_PyNs3Time_Type;
#define PyNs3Time_Type (*_PyNs3Time_Type)

extern std::map<void*, PyObject*> *_PyNs3Time_wrapper_registry;
#define PyNs3Time_wrapper_registry (*_PyNs3Time_wrapper_registry)

typedef struct {
    PyObject_HEAD
    ns3::TraceSourceAccessor *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3TraceSourceAccessor;


extern PyTypeObject *_PyNs3TraceSourceAccessor_Type;
#define PyNs3TraceSourceAccessor_Type (*_PyNs3TraceSourceAccessor_Type)


typedef struct {
    PyObject_HEAD
    ns3::Trailer *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3Trailer;


extern PyTypeObject *_PyNs3Trailer_Type;
#define PyNs3Trailer_Type (*_PyNs3Trailer_Type)


typedef struct {
    PyObject_HEAD
    ns3::TriangularRandomVariable *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3TriangularRandomVariable;


extern PyTypeObject *_PyNs3TriangularRandomVariable_Type;
#define PyNs3TriangularRandomVariable_Type (*_PyNs3TriangularRandomVariable_Type)

class PyNs3TriangularRandomVariable__PythonHelper : public ns3::TriangularRandomVariable
{
public:
    PyObject *m_pyself;

    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3TriangularRandomVariable__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }

};


typedef struct {
    PyObject_HEAD
    ns3::UniformRandomVariable *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3UniformRandomVariable;


extern PyTypeObject *_PyNs3UniformRandomVariable_Type;
#define PyNs3UniformRandomVariable_Type (*_PyNs3UniformRandomVariable_Type)

class PyNs3UniformRandomVariable__PythonHelper : public ns3::UniformRandomVariable
{
public:
    PyObject *m_pyself;

    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3UniformRandomVariable__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }

};


typedef struct {
    PyObject_HEAD
    ns3::WeibullRandomVariable *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3WeibullRandomVariable;


extern PyTypeObject *_PyNs3WeibullRandomVariable_Type;
#define PyNs3WeibullRandomVariable_Type (*_PyNs3WeibullRandomVariable_Type)

class PyNs3WeibullRandomVariable__PythonHelper : public ns3::WeibullRandomVariable
{
public:
    PyObject *m_pyself;

    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3WeibullRandomVariable__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }

};


typedef struct {
    PyObject_HEAD
    ns3::ZetaRandomVariable *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3ZetaRandomVariable;


extern PyTypeObject *_PyNs3ZetaRandomVariable_Type;
#define PyNs3ZetaRandomVariable_Type (*_PyNs3ZetaRandomVariable_Type)

class PyNs3ZetaRandomVariable__PythonHelper : public ns3::ZetaRandomVariable
{
public:
    PyObject *m_pyself;

    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3ZetaRandomVariable__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }

};


typedef struct {
    PyObject_HEAD
    ns3::ZipfRandomVariable *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3ZipfRandomVariable;


extern PyTypeObject *_PyNs3ZipfRandomVariable_Type;
#define PyNs3ZipfRandomVariable_Type (*_PyNs3ZipfRandomVariable_Type)

class PyNs3ZipfRandomVariable__PythonHelper : public ns3::ZipfRandomVariable
{
public:
    PyObject *m_pyself;

    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3ZipfRandomVariable__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }

};


typedef struct {
    PyObject_HEAD
    ns3::AttributeAccessor *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3AttributeAccessor;


extern PyTypeObject *_PyNs3AttributeAccessor_Type;
#define PyNs3AttributeAccessor_Type (*_PyNs3AttributeAccessor_Type)


typedef struct {
    PyObject_HEAD
    ns3::AttributeChecker *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3AttributeChecker;


extern PyTypeObject *_PyNs3AttributeChecker_Type;
#define PyNs3AttributeChecker_Type (*_PyNs3AttributeChecker_Type)


typedef struct {
    PyObject_HEAD
    ns3::AttributeValue *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3AttributeValue;


extern PyTypeObject *_PyNs3AttributeValue_Type;
#define PyNs3AttributeValue_Type (*_PyNs3AttributeValue_Type)


typedef struct {
    PyObject_HEAD
    ns3::BooleanChecker *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3BooleanChecker;


extern PyTypeObject *_PyNs3BooleanChecker_Type;
#define PyNs3BooleanChecker_Type (*_PyNs3BooleanChecker_Type)


typedef struct {
    PyObject_HEAD
    ns3::BooleanValue *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3BooleanValue;


extern PyTypeObject *_PyNs3BooleanValue_Type;
#define PyNs3BooleanValue_Type (*_PyNs3BooleanValue_Type)


typedef struct {
    PyObject_HEAD
    ns3::CallbackChecker *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3CallbackChecker;


extern PyTypeObject *_PyNs3CallbackChecker_Type;
#define PyNs3CallbackChecker_Type (*_PyNs3CallbackChecker_Type)


typedef struct {
    PyObject_HEAD
    ns3::CallbackImplBase *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3CallbackImplBase;


extern PyTypeObject *_PyNs3CallbackImplBase_Type;
#define PyNs3CallbackImplBase_Type (*_PyNs3CallbackImplBase_Type)


typedef struct {
    PyObject_HEAD
    ns3::CallbackValue *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3CallbackValue;


extern PyTypeObject *_PyNs3CallbackValue_Type;
#define PyNs3CallbackValue_Type (*_PyNs3CallbackValue_Type)


typedef struct {
    PyObject_HEAD
    ns3::Channel *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3Channel;


extern PyTypeObject *_PyNs3Channel_Type;
#define PyNs3Channel_Type (*_PyNs3Channel_Type)

class PyNs3Channel__PythonHelper : public ns3::Channel
{
public:
    PyObject *m_pyself;

    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3Channel__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }

};


typedef struct {
    PyObject_HEAD
    ns3::ConstantRandomVariable *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3ConstantRandomVariable;


extern PyTypeObject *_PyNs3ConstantRandomVariable_Type;
#define PyNs3ConstantRandomVariable_Type (*_PyNs3ConstantRandomVariable_Type)

class PyNs3ConstantRandomVariable__PythonHelper : public ns3::ConstantRandomVariable
{
public:
    PyObject *m_pyself;

    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3ConstantRandomVariable__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }

};


typedef struct {
    PyObject_HEAD
    ns3::DeterministicRandomVariable *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3DeterministicRandomVariable;


extern PyTypeObject *_PyNs3DeterministicRandomVariable_Type;
#define PyNs3DeterministicRandomVariable_Type (*_PyNs3DeterministicRandomVariable_Type)

class PyNs3DeterministicRandomVariable__PythonHelper : public ns3::DeterministicRandomVariable
{
public:
    PyObject *m_pyself;

    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3DeterministicRandomVariable__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }

};


typedef struct {
    PyObject_HEAD
    ns3::DeviceEnergyModel *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3DeviceEnergyModel;


extern PyTypeObject *_PyNs3DeviceEnergyModel_Type;
#define PyNs3DeviceEnergyModel_Type (*_PyNs3DeviceEnergyModel_Type)

class PyNs3DeviceEnergyModel__PythonHelper : public ns3::DeviceEnergyModel
{
public:
    PyObject *m_pyself;

    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3DeviceEnergyModel__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }

};


typedef struct {
    PyObject_HEAD
    ns3::DoubleValue *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3DoubleValue;


extern PyTypeObject *_PyNs3DoubleValue_Type;
#define PyNs3DoubleValue_Type (*_PyNs3DoubleValue_Type)


typedef struct {
    PyObject_HEAD
    ns3::EmpiricalRandomVariable *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3EmpiricalRandomVariable;


extern PyTypeObject *_PyNs3EmpiricalRandomVariable_Type;
#define PyNs3EmpiricalRandomVariable_Type (*_PyNs3EmpiricalRandomVariable_Type)

class PyNs3EmpiricalRandomVariable__PythonHelper : public ns3::EmpiricalRandomVariable
{
public:
    PyObject *m_pyself;

    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3EmpiricalRandomVariable__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }

};


typedef struct {
    PyObject_HEAD
    ns3::EmptyAttributeValue *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3EmptyAttributeValue;


extern PyTypeObject *_PyNs3EmptyAttributeValue_Type;
#define PyNs3EmptyAttributeValue_Type (*_PyNs3EmptyAttributeValue_Type)


typedef struct {
    PyObject_HEAD
    ns3::EnergySource *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3EnergySource;


extern PyTypeObject *_PyNs3EnergySource_Type;
#define PyNs3EnergySource_Type (*_PyNs3EnergySource_Type)

class PyNs3EnergySource__PythonHelper : public ns3::EnergySource
{
public:
    PyObject *m_pyself;

    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3EnergySource__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }

};


typedef struct {
    PyObject_HEAD
    ns3::EnergySourceContainer *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3EnergySourceContainer;


extern PyTypeObject *_PyNs3EnergySourceContainer_Type;
#define PyNs3EnergySourceContainer_Type (*_PyNs3EnergySourceContainer_Type)

class PyNs3EnergySourceContainer__PythonHelper : public ns3::EnergySourceContainer
{
public:
    PyObject *m_pyself;

    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3EnergySourceContainer__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }

};


typedef struct {
    PyObject_HEAD
    ns3::EnumChecker *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3EnumChecker;


extern PyTypeObject *_PyNs3EnumChecker_Type;
#define PyNs3EnumChecker_Type (*_PyNs3EnumChecker_Type)


typedef struct {
    PyObject_HEAD
    ns3::EnumValue *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3EnumValue;


extern PyTypeObject *_PyNs3EnumValue_Type;
#define PyNs3EnumValue_Type (*_PyNs3EnumValue_Type)


typedef struct {
    PyObject_HEAD
    ns3::ErlangRandomVariable *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3ErlangRandomVariable;


extern PyTypeObject *_PyNs3ErlangRandomVariable_Type;
#define PyNs3ErlangRandomVariable_Type (*_PyNs3ErlangRandomVariable_Type)

class PyNs3ErlangRandomVariable__PythonHelper : public ns3::ErlangRandomVariable
{
public:
    PyObject *m_pyself;

    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3ErlangRandomVariable__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }

};


typedef struct {
    PyObject_HEAD
    ns3::EventImpl *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3EventImpl;


extern PyTypeObject *_PyNs3EventImpl_Type;
#define PyNs3EventImpl_Type (*_PyNs3EventImpl_Type)


typedef struct {
    PyObject_HEAD
    ns3::ExponentialRandomVariable *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3ExponentialRandomVariable;


extern PyTypeObject *_PyNs3ExponentialRandomVariable_Type;
#define PyNs3ExponentialRandomVariable_Type (*_PyNs3ExponentialRandomVariable_Type)

class PyNs3ExponentialRandomVariable__PythonHelper : public ns3::ExponentialRandomVariable
{
public:
    PyObject *m_pyself;

    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3ExponentialRandomVariable__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }

};


typedef struct {
    PyObject_HEAD
    ns3::GammaRandomVariable *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3GammaRandomVariable;


extern PyTypeObject *_PyNs3GammaRandomVariable_Type;
#define PyNs3GammaRandomVariable_Type (*_PyNs3GammaRandomVariable_Type)

class PyNs3GammaRandomVariable__PythonHelper : public ns3::GammaRandomVariable
{
public:
    PyObject *m_pyself;

    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3GammaRandomVariable__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }

};


typedef struct {
    PyObject_HEAD
    ns3::IntegerValue *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3IntegerValue;


extern PyTypeObject *_PyNs3IntegerValue_Type;
#define PyNs3IntegerValue_Type (*_PyNs3IntegerValue_Type)


typedef struct {
    PyObject_HEAD
    ns3::Ipv4AddressChecker *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3Ipv4AddressChecker;


extern PyTypeObject *_PyNs3Ipv4AddressChecker_Type;
#define PyNs3Ipv4AddressChecker_Type (*_PyNs3Ipv4AddressChecker_Type)


typedef struct {
    PyObject_HEAD
    ns3::Ipv4AddressValue *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3Ipv4AddressValue;


extern PyTypeObject *_PyNs3Ipv4AddressValue_Type;
#define PyNs3Ipv4AddressValue_Type (*_PyNs3Ipv4AddressValue_Type)


typedef struct {
    PyObject_HEAD
    ns3::Ipv4MaskChecker *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3Ipv4MaskChecker;


extern PyTypeObject *_PyNs3Ipv4MaskChecker_Type;
#define PyNs3Ipv4MaskChecker_Type (*_PyNs3Ipv4MaskChecker_Type)


typedef struct {
    PyObject_HEAD
    ns3::Ipv4MaskValue *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3Ipv4MaskValue;


extern PyTypeObject *_PyNs3Ipv4MaskValue_Type;
#define PyNs3Ipv4MaskValue_Type (*_PyNs3Ipv4MaskValue_Type)


typedef struct {
    PyObject_HEAD
    ns3::Ipv6AddressChecker *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3Ipv6AddressChecker;


extern PyTypeObject *_PyNs3Ipv6AddressChecker_Type;
#define PyNs3Ipv6AddressChecker_Type (*_PyNs3Ipv6AddressChecker_Type)


typedef struct {
    PyObject_HEAD
    ns3::Ipv6AddressValue *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3Ipv6AddressValue;


extern PyTypeObject *_PyNs3Ipv6AddressValue_Type;
#define PyNs3Ipv6AddressValue_Type (*_PyNs3Ipv6AddressValue_Type)


typedef struct {
    PyObject_HEAD
    ns3::Ipv6PrefixChecker *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3Ipv6PrefixChecker;


extern PyTypeObject *_PyNs3Ipv6PrefixChecker_Type;
#define PyNs3Ipv6PrefixChecker_Type (*_PyNs3Ipv6PrefixChecker_Type)


typedef struct {
    PyObject_HEAD
    ns3::Ipv6PrefixValue *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3Ipv6PrefixValue;


extern PyTypeObject *_PyNs3Ipv6PrefixValue_Type;
#define PyNs3Ipv6PrefixValue_Type (*_PyNs3Ipv6PrefixValue_Type)


typedef struct {
    PyObject_HEAD
    ns3::LogNormalRandomVariable *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3LogNormalRandomVariable;


extern PyTypeObject *_PyNs3LogNormalRandomVariable_Type;
#define PyNs3LogNormalRandomVariable_Type (*_PyNs3LogNormalRandomVariable_Type)

class PyNs3LogNormalRandomVariable__PythonHelper : public ns3::LogNormalRandomVariable
{
public:
    PyObject *m_pyself;

    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3LogNormalRandomVariable__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }

};


typedef struct {
    PyObject_HEAD
    ns3::MobilityModel *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3MobilityModel;


extern PyTypeObject *_PyNs3MobilityModel_Type;
#define PyNs3MobilityModel_Type (*_PyNs3MobilityModel_Type)

class PyNs3MobilityModel__PythonHelper : public ns3::MobilityModel
{
public:
    PyObject *m_pyself;

    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3MobilityModel__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }

};


typedef struct {
    PyObject_HEAD
    ns3::NetDevice *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3NetDevice;


extern PyTypeObject *_PyNs3NetDevice_Type;
#define PyNs3NetDevice_Type (*_PyNs3NetDevice_Type)


typedef struct {
    PyObject_HEAD
    ns3::NixVector *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3NixVector;


extern PyTypeObject *_PyNs3NixVector_Type;
#define PyNs3NixVector_Type (*_PyNs3NixVector_Type)


typedef struct {
    PyObject_HEAD
    ns3::Node *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3Node;


extern PyTypeObject *_PyNs3Node_Type;
#define PyNs3Node_Type (*_PyNs3Node_Type)

class PyNs3Node__PythonHelper : public ns3::Node
{
public:
    PyObject *m_pyself;

    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3Node__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }

};


typedef struct {
    PyObject_HEAD
    ns3::NormalRandomVariable *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3NormalRandomVariable;


extern PyTypeObject *_PyNs3NormalRandomVariable_Type;
#define PyNs3NormalRandomVariable_Type (*_PyNs3NormalRandomVariable_Type)

class PyNs3NormalRandomVariable__PythonHelper : public ns3::NormalRandomVariable
{
public:
    PyObject *m_pyself;

    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3NormalRandomVariable__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }

};


typedef struct {
    PyObject_HEAD
    ns3::ObjectFactoryChecker *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3ObjectFactoryChecker;


extern PyTypeObject *_PyNs3ObjectFactoryChecker_Type;
#define PyNs3ObjectFactoryChecker_Type (*_PyNs3ObjectFactoryChecker_Type)


typedef struct {
    PyObject_HEAD
    ns3::ObjectFactoryValue *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3ObjectFactoryValue;


extern PyTypeObject *_PyNs3ObjectFactoryValue_Type;
#define PyNs3ObjectFactoryValue_Type (*_PyNs3ObjectFactoryValue_Type)


typedef struct {
    PyObject_HEAD
    ns3::Packet *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3Packet;


extern PyTypeObject *_PyNs3Packet_Type;
#define PyNs3Packet_Type (*_PyNs3Packet_Type)


typedef struct {
    PyObject_HEAD
    ns3::ParetoRandomVariable *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3ParetoRandomVariable;


extern PyTypeObject *_PyNs3ParetoRandomVariable_Type;
#define PyNs3ParetoRandomVariable_Type (*_PyNs3ParetoRandomVariable_Type)

class PyNs3ParetoRandomVariable__PythonHelper : public ns3::ParetoRandomVariable
{
public:
    PyObject *m_pyself;

    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3ParetoRandomVariable__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }

};


typedef struct {
    PyObject_HEAD
    ns3::PointerChecker *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3PointerChecker;


extern PyTypeObject *_PyNs3PointerChecker_Type;
#define PyNs3PointerChecker_Type (*_PyNs3PointerChecker_Type)


typedef struct {
    PyObject_HEAD
    ns3::PointerValue *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3PointerValue;


extern PyTypeObject *_PyNs3PointerValue_Type;
#define PyNs3PointerValue_Type (*_PyNs3PointerValue_Type)


typedef struct {
    PyObject_HEAD
    ns3::TimeChecker *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3TimeChecker;


extern PyTypeObject *_PyNs3TimeChecker_Type;
#define PyNs3TimeChecker_Type (*_PyNs3TimeChecker_Type)


typedef struct {
    PyObject_HEAD
    ns3::TimeValue *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3TimeValue;


extern PyTypeObject *_PyNs3TimeValue_Type;
#define PyNs3TimeValue_Type (*_PyNs3TimeValue_Type)


typedef struct {
    PyObject_HEAD
    ns3::TypeIdChecker *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3TypeIdChecker;


extern PyTypeObject *_PyNs3TypeIdChecker_Type;
#define PyNs3TypeIdChecker_Type (*_PyNs3TypeIdChecker_Type)


typedef struct {
    PyObject_HEAD
    ns3::TypeIdValue *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3TypeIdValue;


extern PyTypeObject *_PyNs3TypeIdValue_Type;
#define PyNs3TypeIdValue_Type (*_PyNs3TypeIdValue_Type)


typedef struct {
    PyObject_HEAD
    ns3::UintegerValue *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3UintegerValue;


extern PyTypeObject *_PyNs3UintegerValue_Type;
#define PyNs3UintegerValue_Type (*_PyNs3UintegerValue_Type)


typedef struct {
    PyObject_HEAD
    ns3::Vector2DChecker *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3Vector2DChecker;


extern PyTypeObject *_PyNs3Vector2DChecker_Type;
#define PyNs3Vector2DChecker_Type (*_PyNs3Vector2DChecker_Type)


typedef struct {
    PyObject_HEAD
    ns3::Vector2DValue *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3Vector2DValue;


extern PyTypeObject *_PyNs3Vector2DValue_Type;
#define PyNs3Vector2DValue_Type (*_PyNs3Vector2DValue_Type)


typedef struct {
    PyObject_HEAD
    ns3::Vector3DChecker *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3Vector3DChecker;


extern PyTypeObject *_PyNs3Vector3DChecker_Type;
#define PyNs3Vector3DChecker_Type (*_PyNs3Vector3DChecker_Type)


typedef struct {
    PyObject_HEAD
    ns3::Vector3DValue *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3Vector3DValue;


extern PyTypeObject *_PyNs3Vector3DValue_Type;
#define PyNs3Vector3DValue_Type (*_PyNs3Vector3DValue_Type)


typedef struct {
    PyObject_HEAD
    ns3::AddressChecker *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3AddressChecker;


extern PyTypeObject *_PyNs3AddressChecker_Type;
#define PyNs3AddressChecker_Type (*_PyNs3AddressChecker_Type)


typedef struct {
    PyObject_HEAD
    ns3::AddressValue *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3AddressValue;


extern PyTypeObject *_PyNs3AddressValue_Type;
#define PyNs3AddressValue_Type (*_PyNs3AddressValue_Type)


typedef struct {
    PyObject_HEAD
    ns3::Reservation *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3Reservation;


extern PyTypeObject PyNs3Reservation_Type;

extern std::map<void*, PyObject*> PyNs3Reservation_wrapper_registry;

typedef struct {
    PyObject_HEAD
    ns3::Tap *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3Tap;


extern PyTypeObject PyNs3Tap_Type;

extern std::map<void*, PyObject*> PyNs3Tap_wrapper_registry;

typedef struct {
    PyObject_HEAD
    ns3::UanAddress *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanAddress;


extern PyTypeObject PyNs3UanAddress_Type;

extern std::map<void*, PyObject*> PyNs3UanAddress_wrapper_registry;

typedef struct {
    PyObject_HEAD
    ns3::UanHelper *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanHelper;


extern PyTypeObject PyNs3UanHelper_Type;

extern std::map<void*, PyObject*> PyNs3UanHelper_wrapper_registry;

typedef struct {
    PyObject_HEAD
    ns3::UanModesList *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanModesList;


extern PyTypeObject PyNs3UanModesList_Type;

extern std::map<void*, PyObject*> PyNs3UanModesList_wrapper_registry;

typedef struct {
    PyObject_HEAD
    ns3::UanPacketArrival *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanPacketArrival;


extern PyTypeObject PyNs3UanPacketArrival_Type;

extern std::map<void*, PyObject*> PyNs3UanPacketArrival_wrapper_registry;

typedef struct {
    PyObject_HEAD
    ns3::UanPdp *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanPdp;


extern PyTypeObject PyNs3UanPdp_Type;

extern std::map<void*, PyObject*> PyNs3UanPdp_wrapper_registry;

typedef struct {
    PyObject_HEAD
    ns3::UanPhyListener *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanPhyListener;


extern PyTypeObject PyNs3UanPhyListener_Type;

class PyNs3UanPhyListener__PythonHelper : public ns3::UanPhyListener
{
public:
    PyObject *m_pyself;
    PyNs3UanPhyListener__PythonHelper()
        : ns3::UanPhyListener(), m_pyself(NULL)
        {}

    PyNs3UanPhyListener__PythonHelper(ns3::UanPhyListener const & arg0)
        : ns3::UanPhyListener(arg0), m_pyself(NULL)
        {}


    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3UanPhyListener__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }


    virtual void NotifyCcaEnd();

    virtual void NotifyCcaStart();

    virtual void NotifyRxEndError();

    virtual void NotifyRxEndOk();

    virtual void NotifyRxStart();

    virtual void NotifyTxStart(ns3::Time duration);
};

extern std::map<void*, PyObject*> PyNs3UanPhyListener_wrapper_registry;

typedef struct {
    PyObject_HEAD
    ns3::UanTxMode *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanTxMode;


extern PyTypeObject PyNs3UanTxMode_Type;

extern std::map<void*, PyObject*> PyNs3UanTxMode_wrapper_registry;

typedef struct {
    PyObject_HEAD
    ns3::UanTxModeFactory *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanTxModeFactory;


extern PyTypeObject PyNs3UanTxModeFactory_Type;

extern std::map<void*, PyObject*> PyNs3UanTxModeFactory_wrapper_registry;

typedef struct {
    PyObject_HEAD
    ns3::AcousticModemEnergyModelHelper *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3AcousticModemEnergyModelHelper;


extern PyTypeObject PyNs3AcousticModemEnergyModelHelper_Type;

class PyNs3AcousticModemEnergyModelHelper__PythonHelper : public ns3::AcousticModemEnergyModelHelper
{
public:
    PyObject *m_pyself;
    PyNs3AcousticModemEnergyModelHelper__PythonHelper(ns3::AcousticModemEnergyModelHelper const & arg0)
        : ns3::AcousticModemEnergyModelHelper(arg0), m_pyself(NULL)
        {}

    PyNs3AcousticModemEnergyModelHelper__PythonHelper()
        : ns3::AcousticModemEnergyModelHelper(), m_pyself(NULL)
        {}


    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3AcousticModemEnergyModelHelper__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }


    virtual ns3::Ptr< ns3::DeviceEnergyModel > DoInstall(ns3::Ptr< ns3::NetDevice > device, ns3::Ptr< ns3::EnergySource > source) const;
};


typedef struct {
    PyObject_HEAD
    ns3::UanHeaderCommon *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanHeaderCommon;


extern PyTypeObject PyNs3UanHeaderCommon_Type;


typedef struct {
    PyObject_HEAD
    ns3::UanHeaderRcAck *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanHeaderRcAck;


extern PyTypeObject PyNs3UanHeaderRcAck_Type;


typedef struct {
    PyObject_HEAD
    ns3::UanHeaderRcCts *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanHeaderRcCts;


extern PyTypeObject PyNs3UanHeaderRcCts_Type;


typedef struct {
    PyObject_HEAD
    ns3::UanHeaderRcCtsGlobal *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanHeaderRcCtsGlobal;


extern PyTypeObject PyNs3UanHeaderRcCtsGlobal_Type;


typedef struct {
    PyObject_HEAD
    ns3::UanHeaderRcData *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanHeaderRcData;


extern PyTypeObject PyNs3UanHeaderRcData_Type;


typedef struct {
    PyObject_HEAD
    ns3::UanHeaderRcRts *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanHeaderRcRts;


extern PyTypeObject PyNs3UanHeaderRcRts_Type;


typedef struct {
    PyObject_HEAD
    ns3::UanMac *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanMac;


extern PyTypeObject PyNs3UanMac_Type;


typedef struct {
    PyObject_HEAD
    ns3::UanMacAloha *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanMacAloha;


extern PyTypeObject PyNs3UanMacAloha_Type;

class PyNs3UanMacAloha__PythonHelper : public ns3::UanMacAloha
{
public:
    PyObject *m_pyself;
    PyNs3UanMacAloha__PythonHelper(ns3::UanMacAloha const & arg0)
        : ns3::UanMacAloha(arg0), m_pyself(NULL)
        {}

    PyNs3UanMacAloha__PythonHelper()
        : ns3::UanMacAloha(), m_pyself(NULL)
        {}


    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3UanMacAloha__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }


    static PyObject * _wrap_NotifyConstructionCompleted(PyNs3UanMacAloha *self);
    inline void NotifyConstructionCompleted__parent_caller()
    { ns3::ObjectBase::NotifyConstructionCompleted(); }

    static PyObject * _wrap_NotifyNewAggregate(PyNs3UanMacAloha *self);
    inline void NotifyNewAggregate__parent_caller()
    { ns3::Object::NotifyNewAggregate(); }

    static PyObject * _wrap_DoStart(PyNs3UanMacAloha *self);
    inline void DoStart__parent_caller()
    { ns3::Object::DoStart(); }

    static PyObject * _wrap_DoDispose(PyNs3UanMacAloha *self);
    inline void DoDispose__parent_caller()
    { ns3::UanMacAloha::DoDispose(); }

    virtual int64_t AssignStreams(int64_t stream);

    virtual void AttachPhy(ns3::Ptr< ns3::UanPhy > phy);

    virtual void Clear();

    virtual bool Enqueue(ns3::Ptr< ns3::Packet > pkt, ns3::Address const & dest, uint16_t protocolNumber);

    virtual ns3::Address GetAddress();

    virtual ns3::Address GetBroadcast() const;

    virtual void SetAddress(ns3::UanAddress addr);

    virtual void DoDispose();

    virtual ns3::TypeId GetInstanceTypeId() const;

    virtual void DoStart();

    virtual void NotifyNewAggregate();

    virtual void NotifyConstructionCompleted();

    static ns3::TypeId GetTypeId (void)
    {
      static ns3::TypeId tid = ns3::TypeId ("PyNs3UanMacAloha__PythonHelper")
        .SetParent< ns3::UanMacAloha > ()
        ;
      return tid;
    }
};

NS_OBJECT_ENSURE_REGISTERED (PyNs3UanMacAloha__PythonHelper);


typedef struct {
    PyObject_HEAD
    ns3::UanMacCw *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanMacCw;


extern PyTypeObject PyNs3UanMacCw_Type;

class PyNs3UanMacCw__PythonHelper : public ns3::UanMacCw
{
public:
    PyObject *m_pyself;
    PyNs3UanMacCw__PythonHelper(ns3::UanMacCw const & arg0)
        : ns3::UanMacCw(arg0), m_pyself(NULL)
        {}

    PyNs3UanMacCw__PythonHelper()
        : ns3::UanMacCw(), m_pyself(NULL)
        {}


    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3UanMacCw__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }


    static PyObject * _wrap_NotifyConstructionCompleted(PyNs3UanMacCw *self);
    inline void NotifyConstructionCompleted__parent_caller()
    { ns3::ObjectBase::NotifyConstructionCompleted(); }

    static PyObject * _wrap_NotifyNewAggregate(PyNs3UanMacCw *self);
    inline void NotifyNewAggregate__parent_caller()
    { ns3::Object::NotifyNewAggregate(); }

    static PyObject * _wrap_DoStart(PyNs3UanMacCw *self);
    inline void DoStart__parent_caller()
    { ns3::Object::DoStart(); }

    static PyObject * _wrap_DoDispose(PyNs3UanMacCw *self);
    inline void DoDispose__parent_caller()
    { ns3::UanMacCw::DoDispose(); }

    virtual int64_t AssignStreams(int64_t stream);

    virtual void AttachPhy(ns3::Ptr< ns3::UanPhy > phy);

    virtual void Clear();

    virtual bool Enqueue(ns3::Ptr< ns3::Packet > pkt, ns3::Address const & dest, uint16_t protocolNumber);

    virtual ns3::Address GetAddress();

    virtual ns3::Address GetBroadcast() const;

    virtual uint32_t GetCw();

    virtual ns3::Time GetSlotTime();

    virtual void NotifyCcaEnd();

    virtual void NotifyCcaStart();

    virtual void NotifyRxEndError();

    virtual void NotifyRxEndOk();

    virtual void NotifyRxStart();

    virtual void NotifyTxStart(ns3::Time duration);

    virtual void SetAddress(ns3::UanAddress addr);

    virtual void SetCw(uint32_t cw);

    virtual void SetSlotTime(ns3::Time duration);

    virtual void DoDispose();

    virtual ns3::TypeId GetInstanceTypeId() const;

    virtual void DoStart();

    virtual void NotifyNewAggregate();

    virtual void NotifyConstructionCompleted();

    static ns3::TypeId GetTypeId (void)
    {
      static ns3::TypeId tid = ns3::TypeId ("PyNs3UanMacCw__PythonHelper")
        .SetParent< ns3::UanMacCw > ()
        ;
      return tid;
    }
};

NS_OBJECT_ENSURE_REGISTERED (PyNs3UanMacCw__PythonHelper);


typedef struct {
    PyObject_HEAD
    ns3::UanMacRc *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanMacRc;


extern PyTypeObject PyNs3UanMacRc_Type;

class PyNs3UanMacRc__PythonHelper : public ns3::UanMacRc
{
public:
    PyObject *m_pyself;
    PyNs3UanMacRc__PythonHelper(ns3::UanMacRc const & arg0)
        : ns3::UanMacRc(arg0), m_pyself(NULL)
        {}

    PyNs3UanMacRc__PythonHelper()
        : ns3::UanMacRc(), m_pyself(NULL)
        {}


    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3UanMacRc__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }


    static PyObject * _wrap_NotifyConstructionCompleted(PyNs3UanMacRc *self);
    inline void NotifyConstructionCompleted__parent_caller()
    { ns3::ObjectBase::NotifyConstructionCompleted(); }

    static PyObject * _wrap_NotifyNewAggregate(PyNs3UanMacRc *self);
    inline void NotifyNewAggregate__parent_caller()
    { ns3::Object::NotifyNewAggregate(); }

    static PyObject * _wrap_DoStart(PyNs3UanMacRc *self);
    inline void DoStart__parent_caller()
    { ns3::Object::DoStart(); }

    static PyObject * _wrap_DoDispose(PyNs3UanMacRc *self);
    inline void DoDispose__parent_caller()
    { ns3::UanMacRc::DoDispose(); }

    virtual int64_t AssignStreams(int64_t stream);

    virtual void AttachPhy(ns3::Ptr< ns3::UanPhy > phy);

    virtual void Clear();

    virtual bool Enqueue(ns3::Ptr< ns3::Packet > pkt, ns3::Address const & dest, uint16_t protocolNumber);

    virtual ns3::Address GetAddress();

    virtual ns3::Address GetBroadcast() const;

    virtual void SetAddress(ns3::UanAddress addr);

    virtual void DoDispose();

    virtual ns3::TypeId GetInstanceTypeId() const;

    virtual void DoStart();

    virtual void NotifyNewAggregate();

    virtual void NotifyConstructionCompleted();

    static ns3::TypeId GetTypeId (void)
    {
      static ns3::TypeId tid = ns3::TypeId ("PyNs3UanMacRc__PythonHelper")
        .SetParent< ns3::UanMacRc > ()
        ;
      return tid;
    }
};

NS_OBJECT_ENSURE_REGISTERED (PyNs3UanMacRc__PythonHelper);


typedef struct {
    PyObject_HEAD
    ns3::UanMacRcGw *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanMacRcGw;


extern PyTypeObject PyNs3UanMacRcGw_Type;

class PyNs3UanMacRcGw__PythonHelper : public ns3::UanMacRcGw
{
public:
    PyObject *m_pyself;
    PyNs3UanMacRcGw__PythonHelper(ns3::UanMacRcGw const & arg0)
        : ns3::UanMacRcGw(arg0), m_pyself(NULL)
        {}

    PyNs3UanMacRcGw__PythonHelper()
        : ns3::UanMacRcGw(), m_pyself(NULL)
        {}


    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3UanMacRcGw__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }


    static PyObject * _wrap_NotifyConstructionCompleted(PyNs3UanMacRcGw *self);
    inline void NotifyConstructionCompleted__parent_caller()
    { ns3::ObjectBase::NotifyConstructionCompleted(); }

    static PyObject * _wrap_NotifyNewAggregate(PyNs3UanMacRcGw *self);
    inline void NotifyNewAggregate__parent_caller()
    { ns3::Object::NotifyNewAggregate(); }

    static PyObject * _wrap_DoStart(PyNs3UanMacRcGw *self);
    inline void DoStart__parent_caller()
    { ns3::Object::DoStart(); }

    static PyObject * _wrap_DoDispose(PyNs3UanMacRcGw *self);
    inline void DoDispose__parent_caller()
    { ns3::UanMacRcGw::DoDispose(); }

    virtual int64_t AssignStreams(int64_t stream);

    virtual void AttachPhy(ns3::Ptr< ns3::UanPhy > phy);

    virtual void Clear();

    virtual bool Enqueue(ns3::Ptr< ns3::Packet > pkt, ns3::Address const & dest, uint16_t protocolNumber);

    virtual ns3::Address GetAddress();

    virtual ns3::Address GetBroadcast() const;

    virtual void SetAddress(ns3::UanAddress addr);

    virtual void DoDispose();

    virtual ns3::TypeId GetInstanceTypeId() const;

    virtual void DoStart();

    virtual void NotifyNewAggregate();

    virtual void NotifyConstructionCompleted();

    static ns3::TypeId GetTypeId (void)
    {
      static ns3::TypeId tid = ns3::TypeId ("PyNs3UanMacRcGw__PythonHelper")
        .SetParent< ns3::UanMacRcGw > ()
        ;
      return tid;
    }
};

NS_OBJECT_ENSURE_REGISTERED (PyNs3UanMacRcGw__PythonHelper);


typedef struct {
    PyObject_HEAD
    ns3::UanNoiseModel *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanNoiseModel;


extern PyTypeObject PyNs3UanNoiseModel_Type;

class PyNs3UanNoiseModel__PythonHelper : public ns3::UanNoiseModel
{
public:
    PyObject *m_pyself;
    PyNs3UanNoiseModel__PythonHelper()
        : ns3::UanNoiseModel(), m_pyself(NULL)
        {}

    PyNs3UanNoiseModel__PythonHelper(ns3::UanNoiseModel const & arg0)
        : ns3::UanNoiseModel(arg0), m_pyself(NULL)
        {}


    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3UanNoiseModel__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }


    static PyObject * _wrap_NotifyConstructionCompleted(PyNs3UanNoiseModel *self);
    inline void NotifyConstructionCompleted__parent_caller()
    { ns3::ObjectBase::NotifyConstructionCompleted(); }

    static PyObject * _wrap_NotifyNewAggregate(PyNs3UanNoiseModel *self);
    inline void NotifyNewAggregate__parent_caller()
    { ns3::Object::NotifyNewAggregate(); }

    static PyObject * _wrap_DoStart(PyNs3UanNoiseModel *self);
    inline void DoStart__parent_caller()
    { ns3::Object::DoStart(); }

    virtual void Clear();

    virtual void DoDispose();

    virtual double GetNoiseDbHz(double fKhz) const;

    virtual ns3::TypeId GetInstanceTypeId() const;

    virtual void DoStart();

    virtual void NotifyNewAggregate();

    virtual void NotifyConstructionCompleted();

    static ns3::TypeId GetTypeId (void)
    {
      static ns3::TypeId tid = ns3::TypeId ("PyNs3UanNoiseModel__PythonHelper")
        .SetParent< ns3::UanNoiseModel > ()
        ;
      return tid;
    }
};

NS_OBJECT_ENSURE_REGISTERED (PyNs3UanNoiseModel__PythonHelper);


typedef struct {
    PyObject_HEAD
    ns3::UanNoiseModelDefault *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanNoiseModelDefault;


extern PyTypeObject PyNs3UanNoiseModelDefault_Type;

class PyNs3UanNoiseModelDefault__PythonHelper : public ns3::UanNoiseModelDefault
{
public:
    PyObject *m_pyself;
    PyNs3UanNoiseModelDefault__PythonHelper(ns3::UanNoiseModelDefault const & arg0)
        : ns3::UanNoiseModelDefault(arg0), m_pyself(NULL)
        {}

    PyNs3UanNoiseModelDefault__PythonHelper()
        : ns3::UanNoiseModelDefault(), m_pyself(NULL)
        {}


    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3UanNoiseModelDefault__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }


    static PyObject * _wrap_NotifyConstructionCompleted(PyNs3UanNoiseModelDefault *self);
    inline void NotifyConstructionCompleted__parent_caller()
    { ns3::ObjectBase::NotifyConstructionCompleted(); }

    static PyObject * _wrap_NotifyNewAggregate(PyNs3UanNoiseModelDefault *self);
    inline void NotifyNewAggregate__parent_caller()
    { ns3::Object::NotifyNewAggregate(); }

    static PyObject * _wrap_DoStart(PyNs3UanNoiseModelDefault *self);
    inline void DoStart__parent_caller()
    { ns3::Object::DoStart(); }

    virtual double GetNoiseDbHz(double fKhz) const;

    virtual void Clear();

    virtual void DoDispose();

    virtual ns3::TypeId GetInstanceTypeId() const;

    virtual void DoStart();

    virtual void NotifyNewAggregate();

    virtual void NotifyConstructionCompleted();

    static ns3::TypeId GetTypeId (void)
    {
      static ns3::TypeId tid = ns3::TypeId ("PyNs3UanNoiseModelDefault__PythonHelper")
        .SetParent< ns3::UanNoiseModelDefault > ()
        ;
      return tid;
    }
};

NS_OBJECT_ENSURE_REGISTERED (PyNs3UanNoiseModelDefault__PythonHelper);


typedef struct {
    PyObject_HEAD
    ns3::UanPhy *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanPhy;


extern PyTypeObject PyNs3UanPhy_Type;


typedef struct {
    PyObject_HEAD
    ns3::UanPhyCalcSinr *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanPhyCalcSinr;


extern PyTypeObject PyNs3UanPhyCalcSinr_Type;

class PyNs3UanPhyCalcSinr__PythonHelper : public ns3::UanPhyCalcSinr
{
public:
    PyObject *m_pyself;
    PyNs3UanPhyCalcSinr__PythonHelper()
        : ns3::UanPhyCalcSinr(), m_pyself(NULL)
        {}

    PyNs3UanPhyCalcSinr__PythonHelper(ns3::UanPhyCalcSinr const & arg0)
        : ns3::UanPhyCalcSinr(arg0), m_pyself(NULL)
        {}


    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3UanPhyCalcSinr__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }


    static PyObject * _wrap_NotifyConstructionCompleted(PyNs3UanPhyCalcSinr *self);
    inline void NotifyConstructionCompleted__parent_caller()
    { ns3::ObjectBase::NotifyConstructionCompleted(); }

    static PyObject * _wrap_NotifyNewAggregate(PyNs3UanPhyCalcSinr *self);
    inline void NotifyNewAggregate__parent_caller()
    { ns3::Object::NotifyNewAggregate(); }

    static PyObject * _wrap_DoStart(PyNs3UanPhyCalcSinr *self);
    inline void DoStart__parent_caller()
    { ns3::Object::DoStart(); }

    virtual double CalcSinrDb(ns3::Ptr< ns3::Packet > pkt, ns3::Time arrTime, double rxPowerDb, double ambNoiseDb, ns3::UanTxMode mode, ns3::UanPdp pdp, std::list< ns3::UanPacketArrival > const & arrivalList) const;

    virtual void Clear();

    virtual void DoDispose();

    virtual ns3::TypeId GetInstanceTypeId() const;

    virtual void DoStart();

    virtual void NotifyNewAggregate();

    virtual void NotifyConstructionCompleted();

    static ns3::TypeId GetTypeId (void)
    {
      static ns3::TypeId tid = ns3::TypeId ("PyNs3UanPhyCalcSinr__PythonHelper")
        .SetParent< ns3::UanPhyCalcSinr > ()
        ;
      return tid;
    }
};

NS_OBJECT_ENSURE_REGISTERED (PyNs3UanPhyCalcSinr__PythonHelper);


typedef struct {
    PyObject_HEAD
    ns3::UanPhyCalcSinrDefault *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanPhyCalcSinrDefault;


extern PyTypeObject PyNs3UanPhyCalcSinrDefault_Type;

class PyNs3UanPhyCalcSinrDefault__PythonHelper : public ns3::UanPhyCalcSinrDefault
{
public:
    PyObject *m_pyself;
    PyNs3UanPhyCalcSinrDefault__PythonHelper(ns3::UanPhyCalcSinrDefault const & arg0)
        : ns3::UanPhyCalcSinrDefault(arg0), m_pyself(NULL)
        {}

    PyNs3UanPhyCalcSinrDefault__PythonHelper()
        : ns3::UanPhyCalcSinrDefault(), m_pyself(NULL)
        {}


    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3UanPhyCalcSinrDefault__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }


    static PyObject * _wrap_NotifyConstructionCompleted(PyNs3UanPhyCalcSinrDefault *self);
    inline void NotifyConstructionCompleted__parent_caller()
    { ns3::ObjectBase::NotifyConstructionCompleted(); }

    static PyObject * _wrap_NotifyNewAggregate(PyNs3UanPhyCalcSinrDefault *self);
    inline void NotifyNewAggregate__parent_caller()
    { ns3::Object::NotifyNewAggregate(); }

    static PyObject * _wrap_DoStart(PyNs3UanPhyCalcSinrDefault *self);
    inline void DoStart__parent_caller()
    { ns3::Object::DoStart(); }

    virtual double CalcSinrDb(ns3::Ptr< ns3::Packet > pkt, ns3::Time arrTime, double rxPowerDb, double ambNoiseDb, ns3::UanTxMode mode, ns3::UanPdp pdp, std::list< ns3::UanPacketArrival > const & arrivalList) const;

    virtual void DoDispose();

    virtual void Clear();

    virtual ns3::TypeId GetInstanceTypeId() const;

    virtual void DoStart();

    virtual void NotifyNewAggregate();

    virtual void NotifyConstructionCompleted();

    static ns3::TypeId GetTypeId (void)
    {
      static ns3::TypeId tid = ns3::TypeId ("PyNs3UanPhyCalcSinrDefault__PythonHelper")
        .SetParent< ns3::UanPhyCalcSinrDefault > ()
        ;
      return tid;
    }
};

NS_OBJECT_ENSURE_REGISTERED (PyNs3UanPhyCalcSinrDefault__PythonHelper);


typedef struct {
    PyObject_HEAD
    ns3::UanPhyCalcSinrDual *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanPhyCalcSinrDual;


extern PyTypeObject PyNs3UanPhyCalcSinrDual_Type;

class PyNs3UanPhyCalcSinrDual__PythonHelper : public ns3::UanPhyCalcSinrDual
{
public:
    PyObject *m_pyself;
    PyNs3UanPhyCalcSinrDual__PythonHelper(ns3::UanPhyCalcSinrDual const & arg0)
        : ns3::UanPhyCalcSinrDual(arg0), m_pyself(NULL)
        {}

    PyNs3UanPhyCalcSinrDual__PythonHelper()
        : ns3::UanPhyCalcSinrDual(), m_pyself(NULL)
        {}


    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3UanPhyCalcSinrDual__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }


    static PyObject * _wrap_NotifyConstructionCompleted(PyNs3UanPhyCalcSinrDual *self);
    inline void NotifyConstructionCompleted__parent_caller()
    { ns3::ObjectBase::NotifyConstructionCompleted(); }

    static PyObject * _wrap_NotifyNewAggregate(PyNs3UanPhyCalcSinrDual *self);
    inline void NotifyNewAggregate__parent_caller()
    { ns3::Object::NotifyNewAggregate(); }

    static PyObject * _wrap_DoStart(PyNs3UanPhyCalcSinrDual *self);
    inline void DoStart__parent_caller()
    { ns3::Object::DoStart(); }

    virtual double CalcSinrDb(ns3::Ptr< ns3::Packet > pkt, ns3::Time arrTime, double rxPowerDb, double ambNoiseDb, ns3::UanTxMode mode, ns3::UanPdp pdp, std::list< ns3::UanPacketArrival > const & arrivalList) const;

    virtual void DoDispose();

    virtual void Clear();

    virtual ns3::TypeId GetInstanceTypeId() const;

    virtual void DoStart();

    virtual void NotifyNewAggregate();

    virtual void NotifyConstructionCompleted();

    static ns3::TypeId GetTypeId (void)
    {
      static ns3::TypeId tid = ns3::TypeId ("PyNs3UanPhyCalcSinrDual__PythonHelper")
        .SetParent< ns3::UanPhyCalcSinrDual > ()
        ;
      return tid;
    }
};

NS_OBJECT_ENSURE_REGISTERED (PyNs3UanPhyCalcSinrDual__PythonHelper);


typedef struct {
    PyObject_HEAD
    ns3::UanPhyCalcSinrFhFsk *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanPhyCalcSinrFhFsk;


extern PyTypeObject PyNs3UanPhyCalcSinrFhFsk_Type;

class PyNs3UanPhyCalcSinrFhFsk__PythonHelper : public ns3::UanPhyCalcSinrFhFsk
{
public:
    PyObject *m_pyself;
    PyNs3UanPhyCalcSinrFhFsk__PythonHelper(ns3::UanPhyCalcSinrFhFsk const & arg0)
        : ns3::UanPhyCalcSinrFhFsk(arg0), m_pyself(NULL)
        {}

    PyNs3UanPhyCalcSinrFhFsk__PythonHelper()
        : ns3::UanPhyCalcSinrFhFsk(), m_pyself(NULL)
        {}


    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3UanPhyCalcSinrFhFsk__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }


    static PyObject * _wrap_NotifyConstructionCompleted(PyNs3UanPhyCalcSinrFhFsk *self);
    inline void NotifyConstructionCompleted__parent_caller()
    { ns3::ObjectBase::NotifyConstructionCompleted(); }

    static PyObject * _wrap_NotifyNewAggregate(PyNs3UanPhyCalcSinrFhFsk *self);
    inline void NotifyNewAggregate__parent_caller()
    { ns3::Object::NotifyNewAggregate(); }

    static PyObject * _wrap_DoStart(PyNs3UanPhyCalcSinrFhFsk *self);
    inline void DoStart__parent_caller()
    { ns3::Object::DoStart(); }

    virtual double CalcSinrDb(ns3::Ptr< ns3::Packet > pkt, ns3::Time arrTime, double rxPowerDb, double ambNoiseDb, ns3::UanTxMode mode, ns3::UanPdp pdp, std::list< ns3::UanPacketArrival > const & arrivalList) const;

    virtual void DoDispose();

    virtual void Clear();

    virtual ns3::TypeId GetInstanceTypeId() const;

    virtual void DoStart();

    virtual void NotifyNewAggregate();

    virtual void NotifyConstructionCompleted();

    static ns3::TypeId GetTypeId (void)
    {
      static ns3::TypeId tid = ns3::TypeId ("PyNs3UanPhyCalcSinrFhFsk__PythonHelper")
        .SetParent< ns3::UanPhyCalcSinrFhFsk > ()
        ;
      return tid;
    }
};

NS_OBJECT_ENSURE_REGISTERED (PyNs3UanPhyCalcSinrFhFsk__PythonHelper);


typedef struct {
    PyObject_HEAD
    ns3::UanPhyDual *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanPhyDual;


extern PyTypeObject PyNs3UanPhyDual_Type;


typedef struct {
    PyObject_HEAD
    ns3::UanPhyGen *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanPhyGen;


extern PyTypeObject PyNs3UanPhyGen_Type;


typedef struct {
    PyObject_HEAD
    ns3::UanPhyPer *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanPhyPer;


extern PyTypeObject PyNs3UanPhyPer_Type;

class PyNs3UanPhyPer__PythonHelper : public ns3::UanPhyPer
{
public:
    PyObject *m_pyself;
    PyNs3UanPhyPer__PythonHelper()
        : ns3::UanPhyPer(), m_pyself(NULL)
        {}

    PyNs3UanPhyPer__PythonHelper(ns3::UanPhyPer const & arg0)
        : ns3::UanPhyPer(arg0), m_pyself(NULL)
        {}


    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3UanPhyPer__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }


    static PyObject * _wrap_NotifyConstructionCompleted(PyNs3UanPhyPer *self);
    inline void NotifyConstructionCompleted__parent_caller()
    { ns3::ObjectBase::NotifyConstructionCompleted(); }

    static PyObject * _wrap_NotifyNewAggregate(PyNs3UanPhyPer *self);
    inline void NotifyNewAggregate__parent_caller()
    { ns3::Object::NotifyNewAggregate(); }

    static PyObject * _wrap_DoStart(PyNs3UanPhyPer *self);
    inline void DoStart__parent_caller()
    { ns3::Object::DoStart(); }

    virtual double CalcPer(ns3::Ptr< ns3::Packet > pkt, double sinrDb, ns3::UanTxMode mode);

    virtual void Clear();

    virtual void DoDispose();

    virtual ns3::TypeId GetInstanceTypeId() const;

    virtual void DoStart();

    virtual void NotifyNewAggregate();

    virtual void NotifyConstructionCompleted();

    static ns3::TypeId GetTypeId (void)
    {
      static ns3::TypeId tid = ns3::TypeId ("PyNs3UanPhyPer__PythonHelper")
        .SetParent< ns3::UanPhyPer > ()
        ;
      return tid;
    }
};

NS_OBJECT_ENSURE_REGISTERED (PyNs3UanPhyPer__PythonHelper);


typedef struct {
    PyObject_HEAD
    ns3::UanPhyPerGenDefault *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanPhyPerGenDefault;


extern PyTypeObject PyNs3UanPhyPerGenDefault_Type;

class PyNs3UanPhyPerGenDefault__PythonHelper : public ns3::UanPhyPerGenDefault
{
public:
    PyObject *m_pyself;
    PyNs3UanPhyPerGenDefault__PythonHelper(ns3::UanPhyPerGenDefault const & arg0)
        : ns3::UanPhyPerGenDefault(arg0), m_pyself(NULL)
        {}

    PyNs3UanPhyPerGenDefault__PythonHelper()
        : ns3::UanPhyPerGenDefault(), m_pyself(NULL)
        {}


    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3UanPhyPerGenDefault__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }


    static PyObject * _wrap_NotifyConstructionCompleted(PyNs3UanPhyPerGenDefault *self);
    inline void NotifyConstructionCompleted__parent_caller()
    { ns3::ObjectBase::NotifyConstructionCompleted(); }

    static PyObject * _wrap_NotifyNewAggregate(PyNs3UanPhyPerGenDefault *self);
    inline void NotifyNewAggregate__parent_caller()
    { ns3::Object::NotifyNewAggregate(); }

    static PyObject * _wrap_DoStart(PyNs3UanPhyPerGenDefault *self);
    inline void DoStart__parent_caller()
    { ns3::Object::DoStart(); }

    virtual double CalcPer(ns3::Ptr< ns3::Packet > pkt, double sinrDb, ns3::UanTxMode mode);

    virtual void Clear();

    virtual void DoDispose();

    virtual ns3::TypeId GetInstanceTypeId() const;

    virtual void DoStart();

    virtual void NotifyNewAggregate();

    virtual void NotifyConstructionCompleted();

    static ns3::TypeId GetTypeId (void)
    {
      static ns3::TypeId tid = ns3::TypeId ("PyNs3UanPhyPerGenDefault__PythonHelper")
        .SetParent< ns3::UanPhyPerGenDefault > ()
        ;
      return tid;
    }
};

NS_OBJECT_ENSURE_REGISTERED (PyNs3UanPhyPerGenDefault__PythonHelper);


typedef struct {
    PyObject_HEAD
    ns3::UanPhyPerUmodem *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanPhyPerUmodem;


extern PyTypeObject PyNs3UanPhyPerUmodem_Type;

class PyNs3UanPhyPerUmodem__PythonHelper : public ns3::UanPhyPerUmodem
{
public:
    PyObject *m_pyself;
    PyNs3UanPhyPerUmodem__PythonHelper(ns3::UanPhyPerUmodem const & arg0)
        : ns3::UanPhyPerUmodem(arg0), m_pyself(NULL)
        {}

    PyNs3UanPhyPerUmodem__PythonHelper()
        : ns3::UanPhyPerUmodem(), m_pyself(NULL)
        {}


    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3UanPhyPerUmodem__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }


    static PyObject * _wrap_NotifyConstructionCompleted(PyNs3UanPhyPerUmodem *self);
    inline void NotifyConstructionCompleted__parent_caller()
    { ns3::ObjectBase::NotifyConstructionCompleted(); }

    static PyObject * _wrap_NotifyNewAggregate(PyNs3UanPhyPerUmodem *self);
    inline void NotifyNewAggregate__parent_caller()
    { ns3::Object::NotifyNewAggregate(); }

    static PyObject * _wrap_DoStart(PyNs3UanPhyPerUmodem *self);
    inline void DoStart__parent_caller()
    { ns3::Object::DoStart(); }

    virtual double CalcPer(ns3::Ptr< ns3::Packet > pkt, double sinrDb, ns3::UanTxMode mode);

    virtual void Clear();

    virtual void DoDispose();

    virtual ns3::TypeId GetInstanceTypeId() const;

    virtual void DoStart();

    virtual void NotifyNewAggregate();

    virtual void NotifyConstructionCompleted();

    static ns3::TypeId GetTypeId (void)
    {
      static ns3::TypeId tid = ns3::TypeId ("PyNs3UanPhyPerUmodem__PythonHelper")
        .SetParent< ns3::UanPhyPerUmodem > ()
        ;
      return tid;
    }
};

NS_OBJECT_ENSURE_REGISTERED (PyNs3UanPhyPerUmodem__PythonHelper);


typedef struct {
    PyObject_HEAD
    ns3::UanPropModel *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanPropModel;


extern PyTypeObject PyNs3UanPropModel_Type;

class PyNs3UanPropModel__PythonHelper : public ns3::UanPropModel
{
public:
    PyObject *m_pyself;
    PyNs3UanPropModel__PythonHelper()
        : ns3::UanPropModel(), m_pyself(NULL)
        {}

    PyNs3UanPropModel__PythonHelper(ns3::UanPropModel const & arg0)
        : ns3::UanPropModel(arg0), m_pyself(NULL)
        {}


    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3UanPropModel__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }


    static PyObject * _wrap_NotifyConstructionCompleted(PyNs3UanPropModel *self);
    inline void NotifyConstructionCompleted__parent_caller()
    { ns3::ObjectBase::NotifyConstructionCompleted(); }

    static PyObject * _wrap_NotifyNewAggregate(PyNs3UanPropModel *self);
    inline void NotifyNewAggregate__parent_caller()
    { ns3::Object::NotifyNewAggregate(); }

    static PyObject * _wrap_DoStart(PyNs3UanPropModel *self);
    inline void DoStart__parent_caller()
    { ns3::Object::DoStart(); }

    virtual void Clear();

    virtual void DoDispose();

    virtual ns3::Time GetDelay(ns3::Ptr< ns3::MobilityModel > a, ns3::Ptr< ns3::MobilityModel > b, ns3::UanTxMode mode);

    virtual double GetPathLossDb(ns3::Ptr< ns3::MobilityModel > a, ns3::Ptr< ns3::MobilityModel > b, ns3::UanTxMode txMode);

    virtual ns3::UanPdp GetPdp(ns3::Ptr< ns3::MobilityModel > a, ns3::Ptr< ns3::MobilityModel > b, ns3::UanTxMode mode);

    virtual ns3::TypeId GetInstanceTypeId() const;

    virtual void DoStart();

    virtual void NotifyNewAggregate();

    virtual void NotifyConstructionCompleted();

    static ns3::TypeId GetTypeId (void)
    {
      static ns3::TypeId tid = ns3::TypeId ("PyNs3UanPropModel__PythonHelper")
        .SetParent< ns3::UanPropModel > ()
        ;
      return tid;
    }
};

NS_OBJECT_ENSURE_REGISTERED (PyNs3UanPropModel__PythonHelper);


typedef struct {
    PyObject_HEAD
    ns3::UanPropModelIdeal *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanPropModelIdeal;


extern PyTypeObject PyNs3UanPropModelIdeal_Type;

class PyNs3UanPropModelIdeal__PythonHelper : public ns3::UanPropModelIdeal
{
public:
    PyObject *m_pyself;
    PyNs3UanPropModelIdeal__PythonHelper(ns3::UanPropModelIdeal const & arg0)
        : ns3::UanPropModelIdeal(arg0), m_pyself(NULL)
        {}

    PyNs3UanPropModelIdeal__PythonHelper()
        : ns3::UanPropModelIdeal(), m_pyself(NULL)
        {}


    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3UanPropModelIdeal__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }


    static PyObject * _wrap_NotifyConstructionCompleted(PyNs3UanPropModelIdeal *self);
    inline void NotifyConstructionCompleted__parent_caller()
    { ns3::ObjectBase::NotifyConstructionCompleted(); }

    static PyObject * _wrap_NotifyNewAggregate(PyNs3UanPropModelIdeal *self);
    inline void NotifyNewAggregate__parent_caller()
    { ns3::Object::NotifyNewAggregate(); }

    static PyObject * _wrap_DoStart(PyNs3UanPropModelIdeal *self);
    inline void DoStart__parent_caller()
    { ns3::Object::DoStart(); }

    virtual ns3::Time GetDelay(ns3::Ptr< ns3::MobilityModel > a, ns3::Ptr< ns3::MobilityModel > b, ns3::UanTxMode mode);

    virtual double GetPathLossDb(ns3::Ptr< ns3::MobilityModel > a, ns3::Ptr< ns3::MobilityModel > b, ns3::UanTxMode mode);

    virtual ns3::UanPdp GetPdp(ns3::Ptr< ns3::MobilityModel > a, ns3::Ptr< ns3::MobilityModel > b, ns3::UanTxMode mode);

    virtual void Clear();

    virtual void DoDispose();

    virtual ns3::TypeId GetInstanceTypeId() const;

    virtual void DoStart();

    virtual void NotifyNewAggregate();

    virtual void NotifyConstructionCompleted();

    static ns3::TypeId GetTypeId (void)
    {
      static ns3::TypeId tid = ns3::TypeId ("PyNs3UanPropModelIdeal__PythonHelper")
        .SetParent< ns3::UanPropModelIdeal > ()
        ;
      return tid;
    }
};

NS_OBJECT_ENSURE_REGISTERED (PyNs3UanPropModelIdeal__PythonHelper);


typedef struct {
    PyObject_HEAD
    ns3::UanPropModelThorp *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanPropModelThorp;


extern PyTypeObject PyNs3UanPropModelThorp_Type;

class PyNs3UanPropModelThorp__PythonHelper : public ns3::UanPropModelThorp
{
public:
    PyObject *m_pyself;
    PyNs3UanPropModelThorp__PythonHelper(ns3::UanPropModelThorp const & arg0)
        : ns3::UanPropModelThorp(arg0), m_pyself(NULL)
        {}

    PyNs3UanPropModelThorp__PythonHelper()
        : ns3::UanPropModelThorp(), m_pyself(NULL)
        {}


    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3UanPropModelThorp__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }


    static PyObject * _wrap_NotifyConstructionCompleted(PyNs3UanPropModelThorp *self);
    inline void NotifyConstructionCompleted__parent_caller()
    { ns3::ObjectBase::NotifyConstructionCompleted(); }

    static PyObject * _wrap_NotifyNewAggregate(PyNs3UanPropModelThorp *self);
    inline void NotifyNewAggregate__parent_caller()
    { ns3::Object::NotifyNewAggregate(); }

    static PyObject * _wrap_DoStart(PyNs3UanPropModelThorp *self);
    inline void DoStart__parent_caller()
    { ns3::Object::DoStart(); }

    virtual ns3::Time GetDelay(ns3::Ptr< ns3::MobilityModel > a, ns3::Ptr< ns3::MobilityModel > b, ns3::UanTxMode mode);

    virtual double GetPathLossDb(ns3::Ptr< ns3::MobilityModel > a, ns3::Ptr< ns3::MobilityModel > b, ns3::UanTxMode mode);

    virtual ns3::UanPdp GetPdp(ns3::Ptr< ns3::MobilityModel > a, ns3::Ptr< ns3::MobilityModel > b, ns3::UanTxMode mode);

    virtual void Clear();

    virtual void DoDispose();

    virtual ns3::TypeId GetInstanceTypeId() const;

    virtual void DoStart();

    virtual void NotifyNewAggregate();

    virtual void NotifyConstructionCompleted();

    static ns3::TypeId GetTypeId (void)
    {
      static ns3::TypeId tid = ns3::TypeId ("PyNs3UanPropModelThorp__PythonHelper")
        .SetParent< ns3::UanPropModelThorp > ()
        ;
      return tid;
    }
};

NS_OBJECT_ENSURE_REGISTERED (PyNs3UanPropModelThorp__PythonHelper);


typedef struct {
    PyObject_HEAD
    ns3::UanTransducer *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanTransducer;


extern PyTypeObject PyNs3UanTransducer_Type;


typedef struct {
    PyObject_HEAD
    ns3::UanTransducerHd *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanTransducerHd;


extern PyTypeObject PyNs3UanTransducerHd_Type;


typedef struct {
    PyObject_HEAD
    ns3::UanChannel *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanChannel;


extern PyTypeObject PyNs3UanChannel_Type;

class PyNs3UanChannel__PythonHelper : public ns3::UanChannel
{
public:
    PyObject *m_pyself;
    PyNs3UanChannel__PythonHelper(ns3::UanChannel const & arg0)
        : ns3::UanChannel(arg0), m_pyself(NULL)
        {}

    PyNs3UanChannel__PythonHelper()
        : ns3::UanChannel(), m_pyself(NULL)
        {}


    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3UanChannel__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }


    static PyObject * _wrap_NotifyConstructionCompleted(PyNs3UanChannel *self);
    inline void NotifyConstructionCompleted__parent_caller()
    { ns3::ObjectBase::NotifyConstructionCompleted(); }

    static PyObject * _wrap_NotifyNewAggregate(PyNs3UanChannel *self);
    inline void NotifyNewAggregate__parent_caller()
    { ns3::Object::NotifyNewAggregate(); }

    static PyObject * _wrap_DoStart(PyNs3UanChannel *self);
    inline void DoStart__parent_caller()
    { ns3::Object::DoStart(); }

    static PyObject * _wrap_DoDispose(PyNs3UanChannel *self);
    inline void DoDispose__parent_caller()
    { ns3::UanChannel::DoDispose(); }

    virtual ns3::Ptr< ns3::NetDevice > GetDevice(uint32_t i) const;

    virtual uint32_t GetNDevices() const;

    virtual void DoDispose();

    virtual ns3::TypeId GetInstanceTypeId() const;

    virtual void DoStart();

    virtual void NotifyNewAggregate();

    virtual void NotifyConstructionCompleted();

    static ns3::TypeId GetTypeId (void)
    {
      static ns3::TypeId tid = ns3::TypeId ("PyNs3UanChannel__PythonHelper")
        .SetParent< ns3::UanChannel > ()
        ;
      return tid;
    }
};

NS_OBJECT_ENSURE_REGISTERED (PyNs3UanChannel__PythonHelper);


typedef struct {
    PyObject_HEAD
    ns3::UanModesListChecker *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanModesListChecker;


extern PyTypeObject PyNs3UanModesListChecker_Type;


typedef struct {
    PyObject_HEAD
    ns3::UanModesListValue *obj;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanModesListValue;


extern PyTypeObject PyNs3UanModesListValue_Type;


typedef struct {
    PyObject_HEAD
    ns3::UanNetDevice *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3UanNetDevice;


extern PyTypeObject PyNs3UanNetDevice_Type;


typedef struct {
    PyObject_HEAD
    ns3::AcousticModemEnergyModel *obj;
    PyObject *inst_dict;
    PyBindGenWrapperFlags flags:8;
} PyNs3AcousticModemEnergyModel;


extern PyTypeObject PyNs3AcousticModemEnergyModel_Type;

class PyNs3AcousticModemEnergyModel__PythonHelper : public ns3::AcousticModemEnergyModel
{
public:
    PyObject *m_pyself;
    PyNs3AcousticModemEnergyModel__PythonHelper(ns3::AcousticModemEnergyModel const & arg0)
        : ns3::AcousticModemEnergyModel(arg0), m_pyself(NULL)
        {}

    PyNs3AcousticModemEnergyModel__PythonHelper()
        : ns3::AcousticModemEnergyModel(), m_pyself(NULL)
        {}


    void set_pyobj(PyObject *pyobj)
    {
        Py_XDECREF(m_pyself);
        Py_INCREF(pyobj);
        m_pyself = pyobj;
    }

    virtual ~PyNs3AcousticModemEnergyModel__PythonHelper()
    {
        Py_CLEAR(m_pyself);
    }


    static PyObject * _wrap_NotifyConstructionCompleted(PyNs3AcousticModemEnergyModel *self);
    inline void NotifyConstructionCompleted__parent_caller()
    { ns3::ObjectBase::NotifyConstructionCompleted(); }

    static PyObject * _wrap_NotifyNewAggregate(PyNs3AcousticModemEnergyModel *self);
    inline void NotifyNewAggregate__parent_caller()
    { ns3::Object::NotifyNewAggregate(); }

    static PyObject * _wrap_DoStart(PyNs3AcousticModemEnergyModel *self);
    inline void DoStart__parent_caller()
    { ns3::Object::DoStart(); }

    virtual void ChangeState(int newState);

    virtual ns3::Ptr< ns3::Node > GetNode() const;

    virtual double GetTotalEnergyConsumption() const;

    virtual void HandleEnergyDepletion();

    virtual void SetEnergySource(ns3::Ptr< ns3::EnergySource > source);

    virtual void SetNode(ns3::Ptr< ns3::Node > node);

    virtual void DoDispose();

    virtual double DoGetCurrentA() const;

    virtual ns3::TypeId GetInstanceTypeId() const;

    virtual void DoStart();

    virtual void NotifyNewAggregate();

    virtual void NotifyConstructionCompleted();

    static ns3::TypeId GetTypeId (void)
    {
      static ns3::TypeId tid = ns3::TypeId ("PyNs3AcousticModemEnergyModel__PythonHelper")
        .SetParent< ns3::AcousticModemEnergyModel > ()
        ;
      return tid;
    }
};

NS_OBJECT_ENSURE_REGISTERED (PyNs3AcousticModemEnergyModel__PythonHelper);


typedef struct {
    PyObject_HEAD
    std::vector< ns3::Tap > *obj;
} Pystd__vector__lt___ns3__Tap___gt__;


typedef struct {
    PyObject_HEAD
    Pystd__vector__lt___ns3__Tap___gt__ *container;
    std::vector< ns3::Tap >::iterator *iterator;
} Pystd__vector__lt___ns3__Tap___gt__Iter;


extern PyTypeObject Pystd__vector__lt___ns3__Tap___gt___Type;
extern PyTypeObject Pystd__vector__lt___ns3__Tap___gt__Iter_Type;

int _wrap_convert_py2c__std__vector__lt___ns3__Tap___gt__(PyObject *arg, std::vector< ns3::Tap > *container);

typedef struct {
    PyObject_HEAD
    std::vector< double > *obj;
} Pystd__vector__lt___double___gt__;


typedef struct {
    PyObject_HEAD
    Pystd__vector__lt___double___gt__ *container;
    std::vector< double >::iterator *iterator;
} Pystd__vector__lt___double___gt__Iter;


extern PyTypeObject Pystd__vector__lt___double___gt___Type;
extern PyTypeObject Pystd__vector__lt___double___gt__Iter_Type;

int _wrap_convert_py2c__std__vector__lt___double___gt__(PyObject *arg, std::vector< double > *container);

typedef struct {
    PyObject_HEAD
    std::set< unsigned char > *obj;
} Pystd__set__lt___unsigned_char___gt__;


typedef struct {
    PyObject_HEAD
    Pystd__set__lt___unsigned_char___gt__ *container;
    std::set< unsigned char >::iterator *iterator;
} Pystd__set__lt___unsigned_char___gt__Iter;


extern PyTypeObject Pystd__set__lt___unsigned_char___gt___Type;
extern PyTypeObject Pystd__set__lt___unsigned_char___gt__Iter_Type;

int _wrap_convert_py2c__std__set__lt___unsigned_char___gt__(PyObject *arg, std::set< unsigned char > *container);

typedef struct {
    PyObject_HEAD
    std::list< ns3::UanPacketArrival > *obj;
} Pystd__list__lt___ns3__UanPacketArrival___gt__;


typedef struct {
    PyObject_HEAD
    Pystd__list__lt___ns3__UanPacketArrival___gt__ *container;
    std::list< ns3::UanPacketArrival >::iterator *iterator;
} Pystd__list__lt___ns3__UanPacketArrival___gt__Iter;


extern PyTypeObject Pystd__list__lt___ns3__UanPacketArrival___gt___Type;
extern PyTypeObject Pystd__list__lt___ns3__UanPacketArrival___gt__Iter_Type;

int _wrap_convert_py2c__std__list__lt___ns3__UanPacketArrival___gt__(PyObject *arg, std::list< ns3::UanPacketArrival > *container);

typedef struct {
    PyObject_HEAD
    std::list< ns3::Ptr< ns3::UanPhy > > *obj;
} Pystd__list__lt___ns3__Ptr__lt___ns3__UanPhy___gt_____gt__;


typedef struct {
    PyObject_HEAD
    Pystd__list__lt___ns3__Ptr__lt___ns3__UanPhy___gt_____gt__ *container;
    std::list< ns3::Ptr< ns3::UanPhy > >::iterator *iterator;
} Pystd__list__lt___ns3__Ptr__lt___ns3__UanPhy___gt_____gt__Iter;


extern PyTypeObject Pystd__list__lt___ns3__Ptr__lt___ns3__UanPhy___gt_____gt___Type;
extern PyTypeObject Pystd__list__lt___ns3__Ptr__lt___ns3__UanPhy___gt_____gt__Iter_Type;

int _wrap_convert_py2c__std__list__lt___ns3__Ptr__lt___ns3__UanPhy___gt_____gt__(PyObject *arg, std::list< ns3::Ptr< ns3::UanPhy > > *container);

typedef struct {
    PyObject_HEAD
    std::list< ns3::Ptr< ns3::UanTransducer > > *obj;
} Pystd__list__lt___ns3__Ptr__lt___ns3__UanTransducer___gt_____gt__;


typedef struct {
    PyObject_HEAD
    Pystd__list__lt___ns3__Ptr__lt___ns3__UanTransducer___gt_____gt__ *container;
    std::list< ns3::Ptr< ns3::UanTransducer > >::iterator *iterator;
} Pystd__list__lt___ns3__Ptr__lt___ns3__UanTransducer___gt_____gt__Iter;


extern PyTypeObject Pystd__list__lt___ns3__Ptr__lt___ns3__UanTransducer___gt_____gt___Type;
extern PyTypeObject Pystd__list__lt___ns3__Ptr__lt___ns3__UanTransducer___gt_____gt__Iter_Type;

int _wrap_convert_py2c__std__list__lt___ns3__Ptr__lt___ns3__UanTransducer___gt_____gt__(PyObject *arg, std::list< ns3::Ptr< ns3::UanTransducer > > *container);

class PythonCallbackImpl0 : public ns3::CallbackImpl<void, int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty>
{
public:
    PyObject *m_callback;
    PythonCallbackImpl0(PyObject *callback)
    {
        Py_INCREF(callback);
        m_callback = callback;
    }
    virtual ~PythonCallbackImpl0()
    {
        Py_DECREF(m_callback);
        m_callback = NULL;
    }

    virtual bool IsEqual(ns3::Ptr<const ns3::CallbackImplBase> other_base) const
    {
        const PythonCallbackImpl0 *other = dynamic_cast<const PythonCallbackImpl0*> (ns3::PeekPointer (other_base));
        if (other != NULL)
            return (other->m_callback == m_callback);
        else
            return false;
    }


    void
    operator()(int arg1)
    {
        PyGILState_STATE __py_gil_state;
        PyObject *py_retval;
        PyObject *args;

        __py_gil_state = (PyEval_ThreadsInitialized() ? PyGILState_Ensure() : (PyGILState_STATE) 0);
        args = Py_BuildValue((char *) "(i)", arg1);
        py_retval = PyObject_CallObject(m_callback, args);
        if (py_retval == NULL) {
            Py_DECREF(args);
            if (PyEval_ThreadsInitialized())
                PyGILState_Release(__py_gil_state);
            return;
        }
        if (py_retval != Py_None) {
            PyErr_SetString(PyExc_TypeError, "function/method should return None");
            Py_DECREF(py_retval);
            Py_DECREF(args);
            if (PyEval_ThreadsInitialized())
                PyGILState_Release(__py_gil_state);
            return;
        }
        Py_DECREF(py_retval);
        Py_DECREF(args);
        if (PyEval_ThreadsInitialized())
            PyGILState_Release(__py_gil_state);
        return;
    }
};


class PythonCallbackImpl1 : public ns3::CallbackImpl<void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty>
{
public:
    PyObject *m_callback;
    PythonCallbackImpl1(PyObject *callback)
    {
        Py_INCREF(callback);
        m_callback = callback;
    }
    virtual ~PythonCallbackImpl1()
    {
        Py_DECREF(m_callback);
        m_callback = NULL;
    }

    virtual bool IsEqual(ns3::Ptr<const ns3::CallbackImplBase> other_base) const
    {
        const PythonCallbackImpl1 *other = dynamic_cast<const PythonCallbackImpl1*> (ns3::PeekPointer (other_base));
        if (other != NULL)
            return (other->m_callback == m_callback);
        else
            return false;
    }


    void
    operator()()
    {
        PyGILState_STATE __py_gil_state;
        PyObject *py_retval;
        PyObject *args;

        __py_gil_state = (PyEval_ThreadsInitialized() ? PyGILState_Ensure() : (PyGILState_STATE) 0);
        args = Py_BuildValue((char *) "()");
        py_retval = PyObject_CallObject(m_callback, args);
        if (py_retval == NULL) {
            Py_DECREF(args);
            if (PyEval_ThreadsInitialized())
                PyGILState_Release(__py_gil_state);
            return;
        }
        if (py_retval != Py_None) {
            PyErr_SetString(PyExc_TypeError, "function/method should return None");
            Py_DECREF(py_retval);
            Py_DECREF(args);
            if (PyEval_ThreadsInitialized())
                PyGILState_Release(__py_gil_state);
            return;
        }
        Py_DECREF(py_retval);
        Py_DECREF(args);
        if (PyEval_ThreadsInitialized())
            PyGILState_Release(__py_gil_state);
        return;
    }
};


class PythonCallbackImpl2 : public ns3::CallbackImpl<void, ns3::Ptr<ns3::Packet>, double, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty>
{
public:
    PyObject *m_callback;
    PythonCallbackImpl2(PyObject *callback)
    {
        Py_INCREF(callback);
        m_callback = callback;
    }
    virtual ~PythonCallbackImpl2()
    {
        Py_DECREF(m_callback);
        m_callback = NULL;
    }

    virtual bool IsEqual(ns3::Ptr<const ns3::CallbackImplBase> other_base) const
    {
        const PythonCallbackImpl2 *other = dynamic_cast<const PythonCallbackImpl2*> (ns3::PeekPointer (other_base));
        if (other != NULL)
            return (other->m_callback == m_callback);
        else
            return false;
    }


    void
    operator()(ns3::Ptr< ns3::Packet > arg1, double arg2)
    {
        PyGILState_STATE __py_gil_state;
        PyObject *py_retval;
        PyNs3Packet *py_Packet;
        std::map<void*, PyObject*>::const_iterator wrapper_lookup_iter;
        PyTypeObject *wrapper_type = 0;
        PyObject *args;

        __py_gil_state = (PyEval_ThreadsInitialized() ? PyGILState_Ensure() : (PyGILState_STATE) 0);
        wrapper_lookup_iter = PyNs3Empty_wrapper_registry.find((void *) const_cast<ns3::Packet *> (ns3::PeekPointer (arg1)));
        if (wrapper_lookup_iter == PyNs3Empty_wrapper_registry.end()) {
            py_Packet = NULL;
        } else {
            py_Packet = (PyNs3Packet *) wrapper_lookup_iter->second;
            Py_INCREF(py_Packet);
        }

        if (py_Packet == NULL)
        {
            wrapper_type = PyNs3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt____typeid_map.lookup_wrapper(typeid(*const_cast<ns3::Packet *> (ns3::PeekPointer (arg1))), &PyNs3Packet_Type);
            py_Packet = PyObject_New(PyNs3Packet, wrapper_type);
            py_Packet->flags = PYBINDGEN_WRAPPER_FLAG_NONE;
            const_cast<ns3::Packet *> (ns3::PeekPointer (arg1))->Ref();
            py_Packet->obj = const_cast<ns3::Packet *> (ns3::PeekPointer (arg1));
            PyNs3Empty_wrapper_registry[(void *) py_Packet->obj] = (PyObject *) py_Packet;
        }
        args = Py_BuildValue((char *) "(Nd)", py_Packet, arg2);
        py_retval = PyObject_CallObject(m_callback, args);
        if (py_retval == NULL) {
            Py_DECREF(args);
            if (PyEval_ThreadsInitialized())
                PyGILState_Release(__py_gil_state);
            return;
        }
        if (py_retval != Py_None) {
            PyErr_SetString(PyExc_TypeError, "function/method should return None");
            Py_DECREF(py_retval);
            Py_DECREF(args);
            if (PyEval_ThreadsInitialized())
                PyGILState_Release(__py_gil_state);
            return;
        }
        Py_DECREF(py_retval);
        Py_DECREF(args);
        if (PyEval_ThreadsInitialized())
            PyGILState_Release(__py_gil_state);
        return;
    }
};


class PythonCallbackImpl3 : public ns3::CallbackImpl<void, ns3::Ptr<ns3::Packet>, double, ns3::UanTxMode, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty>
{
public:
    PyObject *m_callback;
    PythonCallbackImpl3(PyObject *callback)
    {
        Py_INCREF(callback);
        m_callback = callback;
    }
    virtual ~PythonCallbackImpl3()
    {
        Py_DECREF(m_callback);
        m_callback = NULL;
    }

    virtual bool IsEqual(ns3::Ptr<const ns3::CallbackImplBase> other_base) const
    {
        const PythonCallbackImpl3 *other = dynamic_cast<const PythonCallbackImpl3*> (ns3::PeekPointer (other_base));
        if (other != NULL)
            return (other->m_callback == m_callback);
        else
            return false;
    }


    void
    operator()(ns3::Ptr< ns3::Packet > arg1, double arg2, ns3::UanTxMode arg3)
    {
        PyGILState_STATE __py_gil_state;
        PyObject *py_retval;
        PyNs3Packet *py_Packet;
        std::map<void*, PyObject*>::const_iterator wrapper_lookup_iter;
        PyTypeObject *wrapper_type = 0;
        PyNs3UanTxMode *py_UanTxMode;
        PyObject *args;

        __py_gil_state = (PyEval_ThreadsInitialized() ? PyGILState_Ensure() : (PyGILState_STATE) 0);
        wrapper_lookup_iter = PyNs3Empty_wrapper_registry.find((void *) const_cast<ns3::Packet *> (ns3::PeekPointer (arg1)));
        if (wrapper_lookup_iter == PyNs3Empty_wrapper_registry.end()) {
            py_Packet = NULL;
        } else {
            py_Packet = (PyNs3Packet *) wrapper_lookup_iter->second;
            Py_INCREF(py_Packet);
        }

        if (py_Packet == NULL)
        {
            wrapper_type = PyNs3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt____typeid_map.lookup_wrapper(typeid(*const_cast<ns3::Packet *> (ns3::PeekPointer (arg1))), &PyNs3Packet_Type);
            py_Packet = PyObject_New(PyNs3Packet, wrapper_type);
            py_Packet->flags = PYBINDGEN_WRAPPER_FLAG_NONE;
            const_cast<ns3::Packet *> (ns3::PeekPointer (arg1))->Ref();
            py_Packet->obj = const_cast<ns3::Packet *> (ns3::PeekPointer (arg1));
            PyNs3Empty_wrapper_registry[(void *) py_Packet->obj] = (PyObject *) py_Packet;
        }
        py_UanTxMode = PyObject_New(PyNs3UanTxMode, &PyNs3UanTxMode_Type);
        py_UanTxMode->flags = PYBINDGEN_WRAPPER_FLAG_NONE;
        py_UanTxMode->obj = new ns3::UanTxMode(arg3);
        PyNs3UanTxMode_wrapper_registry[(void *) py_UanTxMode->obj] = (PyObject *) py_UanTxMode;
        args = Py_BuildValue((char *) "(NdN)", py_Packet, arg2, py_UanTxMode);
        py_retval = PyObject_CallObject(m_callback, args);
        if (py_retval == NULL) {
            Py_DECREF(args);
            if (PyEval_ThreadsInitialized())
                PyGILState_Release(__py_gil_state);
            return;
        }
        if (py_retval != Py_None) {
            PyErr_SetString(PyExc_TypeError, "function/method should return None");
            Py_DECREF(py_retval);
            Py_DECREF(args);
            if (PyEval_ThreadsInitialized())
                PyGILState_Release(__py_gil_state);
            return;
        }
        Py_DECREF(py_retval);
        Py_DECREF(args);
        if (PyEval_ThreadsInitialized())
            PyGILState_Release(__py_gil_state);
        return;
    }
};


class PythonCallbackImpl4 : public ns3::CallbackImpl<void, ns3::Ptr<ns3::Packet>, ns3::UanAddress const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty>
{
public:
    PyObject *m_callback;
    PythonCallbackImpl4(PyObject *callback)
    {
        Py_INCREF(callback);
        m_callback = callback;
    }
    virtual ~PythonCallbackImpl4()
    {
        Py_DECREF(m_callback);
        m_callback = NULL;
    }

    virtual bool IsEqual(ns3::Ptr<const ns3::CallbackImplBase> other_base) const
    {
        const PythonCallbackImpl4 *other = dynamic_cast<const PythonCallbackImpl4*> (ns3::PeekPointer (other_base));
        if (other != NULL)
            return (other->m_callback == m_callback);
        else
            return false;
    }


    void
    operator()(ns3::Ptr< ns3::Packet > arg1, ns3::UanAddress const & arg2)
    {
        PyGILState_STATE __py_gil_state;
        PyObject *py_retval;
        PyNs3Packet *py_Packet;
        std::map<void*, PyObject*>::const_iterator wrapper_lookup_iter;
        PyTypeObject *wrapper_type = 0;
        PyNs3UanAddress *py_UanAddress;
        PyObject *args;

        __py_gil_state = (PyEval_ThreadsInitialized() ? PyGILState_Ensure() : (PyGILState_STATE) 0);
        wrapper_lookup_iter = PyNs3Empty_wrapper_registry.find((void *) const_cast<ns3::Packet *> (ns3::PeekPointer (arg1)));
        if (wrapper_lookup_iter == PyNs3Empty_wrapper_registry.end()) {
            py_Packet = NULL;
        } else {
            py_Packet = (PyNs3Packet *) wrapper_lookup_iter->second;
            Py_INCREF(py_Packet);
        }

        if (py_Packet == NULL)
        {
            wrapper_type = PyNs3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt____typeid_map.lookup_wrapper(typeid(*const_cast<ns3::Packet *> (ns3::PeekPointer (arg1))), &PyNs3Packet_Type);
            py_Packet = PyObject_New(PyNs3Packet, wrapper_type);
            py_Packet->flags = PYBINDGEN_WRAPPER_FLAG_NONE;
            const_cast<ns3::Packet *> (ns3::PeekPointer (arg1))->Ref();
            py_Packet->obj = const_cast<ns3::Packet *> (ns3::PeekPointer (arg1));
            PyNs3Empty_wrapper_registry[(void *) py_Packet->obj] = (PyObject *) py_Packet;
        }
        py_UanAddress = PyObject_New(PyNs3UanAddress, &PyNs3UanAddress_Type);
        py_UanAddress->flags = PYBINDGEN_WRAPPER_FLAG_NONE;
        py_UanAddress->obj = new ns3::UanAddress(arg2);
        PyNs3UanAddress_wrapper_registry[(void *) py_UanAddress->obj] = (PyObject *) py_UanAddress;
        args = Py_BuildValue((char *) "(NN)", py_Packet, py_UanAddress);
        py_retval = PyObject_CallObject(m_callback, args);
        if (py_retval == NULL) {
            Py_DECREF(args);
            if (PyEval_ThreadsInitialized())
                PyGILState_Release(__py_gil_state);
            return;
        }
        if (py_retval != Py_None) {
            PyErr_SetString(PyExc_TypeError, "function/method should return None");
            Py_DECREF(py_retval);
            Py_DECREF(args);
            if (PyEval_ThreadsInitialized())
                PyGILState_Release(__py_gil_state);
            return;
        }
        Py_DECREF(py_retval);
        Py_DECREF(args);
        if (PyEval_ThreadsInitialized())
            PyGILState_Release(__py_gil_state);
        return;
    }
};


class PythonCallbackImpl5 : public ns3::CallbackImpl<bool, ns3::Ptr<ns3::NetDevice>, ns3::Ptr<ns3::Packet const>, unsigned short, ns3::Address const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty>
{
public:
    PyObject *m_callback;
    PythonCallbackImpl5(PyObject *callback)
    {
        Py_INCREF(callback);
        m_callback = callback;
    }
    virtual ~PythonCallbackImpl5()
    {
        Py_DECREF(m_callback);
        m_callback = NULL;
    }

    virtual bool IsEqual(ns3::Ptr<const ns3::CallbackImplBase> other_base) const
    {
        const PythonCallbackImpl5 *other = dynamic_cast<const PythonCallbackImpl5*> (ns3::PeekPointer (other_base));
        if (other != NULL)
            return (other->m_callback == m_callback);
        else
            return false;
    }


    bool
    operator()(ns3::Ptr< ns3::NetDevice > arg1, ns3::Ptr< ns3::Packet const > arg2, unsigned short arg3, ns3::Address const & arg4)
    {
        PyGILState_STATE __py_gil_state;
        PyObject *py_retval;
        bool retval;
        PyNs3NetDevice *py_NetDevice;
        std::map<void*, PyObject*>::const_iterator wrapper_lookup_iter;
        PyTypeObject *wrapper_type = 0;
        PyNs3Packet *py_Packet;
        std::map<void*, PyObject*>::const_iterator wrapper_lookup_iter2;
        PyTypeObject *wrapper_type2 = 0;
        PyNs3Address *py_Address;
        PyObject *args;
        PyObject *py_boolretval;

        __py_gil_state = (PyEval_ThreadsInitialized() ? PyGILState_Ensure() : (PyGILState_STATE) 0);
        wrapper_lookup_iter = PyNs3ObjectBase_wrapper_registry.find((void *) const_cast<ns3::NetDevice *> (ns3::PeekPointer (arg1)));
        if (wrapper_lookup_iter == PyNs3ObjectBase_wrapper_registry.end()) {
            py_NetDevice = NULL;
        } else {
            py_NetDevice = (PyNs3NetDevice *) wrapper_lookup_iter->second;
            Py_INCREF(py_NetDevice);
        }

        if (py_NetDevice == NULL)
        {
            wrapper_type = PyNs3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter__typeid_map.lookup_wrapper(typeid(*const_cast<ns3::NetDevice *> (ns3::PeekPointer (arg1))), &PyNs3NetDevice_Type);
            py_NetDevice = PyObject_GC_New(PyNs3NetDevice, wrapper_type);
            py_NetDevice->inst_dict = NULL;
            py_NetDevice->flags = PYBINDGEN_WRAPPER_FLAG_NONE;
            const_cast<ns3::NetDevice *> (ns3::PeekPointer (arg1))->Ref();
            py_NetDevice->obj = const_cast<ns3::NetDevice *> (ns3::PeekPointer (arg1));
            PyNs3ObjectBase_wrapper_registry[(void *) py_NetDevice->obj] = (PyObject *) py_NetDevice;
        }
        wrapper_lookup_iter2 = PyNs3Empty_wrapper_registry.find((void *) const_cast<ns3::Packet *> (ns3::PeekPointer (arg2)));
        if (wrapper_lookup_iter2 == PyNs3Empty_wrapper_registry.end()) {
            py_Packet = NULL;
        } else {
            py_Packet = (PyNs3Packet *) wrapper_lookup_iter2->second;
            Py_INCREF(py_Packet);
        }

        if (py_Packet == NULL)
        {
            wrapper_type2 = PyNs3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt____typeid_map.lookup_wrapper(typeid(*const_cast<ns3::Packet *> (ns3::PeekPointer (arg2))), &PyNs3Packet_Type);
            py_Packet = PyObject_New(PyNs3Packet, wrapper_type2);
            py_Packet->flags = PYBINDGEN_WRAPPER_FLAG_NONE;
            const_cast<ns3::Packet *> (ns3::PeekPointer (arg2))->Ref();
            py_Packet->obj = const_cast<ns3::Packet *> (ns3::PeekPointer (arg2));
            PyNs3Empty_wrapper_registry[(void *) py_Packet->obj] = (PyObject *) py_Packet;
        }
        py_Address = PyObject_New(PyNs3Address, &PyNs3Address_Type);
        py_Address->flags = PYBINDGEN_WRAPPER_FLAG_NONE;
        py_Address->obj = new ns3::Address(arg4);
        PyNs3Address_wrapper_registry[(void *) py_Address->obj] = (PyObject *) py_Address;
        args = Py_BuildValue((char *) "(NNiN)", py_NetDevice, py_Packet, (int) arg3, py_Address);
        py_retval = PyObject_CallObject(m_callback, args);
        if (py_retval == NULL) {
            Py_DECREF(args);
            if (PyEval_ThreadsInitialized())
                PyGILState_Release(__py_gil_state);
            return false;
        }
        py_retval = Py_BuildValue((char*) "(N)", py_retval);
        if (!PyArg_ParseTuple(py_retval, (char *) "O", &py_boolretval)) {
            PyErr_Print();
            Py_DECREF(py_retval);
            Py_DECREF(args);
            if (PyEval_ThreadsInitialized())
                PyGILState_Release(__py_gil_state);
            return false;
        }
        retval = PyObject_IsTrue(py_boolretval);
        Py_DECREF(py_retval);
        Py_DECREF(args);
        if (PyEval_ThreadsInitialized())
            PyGILState_Release(__py_gil_state);
        return retval;
    }
};


class PythonCallbackImpl6 : public ns3::CallbackImpl<void, ns3::Ptr<ns3::NetDevice>, ns3::Ptr<ns3::Packet const>, unsigned short, ns3::Address const&, ns3::Address const&, ns3::NetDevice::PacketType, ns3::empty, ns3::empty, ns3::empty>
{
public:
    PyObject *m_callback;
    PythonCallbackImpl6(PyObject *callback)
    {
        Py_INCREF(callback);
        m_callback = callback;
    }
    virtual ~PythonCallbackImpl6()
    {
        Py_DECREF(m_callback);
        m_callback = NULL;
    }

    virtual bool IsEqual(ns3::Ptr<const ns3::CallbackImplBase> other_base) const
    {
        const PythonCallbackImpl6 *other = dynamic_cast<const PythonCallbackImpl6*> (ns3::PeekPointer (other_base));
        if (other != NULL)
            return (other->m_callback == m_callback);
        else
            return false;
    }


    void
    operator()(ns3::Ptr< ns3::NetDevice > arg1, ns3::Ptr< ns3::Packet const > arg2, unsigned short arg3, ns3::Address const & arg4, ns3::Address const & arg5, ns3::NetDevice::PacketType arg6)
    {
        PyGILState_STATE __py_gil_state;
        PyObject *py_retval;
        PyNs3NetDevice *py_NetDevice;
        std::map<void*, PyObject*>::const_iterator wrapper_lookup_iter;
        PyTypeObject *wrapper_type = 0;
        PyNs3Packet *py_Packet;
        std::map<void*, PyObject*>::const_iterator wrapper_lookup_iter2;
        PyTypeObject *wrapper_type2 = 0;
        PyNs3Address *py_Address;
        PyNs3Address *py_Address2;
        PyObject *args;

        __py_gil_state = (PyEval_ThreadsInitialized() ? PyGILState_Ensure() : (PyGILState_STATE) 0);
        wrapper_lookup_iter = PyNs3ObjectBase_wrapper_registry.find((void *) const_cast<ns3::NetDevice *> (ns3::PeekPointer (arg1)));
        if (wrapper_lookup_iter == PyNs3ObjectBase_wrapper_registry.end()) {
            py_NetDevice = NULL;
        } else {
            py_NetDevice = (PyNs3NetDevice *) wrapper_lookup_iter->second;
            Py_INCREF(py_NetDevice);
        }

        if (py_NetDevice == NULL)
        {
            wrapper_type = PyNs3SimpleRefCount__Ns3Object_Ns3ObjectBase_Ns3ObjectDeleter__typeid_map.lookup_wrapper(typeid(*const_cast<ns3::NetDevice *> (ns3::PeekPointer (arg1))), &PyNs3NetDevice_Type);
            py_NetDevice = PyObject_GC_New(PyNs3NetDevice, wrapper_type);
            py_NetDevice->inst_dict = NULL;
            py_NetDevice->flags = PYBINDGEN_WRAPPER_FLAG_NONE;
            const_cast<ns3::NetDevice *> (ns3::PeekPointer (arg1))->Ref();
            py_NetDevice->obj = const_cast<ns3::NetDevice *> (ns3::PeekPointer (arg1));
            PyNs3ObjectBase_wrapper_registry[(void *) py_NetDevice->obj] = (PyObject *) py_NetDevice;
        }
        wrapper_lookup_iter2 = PyNs3Empty_wrapper_registry.find((void *) const_cast<ns3::Packet *> (ns3::PeekPointer (arg2)));
        if (wrapper_lookup_iter2 == PyNs3Empty_wrapper_registry.end()) {
            py_Packet = NULL;
        } else {
            py_Packet = (PyNs3Packet *) wrapper_lookup_iter2->second;
            Py_INCREF(py_Packet);
        }

        if (py_Packet == NULL)
        {
            wrapper_type2 = PyNs3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt____typeid_map.lookup_wrapper(typeid(*const_cast<ns3::Packet *> (ns3::PeekPointer (arg2))), &PyNs3Packet_Type);
            py_Packet = PyObject_New(PyNs3Packet, wrapper_type2);
            py_Packet->flags = PYBINDGEN_WRAPPER_FLAG_NONE;
            const_cast<ns3::Packet *> (ns3::PeekPointer (arg2))->Ref();
            py_Packet->obj = const_cast<ns3::Packet *> (ns3::PeekPointer (arg2));
            PyNs3Empty_wrapper_registry[(void *) py_Packet->obj] = (PyObject *) py_Packet;
        }
        py_Address = PyObject_New(PyNs3Address, &PyNs3Address_Type);
        py_Address->flags = PYBINDGEN_WRAPPER_FLAG_NONE;
        py_Address->obj = new ns3::Address(arg4);
        PyNs3Address_wrapper_registry[(void *) py_Address->obj] = (PyObject *) py_Address;
        py_Address2 = PyObject_New(PyNs3Address, &PyNs3Address_Type);
        py_Address2->flags = PYBINDGEN_WRAPPER_FLAG_NONE;
        py_Address2->obj = new ns3::Address(arg5);
        PyNs3Address_wrapper_registry[(void *) py_Address2->obj] = (PyObject *) py_Address2;
        args = Py_BuildValue((char *) "(NNiNNi)", py_NetDevice, py_Packet, (int) arg3, py_Address, py_Address2, arg6);
        py_retval = PyObject_CallObject(m_callback, args);
        if (py_retval == NULL) {
            Py_DECREF(args);
            if (PyEval_ThreadsInitialized())
                PyGILState_Release(__py_gil_state);
            return;
        }
        if (py_retval != Py_None) {
            PyErr_SetString(PyExc_TypeError, "function/method should return None");
            Py_DECREF(py_retval);
            Py_DECREF(args);
            if (PyEval_ThreadsInitialized())
                PyGILState_Release(__py_gil_state);
            return;
        }
        Py_DECREF(py_retval);
        Py_DECREF(args);
        if (PyEval_ThreadsInitialized())
            PyGILState_Release(__py_gil_state);
        return;
    }
};


int _wrap_convert_py2c__ns3__Tap(PyObject *value, ns3::Tap *address);


int _wrap_convert_py2c__double(PyObject *value, double *address);


int _wrap_convert_py2c__unsigned_char(PyObject *value, unsigned char *address);


int _wrap_convert_py2c__ns3__UanPacketArrival(PyObject *value, ns3::UanPacketArrival *address);


int _wrap_convert_py2c__ns3__Ptr__lt___ns3__UanPhy___gt__(PyObject *value, ns3::Ptr< ns3::UanPhy > *address);


int _wrap_convert_py2c__ns3__Ptr__lt___ns3__UanTransducer___gt__(PyObject *value, ns3::Ptr< ns3::UanTransducer > *address);

