📄 dispatch-resolution-optimization.spl
字号:
<?xml version="1.0"?><!-- Dispatch Resolution Optimization * ================================ * This optimization should be applied with the requests * from a client are delivered to the same operation in * an IDL interface. In general this optimization applies * to IDL interfaces that have a single operation defined * on them * * @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu> * Dispatch-Resolution-Optimization.spl,v 1.1 2005/09/29 21:32:09 arvindk Exp--><transform><module name="TAO/tao"><file name="Connection_Handler.h"><!-- Include file to be added for this specialization --><add> <hook>CONNECTION_HANDLER_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> <data> class TAO_Servant_Base; #include "tao/Abstract_Servant_Base.h" </data></add><!-- Add get and set operations to hold operation signature --><add> <hook>CONNECTION_HANDLER_SPL_PRIVATE_DATA_ADD_HOOK</hook> <data>TAO_Skeleton op_signature_;TAO_Servant_Base *servant_; </data></add><!-- Add get and set public operations for the data --><add> <hook>CONNECTION_HANDLER_SPL_PUBLIC_METHODS_ADD_HOOK</hook> <data>void set_op_signature (TAO_Skeleton &skeleton, TAO_Servant_Base *&servant);void get_op_signature (TAO_Skeleton &operation_ptr, TAO_Servant_Base *&servant); </data></add></file><file name="Connection_Handler.inl"><!-- Add operations to get and set the operation signature --><add> <hook>CONNECTION_HANDLER_SPL_METHODS_ADD_HOOK</hook> <data> ACE_INLINE void TAO_Connection_Handler::set_op_signature (TAO_Skeleton &skeleton, TAO_Servant_Base *&servant){ this->op_signature_ = skeleton; this->servant_ = servant;}ACE_INLINE voidTAO_Connection_Handler::get_op_signature (TAO_Skeleton &operation_ptr, TAO_Servant_Base *&servant){ operation_ptr = this->op_signature_; servant = this->servant_;} </data></add></file><file name="GIOP_Message_Base.h"><add><hook>GIOP_MESSAGE_BASE_DATA_MEMBER_ADD_HOOK</hook><data>bool once__;</data></add></file><file name="GIOP_Message_Base.cpp"><add> <hook>GIOP_MESSAGE_BASE_INCLUDE_ADD_HOOK</hook> <data>#include "tao/Connection_Handler.h"</data></add><!-- Add a once__ data member to the class that will only resolve the dispatch once --><substitute match-line="yes"> <search>TAO_DEF_GIOP_MINOR\)</search> <replace>TAO_DEF_GIOP_MINOR) , once__ (1) </replace></substitute><!-- Comment code that resolves dispatch normally --><comment> <start-hook>TAO_DISPATCH_RESOLUTION_OPT_COMMENT_HOOK_START</start-hook> <end-hook>TAO_DISPATCH_RESOLUTION_OPT_COMMENT_HOOK_END</end-hook></comment><!-- Add the optimized path code --><add> <hook>TAO_DISPATCH_RESOLUTION_OPT_COMMENT_HOOK_END</hook> <data> if (once__) { once__ = false; // Normal path the first time this->orb_core_->request_dispatcher ()->dispatch ( this->orb_core_, request, forward_to ACE_ENV_ARG_PARAMETER); ACE_TRY_CHECK; } else { // Dispatch directly to the skeleton TAO_Connection_Handler *handler = transport->connection_handler (); TAO_Skeleton skel; TAO_Servant_Base *skeleton_ptr; handler->get_op_signature (skel, skeleton_ptr); // Convert references to void * void *upcall_ptr = 0; skel (request, upcall_ptr, (void *)skeleton_ptr ACE_ENV_ARG_PARAMETER); if (response_required) request.tao_send_reply (); } </data></add></file></module><module name="TAO/tao/PortableServer"><file name="Servant_Base.cpp"><!-- Add necessary include files --><add> <hook>TAO_SERVANT_BASE_INCLUDE_ADD_HOOK</hook> <data>#include "tao/Transport.h"</data> <data>#include "tao/Connection_Handler.h"</data></add><!-- After processing the first request, set the operation signature on the connection handler for subsequent request processing --><add> <hook>TAO_DISPATCH_RESOLUTION_OPT_ADD_HOOK</hook> <data> TAO_Connection_Handler *handler = req.transport ()->connection_handler (); handler->set_op_signature (skel, static_cast<TAO_Servant_Base *> (derived_this)); </data></add></file></module></transform>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -