diff options
| author | Julian Andres Klode <jak@debian.org> | 2009-07-16 21:39:31 +0200 |
|---|---|---|
| committer | Julian Andres Klode <jak@debian.org> | 2009-07-16 21:39:31 +0200 |
| commit | c7d7fbb650c8ff7c0e52c95723e1e65e295d55cf (patch) | |
| tree | 42c752f0ca0e446d44e0de23ed382cbf94f42ae6 | |
| parent | 7f861d478db844037d14aeb423eaab88a0a47716 (diff) | |
| download | python-apt-c7d7fbb650c8ff7c0e52c95723e1e65e295d55cf.tar.gz | |
python/progress.cc: Set members directly, without using Python.
| -rw-r--r-- | python/opprogress.cc | 7 | ||||
| -rw-r--r-- | python/progress.cc | 48 | ||||
| -rw-r--r-- | python/progress.h | 5 |
3 files changed, 36 insertions, 24 deletions
diff --git a/python/opprogress.cc b/python/opprogress.cc index d3738904..2ee6a03e 100644 --- a/python/opprogress.cc +++ b/python/opprogress.cc @@ -88,8 +88,13 @@ static PyMethodDef opprogress_methods[] = { {NULL}, }; +#ifndef T_BOOL +# define _T_BOOL T_INT +#else +# define _T_BOOL T_BOOL +#endif static PyMemberDef opprogress_members[] = { - {"major_change", T_INT, offsetof(PyOpProgressObject, major_change), 0, + {"major_change", _T_BOOL, offsetof(PyOpProgressObject, major_change), 0, "Boolean value indicating whether the change is a major change."}, {"percent", T_FLOAT, offsetof(PyOpProgressObject, percent), 0, "Percentage of completion (float value)."}, diff --git a/python/progress.cc b/python/progress.cc index 450b7654..123a1805 100644 --- a/python/progress.cc +++ b/python/progress.cc @@ -65,33 +65,35 @@ void PyOpProgress::Update() return; - PyObject *o; - o = Py_BuildValue("s", Op.c_str()); - PyObject_SetAttrString(callbackInst, "op", o); - Py_XDECREF(o); - o = Py_BuildValue("s", SubOp.c_str()); - if(PyObject_HasAttrString(callbackInst, "sub_op")) - PyObject_SetAttrString(callbackInst, "sub_op", o); - else - PyObject_SetAttrString(callbackInst, "subOp", o); - Py_XDECREF(o); - o = Py_BuildValue("b", MajorChange); - if(PyObject_HasAttrString(callbackInst, "major_change")) - PyObject_SetAttrString(callbackInst, "major_change", o); - else - PyObject_SetAttrString(callbackInst, "majorChange", o); - Py_XDECREF(o); - - - - if (PyObject_TypeCheck(callbackInst, &PyOpProgress_Type)) { - o = Py_BuildValue("f", Percent); - PyObject_SetAttrString(callbackInst, "percent", o); + PyOpProgressObject *obj = (PyOpProgressObject *)callbackInst; + obj->op = CppPyString(Op); + obj->subop = CppPyString(SubOp); +#ifdef T_BOOL + obj->major_change = (char)(MajorChange); +#else + obj->major_change = (int)(MajorChange); +#endif + obj->percent = Percent; RunSimpleCallback("update"); - Py_XDECREF(o); } else { + PyObject *o; + o = Py_BuildValue("s", Op.c_str()); + PyObject_SetAttrString(callbackInst, "op", o); + Py_XDECREF(o); + o = Py_BuildValue("s", SubOp.c_str()); + if(PyObject_HasAttrString(callbackInst, "sub_op")) + PyObject_SetAttrString(callbackInst, "sub_op", o); + else + PyObject_SetAttrString(callbackInst, "subOp", o); + Py_XDECREF(o); + o = Py_BuildValue("b", MajorChange); + if(PyObject_HasAttrString(callbackInst, "major_change")) + PyObject_SetAttrString(callbackInst, "major_change", o); + else + PyObject_SetAttrString(callbackInst, "majorChange", o); + Py_XDECREF(o); PyObject *arglist = Py_BuildValue("(f)", Percent); RunSimpleCallback("update", arglist); } diff --git a/python/progress.h b/python/progress.h index 50fd7f20..e21a5c5a 100644 --- a/python/progress.h +++ b/python/progress.h @@ -15,11 +15,16 @@ #include <apt-pkg/cdrom.h> #include <Python.h> + typedef struct { PyObject_HEAD PyObject *op; PyObject *subop; +#ifdef T_BOOL + char major_change; +#else int major_change; +#endif float percent; } PyOpProgressObject; |
