Re: [pygccxml-development] declarations string, stability
Brought to you by:
mbaas,
roman_yakovenko
From: Roman Y. <rom...@gm...> - 2007-12-09 18:43:54
|
On Dec 8, 2007 11:07 PM, Ben Schleimer <bsc...@lu...> wrote: > As a sidenote (for Roman), maybe it would be good to have hooks for a > visiter pattern in declaration_t. > Then it would obvious that if the user programmer wants to traverse the decl > tree, there's a standard interface for doing so instead of the user having > to manually traverse himself. I almost agree with you. I could improve the interface, meanwhile you can use decl_visitor_t ( http://language-binding.net/pygccxml/apidocs/pygccxml.declarations.decl_visitor.decl_visitor_t-class.html ) class and apply_visitor function ( http://language-binding.net/pygccxml/apidocs/pygccxml.declarations.algorithm-module.html#apply_visitor ) > Then the scopedef functionality wouldn't be needed. Instead, we could have a > standard set of visitors which collect different types of decls and return > them as a list or mdecl_wrapper_t like scopedef.*s() does now... Not completely true. Behind the scene, scopedef_t class introduces very powerful 2-level hash optimization declaration type : declaration name : declaration ( this scope only ) and declaration type : declaration name : declaration ( all declarations from this and internal scopes recursively ) On huge projects you feel the difference. I don't have the numbers, but you can play with scopedef_t.clear_optimizer and scopedef_t.init_optimizer functions. > I know this would be useful because I had to search for decls based on their > attributes which wasn't a param in scopedef.member_functions(..) so I had to > manually test the attributes anyway. So why do you need visitor? You already know that you need member functions, the only thing left is to specialized the query. This is easily done by passing a callable to the member_functions function: ns.mem_funs( lambda x: len( x.arguments ) > 19 ) By the way, in this case scopedef_t understands that you are looking for member function, so it cuts the number of comparisons to member functions only. It also selects the shorter list based on "recursive" argument value. P.S. What functionality is missing from the member_functions interface? -- Roman Yakovenko C++ Python language binding http://www.language-binding.net/ |