Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(498)

Unified Diff: swig/Lib/python/pyclasses.swg

Issue 553095: Checkin swig binaries for win, linux and Mac... (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/
Patch Set: '' Created 10 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « swig/Lib/python/pybuffer.i ('k') | swig/Lib/python/pycomplex.swg » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: swig/Lib/python/pyclasses.swg
===================================================================
--- swig/Lib/python/pyclasses.swg (revision 0)
+++ swig/Lib/python/pyclasses.swg (revision 0)
@@ -0,0 +1,146 @@
+#ifdef __cplusplus
+
+/*
+ SwigPtr_PyObject is used as a replacement of PyObject *, where
+ the INCREF/DECREF are applied as needed.
+
+ You can use SwigPtr_PyObject in a container, such as
+
+ std::vector<SwigPtr_PyObject>;
+
+ or as a member variable:
+
+ struct A {
+ SwigPtr_PyObject obj;
+ A(PyObject *o) : _obj(o) {
+ }
+ };
+
+ or as a input/output value
+
+ SwigPtr_PyObject func(SwigPtr_PyObject obj) {
+ SwigPtr_PyObject out = PyString_FromFormat("hello %s", PyObject_AsString(obj));
+ Py_DECREF(out);
+ return out;
+ }
+
+ just remember to pair the object creation with the proper DECREF,
+ the same as with plain PyObject *ptr, since SwigPtr_PyObject always add
+ one reference at construction.
+
+ SwigPtr_PyObject is 'visible' at the wrapped side, so you can do:
+
+
+ %template(pyvector) std::vector<swig::SwigPtr_PyObject>;
+
+ and all the proper typemaps will be used.
+
+*/
+
+namespace swig {
+ %ignore SwigPtr_PyObject;
+ struct SwigPtr_PyObject {};
+ %apply PyObject * {SwigPtr_PyObject};
+ %apply PyObject * const& {SwigPtr_PyObject const&};
+
+ /* For output */
+ %typemap(out,noblock=1) SwigPtr_PyObject {
+ $result = (PyObject *)$1;
+ Py_INCREF($result);
+ }
+
+ %typemap(out,noblock=1) SwigPtr_PyObject const & {
+ $result = (PyObject *)*$1;
+ Py_INCREF($result);
+ }
+
+}
+
+%{
+namespace swig {
+ class SwigPtr_PyObject {
+ protected:
+ PyObject *_obj;
+
+ public:
+ SwigPtr_PyObject() :_obj(0)
+ {
+ }
+
+ SwigPtr_PyObject(const SwigPtr_PyObject& item) : _obj(item._obj)
+ {
+ Py_XINCREF(_obj);
+ }
+
+ SwigPtr_PyObject(PyObject *obj, bool initial_ref = true) :_obj(obj)
+ {
+ if (initial_ref) {
+ Py_XINCREF(_obj);
+ }
+ }
+
+ SwigPtr_PyObject & operator=(const SwigPtr_PyObject& item)
+ {
+ Py_XINCREF(item._obj);
+ Py_XDECREF(_obj);
+ _obj = item._obj;
+ return *this;
+ }
+
+ ~SwigPtr_PyObject()
+ {
+ Py_XDECREF(_obj);
+ }
+
+ operator PyObject *() const
+ {
+ return _obj;
+ }
+
+ PyObject *operator->() const
+ {
+ return _obj;
+ }
+ };
+}
+%}
+
+/*
+ SwigVar_PyObject is used to manage 'in the scope' PyObject * variables,
+ as in
+
+ int func () {
+ SwigVar_PyObject obj = PyString_FromString("hello");
+ }
+
+ ie, 'obj' is created and destructed in the same scope from
+ a python object that carries at least one reference value.
+
+ SwigVar_PyObject just take care of applying the proper Py_DECREF.
+
+ Hence, this class is purely internal and not visible at the wrapped side.
+ */
+namespace swig {
+ %ignore SwigVar_PyObject;
+ struct SwigVar_PyObject {};
+ %apply PyObject * {SwigVar_PyObject};
+ %apply PyObject * const& {SwigVar_PyObject const&};
+}
+
+%{
+namespace swig {
+ struct SwigVar_PyObject : SwigPtr_PyObject {
+ SwigVar_PyObject(PyObject* obj = 0) : SwigPtr_PyObject(obj, false) { }
+
+ SwigVar_PyObject & operator = (PyObject* obj)
+ {
+ Py_XDECREF(_obj);
+ _obj = obj;
+ return *this;
+ }
+ };
+}
+%}
+
+
+#endif
« no previous file with comments | « swig/Lib/python/pybuffer.i ('k') | swig/Lib/python/pycomplex.swg » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698