src/core/bindings/module_helpers.cc
author Josh Pelkey <jpelkey@gatech.edu>
Fri, 13 May 2011 14:52:27 -0400
changeset 7169 358f71a624d8
parent 6995 7ae22c26c5da
child 7256 b04ba6772f8c
permissions -rw-r--r--
core coding style changes
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     1
#include "ns3module.h"
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     2
#include "ns3/ref-count-base.h"
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     3
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     4
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
     5
namespace ns3 {
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     6
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     7
void PythonCompleteConstruct (Ptr<Object> object, TypeId typeId, const AttributeList &attributes)
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     8
{
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
     9
  object->SetTypeId (typeId);
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    10
  object->Object::Construct (attributes);
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    11
}
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    12
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    13
}
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    14
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    15
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    16
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    17
class PythonEventImpl : public ns3::EventImpl
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    18
{
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    19
private:
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    20
  PyObject *m_callback;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    21
  PyObject *m_args;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    22
public:
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    23
  PythonEventImpl (PyObject *callback, PyObject *args)
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    24
  {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    25
    m_callback = callback;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    26
    Py_INCREF(m_callback);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    27
    m_args = args;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    28
    Py_INCREF(m_args);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    29
  }
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    30
  virtual ~PythonEventImpl ()
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    31
  {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    32
    PyGILState_STATE __py_gil_state;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    33
    __py_gil_state = (PyEval_ThreadsInitialized() ? PyGILState_Ensure() : (PyGILState_STATE) 0);
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    34
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    35
    Py_DECREF(m_callback);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    36
    Py_DECREF(m_args);
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    37
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    38
    if (PyEval_ThreadsInitialized())
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    39
      PyGILState_Release(__py_gil_state);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    40
  }
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    41
  virtual void Notify ()
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    42
  {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    43
    PyGILState_STATE __py_gil_state;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    44
    __py_gil_state = (PyEval_ThreadsInitialized() ? PyGILState_Ensure() : (PyGILState_STATE) 0);
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    45
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    46
    PyObject *retval = PyObject_CallObject(m_callback, m_args);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    47
    if (retval) {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    48
        if (retval != Py_None) {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    49
            PyErr_SetString(PyExc_TypeError, "event callback should return None");
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    50
            PyErr_Print();
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    51
          }
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    52
        Py_DECREF(retval);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    53
      } else {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    54
        PyErr_Print();
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    55
      }
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    56
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    57
    if (PyEval_ThreadsInitialized())
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    58
      PyGILState_Release(__py_gil_state);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    59
  }
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    60
};
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    61
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    62
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    63
PyObject *
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    64
_wrap_Simulator_Schedule(PyNs3Simulator *PYBINDGEN_UNUSED(dummy), PyObject *args, PyObject *kwargs,
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    65
                         PyObject **return_exception)
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    66
{
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    67
  PyObject *exc_type, *traceback;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    68
  PyObject *py_time;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    69
  PyObject *py_callback;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    70
  PyObject *user_args;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    71
  ns3::Ptr<PythonEventImpl> py_event_impl;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    72
  PyNs3EventId *py_EventId;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    73
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    74
  if (kwargs && PyObject_Length(kwargs) > 0) {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    75
      PyErr_SetString(PyExc_TypeError, "keyword arguments not supported");
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    76
      goto error;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    77
    }
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    78
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    79
  if (PyTuple_GET_SIZE(args) < 2) {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    80
      PyErr_SetString(PyExc_TypeError, "ns3.Simulator.Schedule needs at least 2 arguments");
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    81
      goto error;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    82
    }
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    83
  py_time = PyTuple_GET_ITEM(args, 0);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    84
  py_callback = PyTuple_GET_ITEM(args, 1);
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    85
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    86
  if (!PyObject_IsInstance(py_time, (PyObject*) &PyNs3Time_Type)) {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    87
      PyErr_SetString(PyExc_TypeError, "Parameter 1 should be a ns3.Time instance");
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    88
      goto error;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    89
    }
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    90
  if (!PyCallable_Check(py_callback)) {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    91
      PyErr_SetString(PyExc_TypeError, "Parameter 2 should be callable");
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    92
      goto error;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    93
    }
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    94
  user_args = PyTuple_GetSlice(args, 2, PyTuple_GET_SIZE(args));
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    95
  py_event_impl = ns3::Create<PythonEventImpl>(py_callback, user_args);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    96
  Py_DECREF(user_args);
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
    97
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    98
  py_EventId = PyObject_New(PyNs3EventId, &PyNs3EventId_Type);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
    99
  py_EventId->obj = new ns3::EventId(
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   100
      ns3::Simulator::Schedule(*((PyNs3Time *) py_time)->obj, py_event_impl));
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   101
  py_EventId->flags = PYBINDGEN_WRAPPER_FLAG_NONE;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   102
  return (PyObject *) py_EventId;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   103
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   104
error:
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   105
  PyErr_Fetch(&exc_type, return_exception, &traceback);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   106
  Py_XDECREF(exc_type);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   107
  Py_XDECREF(traceback);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   108
  return NULL;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   109
}
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   110
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   111
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   112
PyObject *
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   113
_wrap_Simulator_ScheduleNow(PyNs3Simulator *PYBINDGEN_UNUSED(dummy), PyObject *args, PyObject *kwargs,
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   114
                            PyObject **return_exception)
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   115
{
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   116
  PyObject *exc_type, *traceback;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   117
  PyObject *py_callback;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   118
  PyObject *user_args;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   119
  ns3::Ptr<PythonEventImpl> py_event_impl;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   120
  PyNs3EventId *py_EventId;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   121
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   122
  if (kwargs && PyObject_Length(kwargs) > 0) {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   123
      PyErr_SetString(PyExc_TypeError, "keyword arguments not supported");
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   124
      goto error;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   125
    }
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   126
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   127
  if (PyTuple_GET_SIZE(args) < 1) {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   128
      PyErr_SetString(PyExc_TypeError, "ns3.Simulator.Schedule needs at least 1 argument");
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   129
      goto error;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   130
    }
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   131
  py_callback = PyTuple_GET_ITEM(args, 0);
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   132
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   133
  if (!PyCallable_Check(py_callback)) {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   134
      PyErr_SetString(PyExc_TypeError, "Parameter 2 should be callable");
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   135
      goto error;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   136
    }
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   137
  user_args = PyTuple_GetSlice(args, 1, PyTuple_GET_SIZE(args));
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   138
  py_event_impl = ns3::Create<PythonEventImpl>(py_callback, user_args);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   139
  Py_DECREF(user_args);
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   140
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   141
  py_EventId = PyObject_New(PyNs3EventId, &PyNs3EventId_Type);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   142
  py_EventId->obj = new ns3::EventId(ns3::Simulator::ScheduleNow(py_event_impl));
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   143
  py_EventId->flags = PYBINDGEN_WRAPPER_FLAG_NONE;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   144
  return (PyObject *) py_EventId;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   145
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   146
error:
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   147
  PyErr_Fetch(&exc_type, return_exception, &traceback);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   148
  Py_XDECREF(exc_type);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   149
  Py_XDECREF(traceback);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   150
  return NULL;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   151
}
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   152
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   153
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   154
PyObject *
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   155
_wrap_Simulator_ScheduleDestroy(PyNs3Simulator *PYBINDGEN_UNUSED(dummy), PyObject *args, PyObject *kwargs,
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   156
                                PyObject **return_exception)
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   157
{
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   158
  PyObject *exc_type, *traceback;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   159
  PyObject *py_callback;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   160
  PyObject *user_args;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   161
  ns3::Ptr<PythonEventImpl> py_event_impl;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   162
  PyNs3EventId *py_EventId;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   163
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   164
  if (kwargs && PyObject_Length(kwargs) > 0) {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   165
      PyErr_SetString(PyExc_TypeError, "keyword arguments not supported");
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   166
      goto error;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   167
    }
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   168
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   169
  if (PyTuple_GET_SIZE(args) < 1) {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   170
      PyErr_SetString(PyExc_TypeError, "ns3.Simulator.Schedule needs at least 1 argument");
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   171
      goto error;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   172
    }
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   173
  py_callback = PyTuple_GET_ITEM(args, 0);
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   174
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   175
  if (!PyCallable_Check(py_callback)) {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   176
      PyErr_SetString(PyExc_TypeError, "Parameter 2 should be callable");
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   177
      goto error;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   178
    }
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   179
  user_args = PyTuple_GetSlice(args, 1, PyTuple_GET_SIZE(args));
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   180
  py_event_impl = ns3::Create<PythonEventImpl>(py_callback, user_args);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   181
  Py_DECREF(user_args);
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   182
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   183
  py_EventId = PyObject_New(PyNs3EventId, &PyNs3EventId_Type);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   184
  py_EventId->obj = new ns3::EventId(ns3::Simulator::ScheduleDestroy(py_event_impl));
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   185
  py_EventId->flags = PYBINDGEN_WRAPPER_FLAG_NONE;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   186
  return (PyObject *) py_EventId;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   187
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   188
error:
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   189
  PyErr_Fetch(&exc_type, return_exception, &traceback);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   190
  Py_XDECREF(exc_type);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   191
  Py_XDECREF(traceback);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   192
  return NULL;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   193
}
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   194
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   195
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   196
PyObject *
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   197
_wrap_TypeId_LookupByNameFailSafe(PyNs3TypeId *PYBINDGEN_UNUSED(dummy), PyObject *args, PyObject *kwargs,
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   198
                                  PyObject **return_exception)
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   199
{
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   200
  bool ok;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   201
  const char *name;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   202
  Py_ssize_t name_len;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   203
  ns3::TypeId tid;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   204
  PyNs3TypeId *py_tid;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   205
  const char *keywords[] = { "name", NULL};
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   206
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   207
  if (!PyArg_ParseTupleAndKeywords(args, kwargs, (char *) "s#", (char **) keywords, &name, &name_len)) {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   208
      PyObject *exc_type, *traceback;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   209
      PyErr_Fetch(&exc_type, return_exception, &traceback);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   210
      Py_XDECREF(exc_type);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   211
      Py_XDECREF(traceback);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   212
      return NULL;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   213
    }
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   214
  ok = ns3::TypeId::LookupByNameFailSafe(std::string(name, name_len), &tid);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   215
  if (!ok)
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   216
    {
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   217
      PyErr_Format(PyExc_KeyError, "The ns3 type with name `%s' is not registered", name);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   218
      return NULL;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   219
    }
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   220
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   221
  py_tid = PyObject_New(PyNs3TypeId, &PyNs3TypeId_Type);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   222
  py_tid->obj = new ns3::TypeId (tid);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   223
  PyNs3TypeId_wrapper_registry[(void *) py_tid->obj] = (PyObject *) py_tid;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   224
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   225
  return (PyObject *) py_tid;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   226
}
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   227
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   228
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   229
class CommandLinePythonValueSetter : public ns3::RefCountBase
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   230
{
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   231
  PyObject *m_namespace;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   232
  std::string m_variable;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   233
public:
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   234
  CommandLinePythonValueSetter (PyObject *ns, std::string const &variable) {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   235
    Py_INCREF(ns);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   236
    m_namespace = ns;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   237
    m_variable = variable;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   238
  }
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   239
  bool Parse (std::string value) {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   240
    PyObject *pyvalue = PyString_FromStringAndSize (value.data(), value.size());
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   241
    PyObject_SetAttrString (m_namespace, (char *) m_variable.c_str(), pyvalue);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   242
    if (PyErr_Occurred()) {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   243
        PyErr_Print();
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   244
        return false;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   245
      }
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   246
    return true;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   247
  }
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   248
  virtual ~CommandLinePythonValueSetter () {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   249
    Py_DECREF (m_namespace);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   250
    m_namespace = NULL;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   251
  }
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   252
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   253
};
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   254
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   255
PyObject *
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   256
_wrap_CommandLine_AddValue(PyNs3CommandLine *self, PyObject *args, PyObject *kwargs,
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   257
                           PyObject **return_exception)
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   258
{
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   259
  const char *name, *help, *variable = NULL;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   260
  PyObject *py_namespace = NULL;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   261
  const char *keywords[] = { "name", "help", "variable", "namespace", NULL};
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   262
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   263
  if (!PyArg_ParseTupleAndKeywords(args, kwargs, (char *) "ss|sO", (char **) keywords, &name, &help, &variable, &py_namespace)) {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   264
      PyObject *exc_type, *traceback;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   265
      PyErr_Fetch(&exc_type, return_exception, &traceback);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   266
      Py_XDECREF(exc_type);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   267
      Py_XDECREF(traceback);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   268
      return NULL;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   269
    }
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   270
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   271
  if (variable == NULL) {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   272
      variable = name;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   273
    }
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   274
  if (py_namespace == NULL) {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   275
      py_namespace = (PyObject *) self;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   276
    }
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   277
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   278
  ns3::Ptr<CommandLinePythonValueSetter> setter = ns3::Create<CommandLinePythonValueSetter> (py_namespace, variable);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   279
  self->obj->AddValue (name, help, ns3::MakeCallback (&CommandLinePythonValueSetter::Parse, setter));
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   280
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   281
  Py_INCREF(Py_None);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   282
  return Py_None;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   283
}
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   284
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   285
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   286
PyObject *
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   287
_wrap_Simulator_Run(PyNs3Simulator *PYBINDGEN_UNUSED(dummy), PyObject *args, PyObject *kwargs,
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   288
                    PyObject **return_exception)
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   289
{
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   290
  const char *keywords[] = { "signal_check_frequency", NULL};
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   291
  int signal_check_frequency;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   292
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   293
  ns3::Ptr<ns3::DefaultSimulatorImpl> defaultSim =
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   294
    ns3::DynamicCast<ns3::DefaultSimulatorImpl> (ns3::Simulator::GetImplementation ());
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   295
  if (defaultSim) {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   296
      signal_check_frequency = 100;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   297
    } else {
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   298
      signal_check_frequency = -1;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   299
    }
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   300
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   301
  if (!PyArg_ParseTupleAndKeywords(args, kwargs, (char *) "|i", (char **) keywords, &signal_check_frequency)) {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   302
      PyObject *exc_type, *traceback;
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   303
      PyErr_Fetch(&exc_type, return_exception, &traceback);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   304
      Py_XDECREF(exc_type);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   305
      Py_XDECREF(traceback);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   306
      return NULL;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   307
    }
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   308
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   309
  PyThreadState *py_thread_state = NULL;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   310
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   311
  if (signal_check_frequency == -1)
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   312
    {
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   313
      if (PyEval_ThreadsInitialized ())
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   314
        py_thread_state = PyEval_SaveThread();
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   315
      ns3::Simulator::Run();
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   316
      if (py_thread_state)
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   317
        PyEval_RestoreThread(py_thread_state);
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   318
    } else {
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   319
      while (!ns3::Simulator::IsFinished())
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   320
        {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   321
          if (PyEval_ThreadsInitialized())
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   322
            py_thread_state = PyEval_SaveThread();
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   323
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   324
          for (int n = signal_check_frequency; n > 0 && !ns3::Simulator::IsFinished(); --n)
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   325
            {
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   326
              ns3::Simulator::RunOneEvent();
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   327
            }
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   328
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   329
          if (py_thread_state)
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   330
            PyEval_RestoreThread(py_thread_state);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   331
          PyErr_CheckSignals();
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   332
          if (PyErr_Occurred())
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   333
            return NULL;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   334
        }
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   335
    }
7169
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   336
  Py_INCREF(Py_None);
358f71a624d8 core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6995
diff changeset
   337
  return Py_None;
6893
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   338
}
5dccd86f90cf Modular Python bindings work (many bug fixes, more modules tested)
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents:
diff changeset
   339