[Ns-developers] NS-3 PyBindGen again

Mathieu Lacage mathieu.lacage at sophia.inria.fr
Mon Jan 7 05:03:15 PST 2008


On Mon, 2008-01-07 at 12:42 +0000, Gustavo Carneiro wrote:
> On 07/01/2008, Mathieu Lacage <mathieu.lacage at sophia.inria.fr> wrote:
>         On Mon, 2008-01-07 at 11:29 +0000, Gustavo Carneiro wrote:
>         
>         [snip]
>         
>         > I won't comment on you specific implementation, but I have
>         to question
>         > whether this is really useful or not.  How often do you
>         connect 
>         > callbacks from Python to C++ functions?
>         
>         Quite often if you want to connect a C++ statistics class to a
>         trace
>         hook.
> 
> Well, let's worry about that case when we have that C++ statistics
> class,  shall we? :-) 
> 
> I don't have time to tackle all the problems at once...
> 
> 
>         [snip]
>         
>         >         Do you have an idea on how this could be
>         implemented ? If so,
>         >         could you
>         >         outline briefly how you think it could be done ?
>         >
>         > This is where we have to provide a MakeCallback API to
>         Python, the 
>         > types mangled into the name. Example:
>         >
>         > In C++:
>         >
>         > static void
>         > CourseChange (const TraceContext &context, Ptr<const
>         MobilityModel>
>         > position)
>         > {
>         > [...] 
>         > }
>         >
>         > [...]
>         >       notifier->TraceConnect ("/course-change", MakeCallback
>         > (&CourseChange));
>         > [...]
>         >
>         > In Python would be:
>         >
>         >
>         > def CourseChange (context, position): 
>         >     [...]
>         >
>         > [...]
>         >       notifier.TraceConnect("/course-change",
>         >
>         MakeCallback__lt__const_TraceContext_amp_Ptr__lt__const_MobilityModel__gt____gt__(CourseChange));
>         >
>         > Yes, it's very ugly.  But I don't see any way around it with
>         the
>         > current API.
>         >
>         > It would be nice, though, if the API could be enhanced to
>         provide
>         > introspection of the required tracing callbacks.  An API
>         like this 
>         > would be enough:
>         >
>         > const std::type_info GetTraceCallbackType(const std::string
>         path)
>         > const;
>         >
>         > Should I open a bug report?
>         
>         This API is, however, impossible to implement in C++ as far as
>         I know :/
> 
> What about this patch?  I don't know how to integrate this "upstream",

What do you intend the type_info to be used for ?

>  but this code compiles which appears to indicate it can be done.  I

This is really weird because my c++ spec states clearly that it is not
possible to copy std::type_info objects. i.e., their copy constructor
and assignment operators are expected to be private.

> This API (template <typename T> bool GetElement (T &context) const) is
> based on templated methods.  I need to generate all method template
> instantiations, but then the method names have to be mangled with the
> type names.  Again, adding dynamic introspection features to the C++
> API would be most welcome for Python bindings, else user will have to
> call methods with mangled names. 

Clearly, asking the user to use mangled names is not a practical
solution.

Mathieu



More information about the Ns-developers mailing list