summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Andres Klode <jak@debian.org>2009-07-16 21:39:31 +0200
committerJulian Andres Klode <jak@debian.org>2009-07-16 21:39:31 +0200
commitc7d7fbb650c8ff7c0e52c95723e1e65e295d55cf (patch)
tree42c752f0ca0e446d44e0de23ed382cbf94f42ae6
parent7f861d478db844037d14aeb423eaab88a0a47716 (diff)
downloadpython-apt-c7d7fbb650c8ff7c0e52c95723e1e65e295d55cf.tar.gz
python/progress.cc: Set members directly, without using Python.
-rw-r--r--python/opprogress.cc7
-rw-r--r--python/progress.cc48
-rw-r--r--python/progress.h5
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;