@@ -106,30 +106,17 @@ py::object getPropertyValueFinfo(const ObjId& oid, const string& fname, const st
106106 return py::none ();
107107}
108108
109- py::list getPropertyElementFinfo (const ObjId& objid, const string& fname)
109+ py::object getElementFinfo (const ObjId& objid, const string& fname, const size_t i )
110110{
111111 auto oid = ObjId (objid.path () + ' /' + fname);
112112 auto len = Field<unsigned int >::get (oid, " numField" );
113113 assert (len >= 0 );
114- vector<ObjId> res (len);
115- for (size_t i = 0 ; i < len; i++)
116- res[i] = ObjId (oid.path (), oid.dataIndex , i);
117- return py::cast (res);
114+ return py::cast (ObjId (oid.path (), oid.dataIndex , i));
118115}
119116
120- template <typename A, typename L>
121117py::object getLookValueFinfo (const ObjId& oid, const string& fname, const string& key)
122118{
123- return py::cast (LookupField<A, L>::get (oid, fname, key));
124- }
125-
126- py::dict getPropertyLookValueFinfo (const ObjId& oid, const string& fname)
127- {
128- py::dict res;
129- auto v = [oid, fname](const string& key){
130- return LookupField<string, bool >::get (oid, fname, key);
131- };
132- return res;
119+ return py::cast (LookupField<string, bool >::get (oid, fname, key));
133120}
134121
135122py::object getProperty (const ObjId& oid, const string& fname)
@@ -147,10 +134,18 @@ py::object getProperty(const ObjId& oid, const string& fname)
147134
148135 if (finfoType == " ValueFinfo" )
149136 return getPropertyValueFinfo (oid, fname, rttType);
150- else if (finfoType == " FieldElementFinfo" )
151- return getPropertyElementFinfo (oid, fname);
152- else if (finfoType == " LookupValueFinfo" )
153- return getPropertyLookValueFinfo (oid, fname);
137+ else if (finfoType == " FieldElementFinfo" ) {
138+ std::function<py::object (size_t )> f = [oid, fname](const size_t & i) {
139+ return getElementFinfo (oid, fname, i);
140+ };
141+ return py::cast (f);
142+ }
143+ else if (finfoType == " LookupValueFinfo" ) {
144+ std::function<py::object (const string&)> f = [oid, fname](const string& k) {
145+ return getLookValueFinfo (oid, fname, k);
146+ };
147+ return py::cast (f);
148+ }
154149
155150 cout << " Searching for " << fname << " with rttType "
156151 << rttType << " and type: " << finfoType << endl;
0 commit comments