File: enums.swg

package info (click to toggle)
renderdoc 1.2%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 79,584 kB
  • sloc: cpp: 491,671; ansic: 285,823; python: 12,617; java: 11,345; cs: 7,181; makefile: 6,703; yacc: 5,682; ruby: 4,648; perl: 3,461; php: 2,119; sh: 2,068; lisp: 1,835; tcl: 1,068; ml: 747; xml: 137
file content (29 lines) | stat: -rw-r--r-- 1,240 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/* -----------------------------------------------------------------------------
 * enums.swg
 *
 * Include this file in order for C/C++ enums to be wrapped by Python classes.
 * ----------------------------------------------------------------------------- */

// when returning a typed enum, check if there's a tp_dict. If there is, we
// failed to create a true Enum (e.g. running on < 3.4 where it's not available)
// and we just return the int value.
// If there's no tp_dict though, we can use the tp_base that points to the
// python Enum class type object, instead of registering our actual type.
%typemap(out) enum SWIGTYPE {
  SwigPyClientData *cd = NULL;
  PyObject *enum_constructor = NULL;
  PyObject *numerical = SWIG_From_int(static_cast< int >(result));

  cd = (SwigPyClientData*)$&1_descriptor->clientdata;
  if (cd->pytype->tp_dict) {
    $result = numerical;
  } else {
    enum_constructor = (PyObject *)cd->pytype->tp_base;
    resultobj = PyObject_CallFunctionObjArgs(enum_constructor, numerical, NULL);
    Py_DECREF(numerical);
  }
}

#define %pythonenumstrong %feature("python:enum:strong")
#define %pythonenumscoped %feature("python:enum:scoped")
#define %pythonenumclass %feature("python:enum",strong=1,scoped=1)