C++ Ainvoke Interface
Steve Karmesin
$Date: 2000/04/17 21:29:18 $
$Revision: 1.1 $
The interfaces defined in cheetah
core and cheetah
polymorphism deal only with moving undifferentiated buffers
of bytes across the wire. In C++ with templates we can
automatically pack and unpack a set of arguments. The goal of
this interface is to be able say something like:
ainvoke(remote_context,handler_tag,arg1,arg2,arg3)
and have the arguments get packed into a buffer, sent across the
wire, unpacked on the other side into objects of the correct
types, and the handler on the other side called using those
arguments. A couple of packages are required in order to do
this:
-
Serialize/Deserialize. Because many kinds of objects
have too much structure to just be copied with bcopy into a
buffer, something must be done to copy them into a buffer in
such a way that it can be deserialized later.
-
Type safe handler registration. When bits come off the
wire with an instruction to call a certain handler, that
handler must be recorded locally with the types encoded in
such a way that the objects can be built from the buffer and
passed to the function in as type-safe a way as possible.
-
Interaction with different controllers. Because there
are many possible controllers available, the user must be able
to do an ainvoke through a given controller, and the pack and
unpack must be able to pack and unpack in a way that works
efficiently with that controller.
These should be as orthogonal as possible.
Steve Karmesin
Last modified: Wed Mar 29 13:32:11 MST 2000