Listing 2: Fragment of the generated server-based infrastructure
namespace RMI { const Message& f01(Message& msg) { Widget* instance = msg.instance(); return (delete instance, msg); } const Message& f02(Message& msg) { std::string arg0 = msg.arg(0); return msg.result(new Widget(arg0)); } const Message& f03(Message& msg) { Widget* arg0 = msg.arg(0); return msg.result(new Widget(*arg0)); } const Message& f04(Message& msg) { Widget* instance = msg.instance(); Widget* arg0 = msg.arg(0); return msg.result(instance->operator=(*arg0)); } const Message& f05(Message& msg) { Widget* instance = msg.instance(); return msg.result(instance->name()); } const Message& f06(Message& msg) { std::string arg0 = msg.arg(0); Point arg1 = msg.arg(1); int arg2 = msg.arg(2); return msg.result(new Circle(arg0, arg1, arg2)); } const Message& f09(Message& msg) { Circle* instance = msg.instance(); Point arg0 = msg.arg(0); return (instance->center(arg0), msg); } const Message& f10(Message& msg) { Circle* instance = msg.instance(); return msg.result(instance->center()); } } RMI::Server::Server() { functions_["Widget::~Widget()"] = f01; functions_["Widget::Widget(const string&)"] = f02; functions_["Widget::Widget(const Widget&)"] = f03; functions_["Widget& Widget::operator=(const Widget&)"] = f04; functions_["const string& Widget::name() const"] = f05; functions_["Circle::Circle(const string&, const Point&, int)"] = f06; functions_["void Circle::center(const Point&)"] = f09; functions_["const Point& Circle::center() const"] = f10; }