bool pyopencv_to(PyObject *o, cv::flann::IndexParams& p, const char *name)
{
(void)name;
- bool ok = false;
- PyObject* keys = PyObject_CallMethod(o,(char*)"keys",0);
- PyObject* values = PyObject_CallMethod(o,(char*)"values",0);
-
- if( keys && values )
- {
- int i, n = (int)PyList_GET_SIZE(keys);
- for( i = 0; i < n; i++ )
- {
- PyObject* key = PyList_GET_ITEM(keys, i);
- PyObject* item = PyList_GET_ITEM(values, i);
- if( !PyString_Check(key) )
+ bool ok = true;
+ PyObject* key = NULL;
+ PyObject* item = NULL;
+ Py_ssize_t pos = 0;
+
+ if(PyDict_Check(o)) {
+ while(PyDict_Next(o, &pos, &key, &item)) {
+ if( !PyString_Check(key) ) {
+ ok = false;
break;
+ }
+
String k = PyString_AsString(key);
if( PyString_Check(item) )
{
p.setDouble(k, value);
}
else
+ {
+ ok = false;
break;
+ }
}
- ok = i == n && !PyErr_Occurred();
}
- Py_XDECREF(keys);
- Py_XDECREF(values);
- return ok;
+ return ok && !PyErr_Occurred();
}
template<>