diff options
Diffstat (limited to 'ACE/bin/FOCUS/specializations')
9 files changed, 3104 insertions, 0 deletions
diff --git a/ACE/bin/FOCUS/specializations/Context-Specific-Optimizations/Dispatch-Resolution-Optimization.spl b/ACE/bin/FOCUS/specializations/Context-Specific-Optimizations/Dispatch-Resolution-Optimization.spl new file mode 100644 index 00000000000..c56543cf54f --- /dev/null +++ b/ACE/bin/FOCUS/specializations/Context-Specific-Optimizations/Dispatch-Resolution-Optimization.spl @@ -0,0 +1,172 @@ +<?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> + * $Id$ +--> + +<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 void +TAO_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> diff --git a/ACE/bin/FOCUS/specializations/Flushing_Strategy/Leader_Follower_Flushing_Strategy.spl b/ACE/bin/FOCUS/specializations/Flushing_Strategy/Leader_Follower_Flushing_Strategy.spl new file mode 100644 index 00000000000..a33b90ba255 --- /dev/null +++ b/ACE/bin/FOCUS/specializations/Flushing_Strategy/Leader_Follower_Flushing_Strategy.spl @@ -0,0 +1,211 @@ +<?xml version="1.0"?> + +<!-- Leader Follower Flushing Strategy Specializations + * ================================================= + * Details all the specialization transformations necessary + * to specialize the Flushing Strategy with the concrete + * Leader_Follower flushing strategy. + * + * @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + * $Id$ +--> + +<transform> + +<module name="TAO/tao"> + +<!-- Transformations to L/F Flushing Strategy --> +<file name="Leader_Follower_Flushing_Strategy.h"> + +<!-- Comment out Flushing_Strategy include --> +<remove>#include "Flushing_Strategy.h"</remove> + +<!-- Add the forward declarations --> +<add> + <hook>FLUSHING_STRATEGY_SPL_INCLUDE_ADD_HOOK</hook> + <data> +class TAO_Transport; +class TAO_Queued_Message; +class ACE_Time_Value; + +#include "TAO_Export.h" + </data> +</add> + +<!-- Remove all virtual key words --> +<remove>virtual</remove> + +<!-- Remove inheritance from Flushing strategy --> +<remove>: public TAO_Flushing_Strategy</remove> + +</file> + +<!-- Do not build other Flushing Strategies --> +<file name="tao.mpc"> + + <substitute> + <search>Flushing_Strategy.h</search> + <replace>// Flushing_Strategy.h</replace> + </substitute> + <substitute> + <search>Flushing_Strategy.cpp</search> + <replace>// Flushing_Strategy.cpp</replace> + </substitute> + + <substitute> + <search>Block_Flushing_Strategy.h</search> + <replace>// Block_Flushing_Strategy.h</replace> + </substitute> + <substitute> + <search>Block_Flushing_Strategy.cpp</search> + <replace>// Block_Flushing_Strategy.cpp</replace> + </substitute> + + <substitute> + <search>Reactive_Flushing_Strategy.h</search> + <replace>// Reactive_Flushing_Strategy.h</replace> + </substitute> + <substitute> + <search>Reactive_Flushing_Strategy.cpp</search> + <replace>// Reactive_Flushing_Strategy.cpp</replace> + </substitute> + +</file> + +<file name="default_resource.cpp"> + +<substitute match-line="yes"> + <search>#include "tao/Reactive_Flushing_Strategy.h"</search> + <replace> // #include "tao/Reactive_Flushing_Strategy.h"</replace> +</substitute> + +<substitute match-line="yes"> + <search>#include "tao/Block_Flushing_Strategy.h"</search> + <replace>// #include "tao/Block_Flushing_Strategy.h"</replace> +</substitute> + +<!-- Replace all occurences of Flushing_Strategy with + L/F Flushing Strategy --> +<substitute> + <search>TAO_Flushing_Strategy</search> + <replace>TAO_Leader_Follower_Flushing_Strategy</replace> +</substitute> + +<!-- Comment out region specified by comment hooks --> +<comment> + <start-hook>FLUSHING_STRATEGY_SPL_COMMENT_HOOK_START</start-hook> + <end-hook>FLUSHING_STRATEGY_SPL_COMMENT_HOOK_END</end-hook> +</comment> + +<!-- Add the L/F specialization after the hook --> +<add> + <hook>FLUSHING_STRATEGY_SPL_COMMENT_HOOK_END</end-hook> + <data>this->flushing_strategy_type_ = TAO_LEADER_FOLLOWER_FLUSHING; + </data> +</add> + +<!-- Comment out creation of all other flushing strategies --> +<comment> + <start-hook>FLUSHING_STRATEGY_CREATION_SPL_HOOK_START</start-hook> + <end-hook>FLUSHING_STRATEGY_CREATION_SPL_HOOK_END</end-hook> +</comment> + +<!-- Create the L/F flushing strategy directly --> +<add> + <hook>FLUSHING_STRATEGY_CREATION_SPL_HOOK_END</hook> + <data>ACE_NEW_RETURN (strategy, + TAO_Leader_Follower_Flushing_Strategy, + 0); + </data> +</add> + +</file> + +<file name="default_resource.h"> + +<!-- Replace all occurences of Flushing_Strategy with L/F strategy --> +<substitute> + <search>TAO_Flushing_Strategy</search> + <replace>TAO_Leader_Follower_Flushing_Strategy</replace> +</substitute> + +</file> + +<file name="ORB_Core.h"> + +<!-- Replace all occurences of base strategy with most + derived strategy --> +<substitute> + <search>TAO_Flushing_Strategy</search> + <replace>TAO_Leader_Follower_Flushing_Strategy</replace> +</substitute> + +</file> + +<file name="ORB_Core.cpp"> + +<!-- Replace the Flushing Strategy inclue with L/F + flushing include --> +<substitute match-line="yes"> + <search>#include "Flushing_Strategy.h"</search> + <replace>#include "Leader_Follower_Flushing_Strategy</replace> +</substitute> + +</file> + +<file name="ORB_Core.i"> + +<!-- Replace all occurences of base strategy with most + derived strategy --> +<substitute> + <search>TAO_Flushing_Strategy</search> + <replace>TAO_Leader_Follower_Flushing_Strategy</replace> +</substitute> + +</file> + +<file name="Transport.h"> + +<!-- Remove the friend declaration of Reactive_Flushing --> +<substitute match-line="yes"> + <search>friend class TAO_Reactive_Flushing_Strategy;</search> + <replace>// friend class TAO_Reactive_Flushing_Strategy;</replace> +</substitute> + +<!-- Remove friend declaration of Block Flushing --> +<substitute match-line="yes"> + <search>friend class TAO_Block_Flushing_Strategy;</search> + <replace>// friend class TAO_Block_Flushing_Strategy;</replace> +</substitute> + +</file> + +<file name="Transport.cpp"> + +<substitute match-line="yes"> + <search>#include "Flushing_Strategy.h"</search> + <replace>#include "Leader_Follower_Flushing_Strategy.h</replace> +</substitute> + +<!-- Replace all occurences of TAO_Flushing_Strategy with + TAO_Leader_Follower_Flushing --> +<substitute> + <search>TAO_Flushing_Strategy</search> + <replace>TAO_Leader_Follower_Flushing_strategy</replace> +</substitute> + +</file> + +<file name="Resource_Factor.h"> + +<!-- Replace TAO_Flushing_Strategy with L/F version --> +<substitute> + <search>TAO_Flushing_Strategy</search> + <replace>TAO_Leader_Follower_Flushing_Strategy</replace> +</substitute> + +</file> + +</module> + +</transform> diff --git a/ACE/bin/FOCUS/specializations/Messaging_Strategy/GIOP.spl b/ACE/bin/FOCUS/specializations/Messaging_Strategy/GIOP.spl new file mode 100644 index 00000000000..76e27509848 --- /dev/null +++ b/ACE/bin/FOCUS/specializations/Messaging_Strategy/GIOP.spl @@ -0,0 +1,246 @@ +<?xml version="1.0"?> + +<!-- Pluggable Messaging Specializations: + * When the concrete pluggable messaging is selected, + * this specialization removes the need for the Pluggable + * messaging interface completely from within TAO. + * + * @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + * $Id$ +--> + +<transform> + +<!-- Define the module where there are multiple files --> +<module name="TAO/tao"> + +<file name="tao.mpc"> + +<!-- Remove Pluggable messaging include altogether --> +<substitute> + <search>GIOP_Message_Lite.cpp</search> + <replace>// GIOP_Message_Lite.cpp </replace> +</substitute> +<substitute> + <search>GIOP_Message_Lite.h</search> + <replace>// GIOP_Message_Lite.h</replace> +</substitute> +<substitute> + <search>Pluggable_Messaging.h</search> + <replace>// Pluggable_Messaging.h</replace> +</substitute> +<substitute> + <search>Pluggable_Messaging.cpp</search> + <replace>// Pluggable_Messaging.cpp</replace> +</substitute> + +</file> + +<file name="GIOP_Message_Base.h"> + +<!-- Remove Pluggable Messaging include directive --> +<remove>#include "tao/Pluggable_Messaging.h"</remove> + +<!-- Remove all occurences of virtual keyword --> +<remove>virtual</remove> + +<!-- Remove inheritance from Pluggable Messaging replace with + concrete class +--> +<remove>: public TAO_Pluggable_Messaging</remove> + +<!-- Typedef the concrete type, GIOP_Message_Base as the + underlying pluggable messaging type + --> +<add> + <hook>MESSAGING_SPL_EXTERN_ADD_HOOK</hook> + <data>typedef TAO_GIOP_Message_Base TAO_Pluggable_Messaging;</data> +</add> + +<!-- The method is_ready_for_bi_directional_giop is procted, this + should be made public --> +<substitute match-line="yes"> + <!-- Operation signature --> + <search>int is_ready_for_bidirectional \(TAO_OutputCDR &msg\);</search> + <replace> + +public: + int is_ready_for_bidirectional (TAO_OutputCDR &msg); + +protected: + </replace> +</substitute> + +</file> + +<file name="IIOP_Connection_Handler.h"> + +<!-- remove forward decls --> +<remove>class TAO_Pluggable_Messaging;</remove> + +</file> + +<file name="IIOP_Transport.h"> + +<!-- remove forward decls --> +<remove>class TAO_Pluggable_Messaging;</remove> + +</file> + +<file name="TAO_Server_Request.h"> + +<!-- Remove Pluggable messaging include altogether --> +<substitute match-line="yes"> + <search>class TAO_Pluggable_Messaging;</search> + <replace>#include "tao/GIOP_Message_Base.h"</replace> +</substitute> + +</file> + +<file name="TAO_Server_Request.cpp"> + +<!-- Remove Pluggable messaging include altogether --> +<remove>#include "Pluggable_Messaging.h"</remove> + +</file> + +<file name="Transport.h"> +<!-- Remove Pluggable messaging include altogether --> +<substitute match-line="yes"> + <search>class TAO_Pluggable_Messaging;</search> + <replace>#include "tao/GIOP_Message_Base.h"</replace> +</substitute> +</file> + +<file name="Transport.cpp"> + <remove>#include "Pluggable_Messaging.h"</remove> +</file> + +</module> + +<!-- Transformations to the Messaging Directory --> +<module name="TAO/tao/Messaging"> + +<file name="AMH_Response_Handler.h"> + +<substitute match-line="yes"> + <search>class TAO_Pluggable_Messaging;</search> + <replace>#include "tao/GIOP_Message_Base.h"</replace> +</substitute> + +</file> + +<file name="AMH_Response_Handler.cpp"> + <remove>#include "tao/Pluggable_Messaging.h"</remove> +</file> + +<file name="AMH_Response_Handler.cpp"> +<substitute match-line="yes"> + <search>#include "tao/Pluggable_Messaging.h"</search> + <replace>#include "tao/GIOP_Message_Base.h"</replace> +</substitute> +</file> + +<file name="Asynch_Invocation.cpp"> + <remove>#include "tao/Pluggable_Messaging.h"</remove> +</file> + +</module> + +<module name="TAO/tao/Strategies"> + +<file name="DIOP_Connection_Handler.h"> + <remove>class TAO_Pluggable_Messaging;</remove> +</file> + +<file name="DIOP_Transport.h"> + <remove>class TAO_Pluggable_Messaging;</remove> +</file> + +<file name="DIOP_Transport.cpp"> + + <!-- Replace GIOP_Lite with GIOP --> +<comment> + <start-hook>MESSAGING_SPL_COMMENT_HOOK_START</start-hook> + <end-hook>MESSAGING_SPL_COMMENT_HOOK_END</end-hook> +</comment> + +<add> + <hook>MESSAGING_SPL_COMMENT_HOOK_END</hook> + <data> + ACE_NEW (this->messaging_object_, + TAO_GIOP_Message_Base (orb_core, + ACE_MAX_DGRAM_SIZE)); + </data> +</add> + + <remove>#include "tao/GIOP_Message_Lite.h"</remove> + +</file> + +<file name="SHMIOP_Transport.h"> + <remove>class TAO_Pluggable_Messaging;</remove> +</file> + +<file name="SHMIOP_Transport.cpp"> + <remove>#include "tao/GIOP_Message_Lite.h"</remove> + + <!-- Replace GIOP_Lite with GIOP --> +<comment> + <start-hook>MESSAGING_SPL_COMMENT_HOOK_START</start-hook> + <end-hook>MESSAGING_SPL_COMMENT_HOOK_END</end-hook> +</comment> + +<add> + <hook>MESSAGING_SPL_COMMENT_HOOK_END</hook> + <data> + ACE_NEW (this->messaging_object_, + TAO_GIOP_Message_Base (orb_core, + ACE_MAX_DGRAM_SIZE)); + </data> +</add> + +</file> + +<file name="UIOP_Connection_Handler.h"> + <remove>class TAO_Pluggable_Messaging;</remove> +</file> + +<file name="UIOP_Connection_Handler.cpp"> + <remove>#include "tao/GIOP_Message_Lite.h"</remove> +</file> + +<file name="UIOP_Transport.h"> + <remove>class TAO_Pluggable_Messaging;</remove> +</file> + +<file name="UIOP_Transport.cpp"> + + <!-- Replace GIOP_Lite with GIOP --> +<comment> + <start-hook>MESSAGING_SPL_COMMENT_HOOK_START</start-hook> + <end-hook>MESSAGING_SPL_COMMENT_HOOK_END</end-hook> +</comment> + +<add> + <hook>MESSAGING_SPL_COMMENT_HOOK_END</hook> + <data> + ACE_NEW (this->messaging_object_, + TAO_GIOP_Message_Base (orb_core, + ACE_MAX_DGRAM_SIZE)); + </data> +</add> + <remove>#include "tao/GIOP_Message_Lite.h"</remove> +</file> +</module> + +<module name="TAO/tao/DynamicInterface"> + <file name="DII_Invocation_Adapter.cpp"> + <substitute match-line="yes"> + <search>#include "tao/Pluggable_Messaging.h"</search> + <replace>#include "tao/GIOP_Message_Base.h"</replace> + </substitute> + </file> +</module> + +</transform> diff --git a/ACE/bin/FOCUS/specializations/Protocol_Family/IIOP/iiop.spl b/ACE/bin/FOCUS/specializations/Protocol_Family/IIOP/iiop.spl new file mode 100644 index 00000000000..d0da22a42f9 --- /dev/null +++ b/ACE/bin/FOCUS/specializations/Protocol_Family/IIOP/iiop.spl @@ -0,0 +1,995 @@ +<?xml version="1.0"?> + +<!-- IIOP Pluggable Protocol specialization + * ====================================== + * This specializes the pluggable protocol framework within + * TAO for the IIOP concrete protocol implementation. This + * specialization encompasses specializations, such as + * specializations for the Transport, Profile, end-point, + * Acceptor and Connector implementations within ACE+TAO. + * + * @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + * $Id$ +--> +<transform> + +<module name="TAO/tao"> + +<!-- Transformations to Transport implementation in TAO --> +<file name="Transport.h"> + +<!-- Search for TAO_Connection_Handler --> +<substitute match-line="yes"> + <search>class TAO_Connection_Handler;</search> + <replace>#include "tao/Connection_Handler.h"</replace> +</substitute> + +<!-- Add forward declarations and includes specific to + IIOP --> +<add> + <hook>TAO_TRANSPORT_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data> +namespace IIOP +{ + class ListenPointList; +} + +class TAO_Acceptor; +class TAO_Adapter; + </data> +</add> + +<!-- Remove all virtual and pure virtual methods in this + class --> +<remove>virtual</remove> + +<substitute match-line="yes"> + <search>= 0;</search> + <replace>;</replace> +</substitute> + +<!-- Replace the base class constructor with the derive + classes's constructor --> +<substitute match-line="yes"> + <search>TAO_Transport \(CORBA::ULong tag,</search> + <replace>TAO_Transport (TAO_IIOP_Connection_Handler *, CORBA::ULong tag, + </replace> +</substitute> + +<!-- Add public methods defined in IIOP_Transport --> +<add> + <hook>TAO_TRANSPORT_SPL_PUBLIC_METHODS_ADD_HOOK</hook> + <data> + + /// Bridge method to call a similar method on the connection handler + void update_protocol_properties (int send_buffer_size, + int recv_buffer_size, + int no_delay, + int enable_network_priority); + + /// Generate the request header + int generate_request_header (TAO_Operation_Details &opd, + TAO_Target_Specification &spec, + TAO_OutputCDR &msg); + </data> +</add> + +<!-- Add private methods from IIOP_Transport --> +<add> + <hook>TAO_TRANSPORT_SPL_PRIVATE_METHODS_ADD_HOOK</hook> + <data> + void set_bidir_context_info (TAO_Operation_Details &opdetails); + int get_listen_point (IIOP::ListenPointList &listen_point_list, + TAO_Acceptor *acceptor); + </data> +</add> + +<!-- Add private data from IIOP_Transport --> +<add> + <hook>TAO_TRANSPORT_SPL_DATA_MEMBERS_ADD_HOOK</hook> + <data> + /// The connection service handler used for accessing lower layer + /// communication protocols. + TAO_IIOP_Connection_Handler *connection_handler_; + + /// Our messaging object. + TAO_Pluggable_Messaging *messaging_object_; + </data> +</add> + +<!-- Typedef the TAO_Transport as IIOP_Transport --> +<add> + <hook>TAO_TRANSPORT_SPL_EXTERN_ADD_HOOK</hook> + <data>typedef TAO_Transport TAO_IIOP_Transport;</data> +</add> + +<!-- This method is overridden in the derived class --> +<substitute> + <search>generate_request_header</search> + <replace>generate_request_header_base__</replace> +</substitute> + +</file> + +<file name="Transport.cpp"> + +<!-- Add necessary includes --> +<add> + <hook>TAO_TRANSPORT_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data> +#include "Transport_Acceptor.h" +#include "IIOPC.h" +#include "Acceptor_Registry.h" +#include "operation_details.h" +#include "GIOP_Message_Base.h" +#include "Protocols_Hooks.h" + </data> +</add> + +<!-- Modify the TAO constructor adding the IIOP Transport's data --> +<substitute match-line="yes"> + <search>TAO_Transport::TAO_Transport \(CORBA::ULong tag,</search> + <replace>TAO_Transport::TAO_Transport (TAO_IIOP_Connection_Handler *handler, + CORBA::ULong tag, + </replace> +</substitute> + +<substitute match-line="yes"> + <search>, partial_message_ \(0\)</search> + <replace> , partial_message_ (0) + , connection_handler_ (handler) + , messaging_object_ (0) + </replace> +</substitute> + +<!-- Within the constructor create/initialize the messaging object --> +<add> + <hook>TAO_TRANSPORT_SPL_CONSTRUCTOR_ADD_HOOK</hook> + <data> + // Use the normal GIOP object + ACE_NEW (this->messaging_object_, + TAO_GIOP_Message_Base (orb_core)); + </data> +</add> + +<add> + <hook>TAO_TRANSPORT_SPL_DESTRUCTOR_ADD_HOOK</hook> + <data>delete this->messaging_object_;</data> +</add> + +<!-- comment out unimplemented base class methods --> +<comment> + <start-hook>TAO_TRANSPORT_SPL_COMMENT_HOOK_START</start-hook> + <end-hook>TAO_TRANSPORT_SPL_COMMENT_HOOK_END</end-hook> +</comment> + +<!-- Add the concrete methods from IIOP_Transport implementation --> +<copy-from-source> + <source>IIOP_Transport.cpp</source> + + <copy-hook-start>TAO_TRANSPORT_SPL_COPY_HOOK_START</copy-hook-start> + <copy-hook-end>TAO_TRANSPORT_SPL_COPY_HOOK_END</copy-hook-end> + + <dest-hook>TAO_TRANSPORT_SPL_METHODS_ADD_HOOK</dest-hook> +</copy-from-source> + +<!-- The derived class calls this method. Override this --> +<substitute> + <search>TAO_Transport::generate_request_header</search> + <replace>TAO_Transport::generate_request_header_base__</replace> +</substitute> + +</file> + +<!-- Transformations to specialize Connection_Handler class --> +<file name="Connection_Handler.h"> + +<!-- Remove the default constructor, NOTE: we use regular expressions + to match the constructor but not the destructor --> +<remove>\s+TAO_Connection_Handler\s*\(void\);</remove> + +<!-- Make sure that Connection_Handler inherits from SVC_HANDLER --> +<substitute match-line="yes"> + <search>: public TAO_LF_CH_Event</search> + <replace>: public TAO_IIOP_SVC_HANDLER, + public TAO_LF_CH_Event + </replace> +</substitute> + +<!-- Forward declarations --> +<add> + <hook>CONNECTION_HANDLER_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data> +#include "ace/Svc_Handler.h" +#include "ace/SOCK_Stream.h" + +typedef ACE_Svc_Handler < ACE_SOCK_STREAM, ACE_NULL_SYNCH > + TAO_IIOP_SVC_HANDLER; + +namespace IIOP +{ + class ListenPointList; +} + </data> +</add> + +<!-- Public methods from IIOP_Connection_Handler class --> +<add> + <hook>CONNECTION_HANDLER_SPL_PUBLIC_METHODS_ADD_HOOK</hook> + <data> + int open (void *); + int close (u_long = 0); + + int resume_handler (void); + int handle_output (ACE_HANDLE); + int handle_close (ACE_HANDLE, ACE_Reactor_Mask); + int handle_timeout (const ACE_Time_Value &current_time, + const void *act = 0); + + /// Add ourselves to Cache. + int add_transport_to_cache (void); + + /// Process the @a listen_list + int process_listen_point_list (IIOP::ListenPointList &listen_list); + + /// Check if network priority needs to be enabled + int enable_network_priority (void); + + TAO_Connection_Handler (ACE_Thread_Manager * = 0); + + /// Constructor. + TAO_Connection_Handler (TAO_ORB_Core *orb_core, + CORBA::Boolean flag); + </data> +</add> + +<!-- Private data members --> +<add> + <hook>CONNECTION_HANDLER_SPL_PRIVATE_DATA_ADD_HOOK</hook> + <data>int dscp_codepoint_;</data> +</add> + +<!-- Typedef the class --> +<add> + <hook>CONNECTION_HANDLER_SPL_EXTERN_ADD_HOOK</hook> + <data>typedef TAO_Connection_Handler TAO_IIOP_Connection_Handler;</data> +</add> + +<!-- Remove all virtuals and =0; from the code --> +<remove>virtual</remove> + +<substitute match-line="yes"> + <search>= 0;</search> + <replace>;</replace> +</substitute> + +</file> + +<file name="Connection_Handler.cpp"> + +<!-- Add the include hook --> +<add> + <hook>CONNECTION_HANDLER_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data> +#include "IIOPC.h" +#include "Thread_Lane_Resources.h" +#include "Base_Transport_Property.h" +#include "Protocols_Hooks.h" +#include "Wait_Strategy.h" + +#include "ace/os_include/netinet/os_tcp.h" +#include "ace/os_include/os_netdb.h" + </data> +</add> + +<!-- IIOP_Connection_Handler constructors added --> +<add> + <hook>CONNECTION_HANDLER_SPL_METHODS_ADD_HOOK</hook> + <data> +TAO_Connection_Handler::TAO_Connection_Handler (ACE_Thread_Manager *t) + : TAO_IIOP_SVC_HANDLER (t, 0 , 0), + orb_core_ (0), + dscp_codepoint_ (IPDSFIELD_DSCP_DEFAULT << 2) +{ + ACE_ASSERT (0); +} + +TAO_Connection_Handler::TAO_Connection_Handler ( + TAO_ORB_Core *orb_core, + CORBA::Boolean flag) + : TAO_IIOP_SVC_HANDLER (orb_core->thr_mgr (), 0, 0), + orb_core_ (orb_core), + transport_ (0), + dscp_codepoint_ (IPDSFIELD_DSCP_DEFAULT << 2) +{ + TAO_IIOP_Transport* specific_transport = 0; + ACE_NEW (specific_transport, + TAO_IIOP_Transport (this, IOP::TAG_INTERNET_IOP, orb_core)); + + // store this pointer (indirectly increment ref count) + this->transport (specific_transport); + + // @@todo: We need to have a distinct option/ method in the resource + // factory for this and TAO_Transport. + this->lock_ = + this->orb_core_->resource_factory ()->create_cached_connection_lock (); + + // Put ourselves in the connection wait state as soon as we get + // created + this->state_changed (TAO_LF_Event::LFS_CONNECTION_WAIT, + this->orb_core_->leader_follower ()); +} + </data> +</add> + +<!-- Replace all occurances of IIOP_Connection_Handler with that + of TAO_Connection_Handler --> +<substitute> + <search>TAO_IIOP_Connection_Handler</search> + <replace>TAO_Connection_Handler</replace> +</substitute> + +<!-- Comment out base class methods that are over-ridden in the + derived class --> +<comment> + <start-hook>CONNECTION_HANDLER_SPL_COMMENT_HOOK_START</start-hook> + <end-hook>CONNECTION_HANDLER_SPL_COMMENT_HOOK_END</end-hook> +</comment> + +<!-- Copy operations from IIOP_Connection_Handler class and put them + in the Connection_Handler class --> + +<copy-from-source> + + <source>IIOP_Connection_Handler.cpp</source> + <copy-hook-start>CONNECTION_HANDLER_SPL_COPY_HOOK_START</copy-hook-start> + <copy-hook-end>CONNECTION_HANDLER_SPL_COPY_HOOK_END</copy-hook-end> + <dest-hook>CONNECTION_HANDLER_SPL_METHODS_ADD_HOOK</dest-hook> + +</copy-from-source> + +<add> + <hook>CONNECTION_HANDLER_DESTRUCTOR_ADD_HOOK</hook> + <data>delete this->transport ();</data> +</add> + +</file> + +<!-- Modifications to Acceptor and Connector Components in TAO --> +<file name="Transport_Acceptor.h"> + +<!-- Forward declaration --> +<add> + <hook>TAO_ACCEPTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data> +#include "tao/Connection_Handler.h" +#include "tao/Acceptor_Impl.h" +#include "tao/GIOP_Message_Version.h" +#include "ace/Acceptor.h" +#include "ace/SOCK_Acceptor.h" + </data> +</add> + +<!-- Methods from IIOP_Acceptor components --> +<copy-from-source> + <source>IIOP_Acceptor.h</source> + <copy-hook-start>TAO_ACCEPTOR_SPL_CONCRETE_METHODS_COPY_HOOK_START</copy-hook-start> + <copy-hook-end>TAO_ACCEPTOR_SPL_CONCRETE_METHODS_COPY_HOOK_END</copy-hook-end> + <dest-hook>TAO_ACCEPTOR_SPL_PUBLIC_METHODS_ADD_HOOK</dest-hook> +</copy-from-source> + +<!-- Typedef hook --> +<add> + <hook>TAO_ACCEPTOR_SPL_EXTERN_ADD_HOOK</hook> + <data>typedef TAO_Acceptor TAO_IIOP_Acceptor; + #if defined(__ACE_INLINE__) + #include "tao/IIOP_Acceptor.i" + #endif /* __ACE_INLINE__ */ + </data> +</add> + +<!-- Private data memeber --> +<copy-from-source> + <source>IIOP_Acceptor.h</source> + + <copy-hook-start>TAO_ACCEPTOR_SPL_DATA_MEMBERS_COPY_HOOK_START</copy-hook-start> + <copy-hook-end>TAO_ACCEPTOR_SPL_DATA_MEMBERS_COPY_HOOK_END</copy-hook-end> + + <dest-hook>TAO_ACCEPTOR_SPL_DATA_MEMBERS_ADD_HOOK</dest-hook> +</copy-from-source> + +<!-- Eliminate the virtual functions --> +<remove>virtual</remove> +<substitute match-line="yes"> + <search>= 0;</search> + <replace>;</replace> +</substitute> + +<!-- Remove destructor --> +<remove>~TAO_IIOP_Acceptor \(void\);</remove> + +<substitute> + <search>TAO_IIOP_Acceptor</search> + <replace>TAO_Acceptor</replace> +</substitute> + +</file> + +<!-- Transformations to Transport_Acceptor.cpp --> +<file name="Transport_Acceptor.cpp"> + +<copy-from-source> + <source>IIOP_Acceptor.cpp</source> + + <copy-hook-start>TAO_ACCEPTOR_SPL_COPY_HOOK_START</copy-hook-start> + <copy-hook-end>TAO_ACCEPTOR_SPL_COPY_HOOK_END</copy-hook-end> + + <dest-hook>TAO_ACCEPTOR_SPL_METHODS_ADD_HOOK</dest-hook> +</copy-from-source> + +<!-- Modify the constructor --> +<substitute match-line="yes"> + <search>: TAO_Acceptor \(IOP::TAG_INTERNET_IOP\),</search> + <replace>: tag_ (IOP::TAG_INTERNET_IOP), + </replace> +</substitute> + +<!-- Add mthods to the destructor --> +<add> + <hook>TAO_ACCEPTOR_DESTRUCTOR_ADD_HOOK</hook> + <data> + this->close (); + delete this->creation_strategy_; + delete this->concurrency_strategy_; + delete this->accept_strategy_; + + delete [] this->addrs_; + + for (CORBA::ULong i = 0; i < this->endpoint_count_; ++i) + CORBA::string_free (this->hosts_[i]); + + delete [] this->hosts_; + </data> +</add> + +<!-- Trasnform IIOP_Acceptor to TAO_Acceptor --> +<substitute match-line="yes"> + <search>#include "tao/IIOP_Acceptor.h"</search> + <replace> </replace> +</substitute> + +<substitute match-line="yes"> + <search>#include "tao/IIOP_Profile.h"</search> + <replace>#include "tao/Profile.h"</replace> +</substitute> + +<substitute> + <search>TAO_IIOP_Acceptor::TAO_IIOP_Acceptor</search> + <replace>TAO_Acceptor::TAO_Acceptor</replace> +</substitute> + +</file> + +<file name="tao.mpc"> + +<!-- Do not build all IIOP_* files as the specializations + are moved to the base classes --> + +<substitute> + <search>IIOP_Transport.cpp</search> + <replace>// IIOP_Transport.cpp </replace> +</substitute> + +<substitute> + <search>IIOP_Transport.h</search> + <replace>// IIOP_Transport.h</replace> +</substitute> + +<substitute> + <search>IIOP_Connection_Handler.cpp</search> + <replace>// IIOP_Connection_Handler.cpp</replace> +</substitute> +<substitute> + <search>IIOP_Connection_Handler.h</search> + <replace>// IIOP_Connection_Handler.h</replace> +</substitute> + +<substitute> + <search>IIOP_Acceptor.cpp</search> + <replace>// IIOP_Acceptor.cpp</replace> +</substitute> +<substitute> + <search>IIOP_Acceptor.h</search> + <replace>// IIOP_Acceptor.h</replace> +</substitute> + +<substitute> + <search>IIOP_Connector.cpp</search> + <replace>// IIOP_Connector.cpp</replace> +</substitute> + +<substitute> + <search>IIOP_Endpoint.cpp</search> + <replace>// IIOP_Endpoint.cpp</replace> +</substitute> + +<substitute> + <search>IIOP_Connector.h</search> + <replace>// IIOP_Connector.h</replace> +</substitute> + +<substitute> + <search>IIOP_Endpoint.h</search> + <replace>// IIOP_Endpoint.h</replace> +</substitute> + +<substitute> + <search>IIOP_Profile.cpp</search> + <replace>// IIOP_Profile.cpp</replace> +</substitute> +<substitute> + <search>IIOP_Profile.h</search> + <replace>// IIOP_Profile.h</replace> +</substitute> + +</file> + +<file name="Endpoint.h"> + +<!-- Include and forward declation add hook --> +<add> + <hook>TAO_ENDPOINT_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data> +#include "tao/IIOP_EndpointsC.h" +#include "ace/INET_Addr.h" + </data> +</add> + +<!-- Copy the private member declarations from IIOP_Endpoint + implementation --> + +<copy-from-source> + <source>IIOP_Endpoint.h</source> + + <copy-hook-start>TAO_ENDPOINT_SPL_PRIVATE_DATA_COPY_HOOK_START</copy-hook-start> + <copy-hook-end>TAO_ENDPOINT_SPL_PRIVATE_DATA_COPY_HOOK_END</copy-hook-end> + + <dest-hook>TAO_ENDPOINT_SPL_PRIVATE_DATA_ADD_HOOK</dest-hook> +</copy-from-source> + +<copy-from-source> + <source>IIOP_Endpoint.h</source> + <copy-hook-start>TAO_ENDPOINT_SPL_PUBLIC_METHODS_COPY_HOOK_START</copy-hook-start> + <copy-hook-end>TAO_ENDPOINT_SPL_PUBLIC_METHODS_COPY_HOOK_END</copy-hook-end> + <dest-hook>TAO_ENDPOINT_SPL_PUBLIC_METHODS_ADD_HOOK</dest-hook> +</copy-from-source> + +<!-- Remove the unimplemented copy constructor of the base class --> +<remove>ACE_UNIMPLEMENTED_FUNC \(TAO_Endpoint \(const TAO_Endpoint&\)\)</remove> + +<substitute> + <search>TAO_IIOP_Endpoint</search> + <replace>TAO_Endpoint</replace> +</substitute> + +<substitute> + <search>TAO_IIOP_Profile</search> + <replace>TAO_Profile</replace> +</substitute> + +<add> + <hook>TAO_ENDPOINT_SPL_EXTERN_ADD_HOOK</hook> + <data>typedef TAO_Endpoint TAO_IIOP_Endpoint; + #if defined (__ACE_INLINE__) + # include "tao/IIOP_Endpoint.i" + #endif /* __ACE_INLINE__ */ + </data> +</add> + +<!-- Eliminate the virtual functions --> +<remove>virtual</remove> +<substitute match-line="yes"> + <search>= 0;</search> + <replace>;</replace> +</substitute> + +</file> + +<file name="Endpoint.cpp"> + + <copy-from-source> + <source>IIOP_Endpoint.cpp</source> + <copy-hook-start>TAO_ENDPOINT_SPL_COPY_HOOK_START</copy-hook-start> + <copy-hook-end>TAO_ENDPOINT_SPL_COPY_HOOK_END</copy-hook-end> + <dest-hook>TAO_ENDPOINT_SPL_METHODS_ADD_HOOK</dest-hook> + </copy-from-source> + + <!-- In the constructors copied from the derived class, there is a + invocation of the base class constructor. Expand it --> + <substitute match-line="yes"> + <search>: TAO_Endpoint \(IOP::TAG_INTERNET_IOP\)</search> + <replace>: addr_lookup_lock_ () + , hash_val_ (0) + , tag_ (IOP::TAG_INTERNET_IOP) + , priority_ (TAO_INVALID_PRIORITY) + </replace> + </substitute> + + <substitute match-line="yes"> + <search>: TAO_Endpoint \(IOP::TAG_INTERNET_IOP, priority\)</search> + <replace>: addr_lookup_lock_ () + , hash_val_ (0) + , tag_ (IOP::TAG_INTERNET_IOP) + , priority_ (priority) + </replace> + </substitute> + + <substitute match-line="yes"> + <search>: TAO_Endpoint \(rhs.tag_, rhs.priority_\)</search> + <replace>: addr_lookup_lock_ () + , hash_val_ (0) + , tag_ (rhs.tag_) + , priority_ (rhs.priority_) + </replace> + </substitute> + +<substitute> + <search>TAO_IIOP_Endpoint</search> + <replace>TAO_Endpoint</replace> +</substitute> + +<remove>#include "IIOP_Endpoint.h"</remove> + +</file> + +<file name="Transport_Connector.h"> + +<add> + <hook>TAO_CONNECTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data> +#include "ace/SOCK_Connector.h" +#include "ace/Connector.h" +#include "tao/Connector_Impl.h" +#include "tao/Connection_Handler.h" + </data> +</add> + +<copy-from-source> + <source>IIOP_Connector.h</source> + <copy-hook-start>TAO_CONNECTOR_SPL_PUBLIC_METHODS_COPY_HOOK_START</copy-hook-start> + <copy-hook-end>TAO_CONNECTOR_SPL_PUBLIC_METHODS_COPY_HOOK_END</copy-hook-end> + <dest-hook>TAO_CONNECTOR_SPL_PUBLIC_METHODS_ADD_HOOK</dest-hook> +</copy-from-source> + +<!-- IIOP_Connector's constructor --> +<add> + <hook>TAO_CONNECTOR_SPL_PUBLIC_METHODS_ADD_HOOK</hook> + <data> TAO_Connector (CORBA::Boolean flag = 0);</data> +</add> + +<copy-from-source> + <source>IIOP_Connector.h</source> + <copy-hook-start>TAO_CONNECTOR_SPL_COPY_HOOK_START</copy-hook-start> + <copy-hook-end>TAO_CONNECTOR_SPL_COPY_HOOK_END</copy-hook-end> + <dest-hook>TAO_CONNECTOR_SPL_PRIVATE_DATA_ADD_HOOK</dest-hook> +</copy-from-source> + +<add> + <hook>TAO_CONNECTOR_SPL_EXTERN_ADD_HOOK</hook> + <data>typedef TAO_Connector TAO_IIOP_Connector;</data> +</add> + +<!-- eliminate all virtual methods --> +<remove>virtual</remove> + +<substitute match-line="yes"> + <search>= 0;</search> + <replace>;</replace> +</substitute> + +<substitute match-line="yes"> + <search>class TAO_Endpoint;</search> + <replace>#include "tao/Endpoint.h"</replace> +</substitute> + +</file> + +<file name="Transport_Connector.cpp"> + +<add> + <hook>TAO_CONNECTOR_SPL_INCLUDE_ADD_HOOK</hook> + <data> +#include "ace/OS_NS_strings.h" + </data> +</add> + +<!-- Instrument the constructor --> +<substitute match-line="yes"> + <search>: TAO_Connector \(IOP::TAG_INTERNET_IOP\)</search> + <replace>: active_connect_strategy_ (0) + , tag_ (IOP::TAG_INTERNET_IOP) + , orb_core_ (0) + </replace> +</substitute> + +<copy-from-source> + <source>IIOP_Connector.cpp</source> + + <copy-hook-start>TAO_CONNECTOR_SPL_COPY_HOOK_START</copy-hook-start> + <copy-hook-end>TAO_CONNECTOR_SPL_COPY_HOOK_END</copy-hook-end> + + <dest-hook>TAO_CONNECTOR_SPL_METHODS_ADD_HOOK</dest-hook> +</copy-from-source> + +<!-- replace all IIOP_Connector with TAO_Connector --> +<substitute> + <search>TAO_IIOP_Connector</search> + <replace>TAO_Connector</replace> +</substitute> + +</file> + +<file name="IIOP_Factory.cpp"> + +<substitute match-line="yes"> + <search>#include "IIOP_Acceptor.h"</search> + <replace>#include "Transport_Acceptor.h"</replace> +</substitute> + +<substitute match-line="yes"> + <search>#include "IIOP_Connector.h"</search> + <replace>#include "Transport_Connector.h"</replace> +</substitute> +</file> + +<file name="IIOP_Lite_Factory.cpp"> + +<substitute match-line="yes"> + <search>#include "IIOP_Acceptor.h"</search> + <replace>#include "Transport_Acceptor.h"</replace> +</substitute> + +<substitute match-line="yes"> + <search>#include "IIOP_Connector.h"</search> + <replace>#include "Transport_Connector.h"</replace> +</substitute> +</file> + +<!-- Transformations to Profile class to make it tailored for IIOP + Profile --> +<file name="Profile.h"> + +<!-- include and forward declarations --> +<substitute match-line="yes"> + <search>class TAO_Endpoint;</search> + <replace>#include "tao/Endpoint.h"</replace> +</substitute> + +<!-- Remove all virtual methods --> +<remove>virtual</remove> +<substitute match-line="yes"> + <search>= 0;</search> + <replace>;</replace> +</substitute> + +<!-- Copy all public methods from IIOP_Profile.h --> +<copy-from-source> + <source>IIOP_Profile.h</source> + <copy-hook-start>TAO_PROFILE_SPL_PUBLIC_METHODS_COPY_HOOK_START</copy-hook-start> + <copy-hook-end>TAO_PROFILE_SPL_PUBLIC_METHODS_COPY_HOOK_END</copy-hook-end> + <dest-hook>TAO_PROFILE_SPL_PUBLIC_METHODS_ADD_HOOK</dest-hook> +</copy-from-source> + +<!-- Add proteccted data from IIOP_Profile class --> +<copy-from-source> + <source>IIOP_Profile.h</source> + <copy-hook-start>TAO_PROFILE_SPL_PROTECTED_METHODS_COPY_HOOK_START</copy-hook-start> + <copy-hook-end>TAO_PROFILE_SPL_PROTECTED_METHODS_COPY_HOOK_END</copy-hook-end> + <dest-hook>TAO_PROFILE_SPL_PROTECTED_METHODS_ADD_HOOK</dest-hook> +</copy-from-source> + +<!-- Add all the private data methods --> +<copy-from-source> + <source>IIOP_Profile.h</source> + <copy-hook-start>TAO_PROFILE_SPL_PRIVATE_DATA_COPY_HOOK_START</copy-hook-start> + <copy-hook-end>TAO_PROFILE_SPL_PRIVATE_DATA_COPY_HOOK_END</copy-hook-end> + <dest-hook>TAO_PROFILE_SPL_PRIVATE_DATA_ADD_HOOK</dest-hook> +</copy-from-source> + +<!-- Typedef the Profile class as IIOP_Profile --> +<add> + <hook>TAO_PROFILE_SPL_EXTERN_ADD_HOOK</hook> + <data> +typedef TAO_Profile TAO_IIOP_Profile; + </data> +</add> + +<substitute> + <search>TAO_IIOP_Profile</search> + <replace>TAO_Profile</replace> +</substitute> + + +</file> + +<!-- Transformations to Profile.cpp file specialized with the + IIOP_Profile implementation --> +<file name="Profile.cpp"> + +<!-- comment out virtual methods in the base class that do nothing + but have implementations due to compiler issues --> +<comment> + <start-hook>TAO_PROFILE_SPL_COMMENT_HOOK_START</start-hook> + <end-hook>TAO_PROFILE_SPL_COMMENT_HOOK_END</end-hook> +</comment> + +<copy-from-source> + <source>IIOP_Profile.cpp</source> + + <copy-hook-start>TAO_PROFILE_SPL_COPY_HOOK_START</copy-hook-start> + <copy-hook-end>TAO_PROFILE_SPL_COPY_HOOK_END</copy-hook-end> + + <dest-hook>TAO_PROFILE_SPL_METHODS_ADD_HOOK</dest-hook> +</copy-from-source> + +<!-- Add methods to the constructor of the Profile --> +<!-- Constructors are the exceptional case, we need to add + them specifically --> + +<add> + <hook>TAO_PROFILE_SPL_METHODS_ADD_HOOK</hook> + <data> +TAO_Profile::TAO_Profile (const ACE_INET_Addr &addr, + const TAO::ObjectKey &object_key, + const TAO_GIOP_Message_Version &version, + TAO_ORB_Core *orb_core) + : version_ (version) + , are_policies_parsed_ (false) + , addressing_mode_ (0) + , tagged_profile_ (0) + , ref_object_key_ (0) + , tag_ (IOP::TAG_INTERNET_IOP) + , orb_core_ (orb_core) + , forward_to_ (0) + , refcount_lock_ (0) + , refcount_ (1) + , endpoint_ (addr, + orb_core->orb_params ()->use_dotted_decimal_addresses ()) + , count_ (1) +{ + // @@ NOTE: Need to probably use a different type of lock. + this->refcount_lock_ = + this->orb_core_->client_factory ()->create_profile_lock (); + + (void) this->orb_core_->object_key_table ().bind (object_key, + this->ref_object_key_); +} + +TAO_Profile::TAO_Profile (const char* host, + CORBA::UShort port, + const TAO::ObjectKey &object_key, + const ACE_INET_Addr &addr, + const TAO_GIOP_Message_Version &version, + TAO_ORB_Core *orb_core) + : version_ (version) + , are_policies_parsed_ (false) + , addressing_mode_ (0) + , tagged_profile_ (0) + , ref_object_key_ (0) + , tag_ (IOP::TAG_INTERNET_IOP) + , orb_core_ (orb_core) + , forward_to_ (0) + , refcount_lock_ (0) + , refcount_ (1) + , endpoint_ (host, port, addr) + , count_ (1) +{ + // @@ NOTE: Need to probably use a different type of lock. + this->refcount_lock_ = + this->orb_core_->client_factory ()->create_profile_lock (); + (void) this->orb_core_->object_key_table ().bind (object_key, + this->ref_object_key_); +} + +TAO_Profile::TAO_Profile (TAO_ORB_Core *orb_core) + : version_ (TAO_GIOP_Message_Version (TAO_DEF_GIOP_MAJOR, + TAO_DEF_GIOP_MINOR)) + , are_policies_parsed_ (false) + , addressing_mode_ (0) + , tagged_profile_ (0) + , ref_object_key_ (0) + , tag_ (IOP::TAG_INTERNET_IOP) + , orb_core_ (orb_core) + , forward_to_ (0) + , refcount_lock_ (0) + , refcount_ (1) + , endpoint_ () + , count_ (1) +{ + this->refcount_lock_ = + this->orb_core_->client_factory ()->create_profile_lock (); +} +</data> +</add> + +<add> + <hook>TAO_PROFILE_SPL_DESTRUCTOR_ADD_HOOK</hook> + <data> +TAO_Endpoint *tmp = 0; +for (TAO_Endpoint *next = this->endpoint ()->next (); + next != 0; + next = tmp) +{ + tmp = next->next (); + delete next; +} + </data> +</add> + +<!-- Replace all occurances of IIOP_Profile + with TAO_Profile --> +<substitute> + <search>TAO_IIOP_Profile</search> + <replace>TAO_Profile</replace> +</substitute> + +<!-- remove the dynamic casts, as now there is no + inheritance hiearchy --> +<substitute> + <search>dynamic_cast</search> + <replace>static_cast</replace> +</substitute> + +</file> + +<file name="Invocation_Endpoint_Selectors.cpp"> + +<substitute match-line="yes"> + <search>#include "tao/IIOP_Endpoint.h"</search> + <replace>#include "tao/Endpoint.h"</replace> +</substitute> +</file> + +<file name="orbconf.h"> + +<substitute match-line="yes"> + <search>TAO_HAS_UIOP 1</search> + <replace>TAO_HAS_UIOP 0</replace> +</substitute> + +<substitute match-line="yes"> + <search>TAO_HAS_SHMIOP 1</search> + <replace>TAO_HAS_SHMIOP 0</replace> +</substitute> + +<substitute match-line="yes"> + <search>TAO_HAS_MIOP 1</search> + <replace>TAO_HAS_MIOP 0</replace> +</substitute> + +<substitute match-line="yes"> + <search>TAO_HAS_DIOP 1</search> + <replace>TAO_HAS_DIOP 0</replace> +</substitute> +</file> +</module> + +<module name="/TAO/tao/RTPortableServer"> + +<file name="RT_Servant_Dispatcher.cpp"> + +<substitute> + <search>IIOP_Transport.h</search> + <replace>Transport.h</replace> +</substitute> + +<substitute> + <search>IIOP_Connection_Handler.h</search> + <replace>Connection_Handler.h</replace> +</substitute> + +</file> + +</module> + +</transform> diff --git a/ACE/bin/FOCUS/specializations/README b/ACE/bin/FOCUS/specializations/README new file mode 100644 index 00000000000..e2126bf6566 --- /dev/null +++ b/ACE/bin/FOCUS/specializations/README @@ -0,0 +1,16 @@ +@file README +============ + +This file describes certain common conventions regarding how the +specializations rules are integrated/added to this specialization +database. This directory will serve as a repository that will host all +the specialization rules for the different families/components. At the +moment, all the specialization transformations are specific to the +ACE+TAO middleware. + +For each component framework, the following are the rules for adding +the specializations: + +. Create a directory with the name of the component family, e.g., Reactor_Family +. Within this directory, create the <<Specific_Component>>.spl file that has the + individual transformations defined. diff --git a/ACE/bin/FOCUS/specializations/Reactor_Family/Select_Reactor_MT.spl b/ACE/bin/FOCUS/specializations/Reactor_Family/Select_Reactor_MT.spl new file mode 100644 index 00000000000..6d4ecf6609b --- /dev/null +++ b/ACE/bin/FOCUS/specializations/Reactor_Family/Select_Reactor_MT.spl @@ -0,0 +1,452 @@ +<?xml version="1.0"?> + +<!-- Select Reactor Specializations: + * =============================== + * Details all the specialization transformations necessary + * to specialize the Reactor framework when the target reactor + * is a select reactor. + * + * @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + * $Id$ +--> + +<transform> + +<!-- Define the module where there are multiple files --> +<module name="ace"> + +<!-- File where the transformations happen --> +<file name="Select_Reactor_Base.h"> + +<!-- Add the following lines based on a hook --> +<add> + <hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data>class ACE_Sig_Handler;</data> + <data>class ACE_Sig_Action;</data> + <data>class ACE_Sig_Set;</data> +</add> + +<add> + <hook>REACTOR_SPL_PUBLIC_METHODS_ADD_HOOK</hook> + <data> +//--- How can we devirtualize these methods? +virtual ~ACE_Select_Reactor_Impl () {} + +virtual int notify (ACE_Event_Handler *event_handler = 0, + ACE_Reactor_Mask mask = ACE_Event_Handler::EXCEPT_MASK, + ACE_Time_Value * = 0) =0; + +virtual int remove_handler (ACE_Event_Handler *eh, + ACE_Reactor_Mask mask) =0; + +virtual int register_handler (ACE_HANDLE handle, + ACE_Event_Handler *eh, + ACE_Reactor_Mask mask) =0; + </data> +</add> + +<!-- Remove what ever is present in the tag from the file --> +<remove>virtual</remove> +<remove>: public ACE_Reactor_Impl</remove> +<remove>#include "ace/Reactor_Impl.h"</remove> + +<!-- Replace a with b --> +<substitute> + <search>public ACE_Reactor_Notify</search> + <replace>public ACE_Event_Handler</replace> +</substitute> + +<!-- Replace the generic versions with the Select specialized versions --> +<substitute> + <search>ACE_Reactor_Notify</search> + <replace>ACE_Select_Reactor_Notify</replace> +</substitute> + +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor_Impl</replace> +</substitute> + +<!-- After the specialization, the following functions are still virtual --> +<substitute> + <search>void renew</search> + <replace>virtual void renew</replace> +</substitute> +<substitute> + <search>int is_suspended_i</search> + <replace>virtual int is_suspended_i</replace> +</substitute> +<substitute> + <search>void clear_dispatch_mask</search> + <replace>virtual void clear_dispatch_mask</replace> +</substitute> + +</file> + +<file name="Select_Reactor_Base.cpp"> + +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor_Impl</replace> +</substitute> + +</file> + +<file name="Select_Reactor_Base.inl"> + +<remove>#include "ace/Reactor.h"</remove> + +</file> + +<!-- Transformations to Reactor_Token_T.h --> +<file name="Reactor_Token_T.h"> + +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor_Impl</replace> +</substitute> + +<substitute match-line="yes"> + <search>#include "ace/Reactor_Impl.h"</search> + <replace>#include "ace/Select_Reactor_Base.h"</replace> +</substitute> + +</file> + +<file name="Reactor_Token_T.cpp"> + +<!-- Search for ACE_Reactor_Impl and replace it with + ACE_Select_Reactor_Impl --> +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor_Impl</replace> +</substitute> + +</file> + +<file name="Select_Reactor_T.h"> + +<add> +<hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> +<data>class ACE_Sig_Handler;</data> +<data>class ACE_Sig_Action;</data> +<data>class ACE_Sig_Set;</data> +</add> + +<substitute> + <search>ACE_Reactor_Notify</search> + <replace>ACE_Select_Reactor_Notify</replace> +</substitute> + +<remove>virtual</remove> + +</file> + +<file name="Select_Reactor_T.cpp"> + +<add> + <hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data>#include "ace/Countdown_Time.h"</data> +</add> + +<substitute> + <search>ACE_Reactor_Notify</search> + <replace>ACE_Select_Reactor_Notify</replace> +</substitute> + +</file> + +<!-- +<file name="Select_Reactor_T.inl"> + +<remove>#include "ace/Reactor.h"</remove> + +</file> +--> + +<file name="Reactor.h"> + +<add> +<hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> +<data>#include "ace/Select_Reactor.h"</data> +</add> + +<remove>class ACE_Reactor_Impl;</remove> +<remove>virtual</remove> + +<substitute> +<search>ACE_Reactor_Impl</search> +<replace>ACE_Select_Reactor</replace> +</substitute> + +<!-- Remove the Reactor_Timer interface include --> +<remove>: public ACE_Reactor_Timer_Interface</remove> +<remove>#include "ace/Reactor_Timer_Interface.h"</remove> + +</file> + +<file name="Event_Handler.h"> + +<!-- remove the ACE_Event_Handler forware declaration --> +<remove>class ACE_Reactor_Timer_Interface;</remove> + +<!-- substitute ACE_Reactor_Timer operations with ACE_Reactor --> +<substitute> + <search>ACE_Reactor_Timer_Interface</search> + <replace>ACE_Reactor</replace> +</substitute> +</file> + +<file name="Event_Handler.cpp"> + <substitute> + <search>ACE_Reactor_Timer_Interface</search> + <replace>ACE_Reactor</replace> + </substitute> +</file> + +<file name="Timer_Queue_T.cpp"> + +<!-- Remove the Reactor_Timer_Interface include --> +<remove>#include "ace/Reactor_Timer_Interface.h"</remove> + +</file> + + +<file name="Reactor.cpp"> + +<!-- Comment the conditional includes in the file --> +<comment> + <start-hook>REACTOR_SPL_COMMENT_INCLUDE_START_HOOK</start-hook> + <end-hook>REACTOR_SPL_COMMENT_INCLUDE_END_HOOK</end-hook> +</comment> + +<!-- Comment out conditional includes files in the Reactor's + constructor +--> +<comment> + <start-hook>REACTOR_SPL_CONSTRUCTOR_COMMENT_HOOK_START</start-hook> + <end-hook>REACTOR_SPL_CONSTRUCTOR_COMMENT_HOOK_END</end-hook> +</comment> + +<!-- Within the constructor now create the right Reactor --> +<add> + <hook>REACTOR_SPL_CONSTRUCTOR_COMMENT_HOOK_END</hook> + <data> + ACE_NEW (impl, + ACE_Select_Reactor); + </data> +</add> + +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor</replace> +</substitute> + +</file> + +<file name="Reactor.inl"> + +<add> + <hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data> +// Check if this is necessary +#include "ace/Select_Reactor.h" + </data> +</add> + +</file> + +<!-- Do not build the other reactors than the Select Reactor! --> +<file name="ace.mpc"> + +<!-- Here is where regular expressions can come handy. Such + a capability is not currently provided + --> +<substitute> + <search>TP_Reactor.h</search> + <replace>// TP_Reactor.h </replace> +</substitute> +<substitute> + <search>TP_Reactor.cpp</search> + <replace>// TP_Reactor.cpp</replace> +</substitute> + +<!-- Do not build the Msg_WFMO_Reactor --> +<substitute> + <search>Msg_WFMO_Reactor.cpp</search> + <replace>// Msg_WFMO_Reactor.cpp</replace> +</substitute> + +<!-- Do not build the WFMO Reactor --> +<substitute> + <search>WFMO_Reactor.cpp</search> + <replace>// WFMO_Reactor.cpp</replace> +</substitute> + +<!-- Do not build the Reactor Impl --> +<substitute> + <search>Reactor_Impl.cpp</search> + <replace>// Reactor_Impl.cpp</replace> +</substitute> +<substitute> + <search>Reactor_Impl.h</search> + <replace>// Reactor_Impl.h</replace> +</substitute> + +<!-- Do not build the Dev Poll Reactor --> +<substitute> + <search>Dev_Poll_Reactor.cpp</search> + <replace>// Dev_Poll_Reactor.cpp</replace> +</substitute> + +<!-- Do not build the priority Reactor --> +<substitute> + <search>Priority_Reactor.cpp</search> + <replace>// Priority_Reactor.cpp</replace> +</substitute> + +<!-- Do not build the Reactor_Timer_Interface --> +<substitute> + <search>Reactor_Timer_Interface.h</search> + <replace>// Reactor_Timer_Interface.h</replace> +</substitute> +<substitute> + <search>Reactor_Timer_Interface.cpp</search> + <replace>// Reactor_Timer_Interface.cpp </replace> +</substitute> + +</file> + +</module> + +<!-- transformations required in TAO to work with a select reactor --> +<module name="TAO/tao"> + +<!-- Changes to default_resource.h --> +<file name="default_resource.h"> + +<!-- Remove the forward declaration of ACE_Reactor_Impl --> +<substitute match-line="yes"> +<search>class ACE_Reactor_Impl;</search> +<replace>#include "ace/Reactor.h"</replace> +</substitute> + +<!-- Replace all occurences of ACE_Reactor_Impl with + ACE_Select_Reactor --> +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor</replace> +</substitute> + +</file> + +<!-- Changes to default_resource.cpp --> +<file name="default_resource.cpp"> + +<!-- Remove the occurence of TP_Reactor --> +<remove>#include "ace/TP_Reactor.h"</remove> + +<!-- Replace all occurences of ACE_Reactor_Impl with + ACE_Select_Reactor --> +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor</replace> +</substitute> + +<!-- Comment out the code that creates TP_Reactor --> +<comment> + <start-hook>TAO_REACTOR_SPL_COMMENT_HOOK_START</start-hook> + <end-hook>TAO_REACTOR_SPL_COMMENT_HOOK_END</end-hook> +</comment> + +<!-- Add hook to add code that creates the select reactor + component --> +<add> + <!-- We use the same hook that signifies where the comment code + ended to add the concrete Reactor type --> + <hook>TAO_REACTOR_SPL_COMMENT_HOOK_END</hook> + <data> + ACE_NEW_RETURN (impl, + TAO_REACTOR ((ACE_Sig_Handler*)0, + (ACE_Timer_Queue*)0, + 0, + (ACE_Select_Reactor_Notify*)0, + this->reactor_mask_signals_), + 0); + </data> +</add> +</file> + +<!-- changes to tao.mpc --> +<file name="tao.mpc"> + <substitute> + <search>GUIResource_Factory.cpp</search> + <replace>// GUIResource_Factory.cpp</replace> + </substitute> + <substitute> + <search>GUIResource_Factory.h</search> + <replace>// GUIResource_Factory.h</replace> + </substitute> +</file> + +</module> + +<module name="TAO/tao/Strategies"> + +<file name="advanced_resource.h"> + +<!-- Replace all occurances of ACE_Reactor_Impl with + Select_Reactor + --> +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor</replace> +</substitute> + +</file> + +<file name="advanced_resource.cpp"> + +<!-- Comment out all other reactor includes --> +<remove>#include "ace/FlReactor.h"</remove> +<remove>#include "ace/TkReactor.h"</remove> +<remove>#include "ace/WFMO_Reactor.h"</remove> +<remove>#include "ace/TP_Reactor.h"</remove> +<remove>#include "ace/Msg_WFMO_Reactor.h"</remove> + +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor</replace> +</substitute> + +<!-- Replace Select_Reactor.h with Reactor.h --> +<substitute> + <search>ace/Select_Reactor.h</search> + <replace>ace/Reactor.h</replace> +</substitute> + +<!-- Comment out creation code for all other reactors --> +<comment> + <start-hook>TAO_ADVANCED_RESOURCE_REACTOR_SPL_COMMENT_HOOK_START</start-hook> + <end-hook>TAO_ADVANCED_RESOURCE_REACTOR_SPL_COMMENT_HOOK_END</end-hook> +</comment> + +<!-- Use the end hook to insert code that will create right reactor --> +<add> + <hook>TAO_ADVANCED_RESOURCE_REACTOR_SPL_COMMENT_HOOK_END</hook> + <data> + ACE_NEW_RETURN (impl, + TAO_REACTOR ((ACE_Sig_Handler*)0, + (ACE_Timer_Queue*)0, + 0, + (ACE_Select_Reactor_Notify*)0, + this->reactor_mask_signals_), + 0); + </data> +</add> + +</file> + +</module> + +</transform> diff --git a/ACE/bin/FOCUS/specializations/Reactor_Family/Select_Reactor_ST.spl b/ACE/bin/FOCUS/specializations/Reactor_Family/Select_Reactor_ST.spl new file mode 100644 index 00000000000..145136455a2 --- /dev/null +++ b/ACE/bin/FOCUS/specializations/Reactor_Family/Select_Reactor_ST.spl @@ -0,0 +1,468 @@ +<?xml version="1.0"?> + +<!-- Select Reactor Specializations: + * =============================== + * Details all the specialization transformations necessary + * to specialize the Reactor framework when the target reactor + * is a select reactor. + * + * @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + * $Id$ +--> + +<transform> + +<!-- Define the module where there are multiple files --> +<module name="ace"> + +<!-- File where the transformations happen --> +<file name="Select_Reactor_Base.h"> + +<!-- Add the following lines based on a hook --> +<add> + <hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data>class ACE_Sig_Handler;</data> + <data>class ACE_Sig_Action;</data> + <data>class ACE_Sig_Set;</data> +</add> + +<add> + <hook>REACTOR_SPL_PUBLIC_METHODS_ADD_HOOK</hook> + <data> +//These methods needs to be virtual as they are used by +//Select_Reactor_Notify classes which use the base class +virtual ~ACE_Select_Reactor_Impl () {} + +virtual int notify (ACE_Event_Handler *event_handler = 0, + ACE_Reactor_Mask mask = ACE_Event_Handler::EXCEPT_MASK, + ACE_Time_Value * = 0) =0; + +virtual int remove_handler (ACE_Event_Handler *eh, + ACE_Reactor_Mask mask) =0; + +virtual int register_handler (ACE_HANDLE handle, + ACE_Event_Handler *eh, + ACE_Reactor_Mask mask) =0; + </data> +</add> + +<!-- Remove what ever is present in the tag from the file --> +<remove>virtual</remove> +<remove>: public ACE_Reactor_Impl</remove> +<remove>#include "ace/Reactor_Impl.h"</remove> + +<!-- Replace a with b --> +<substitute> + <search>public ACE_Reactor_Notify</search> + <replace>public ACE_Event_Handler</replace> +</substitute> + +<!-- Replace the generic versions with the Select specialized versions --> +<substitute> + <search>ACE_Reactor_Notify</search> + <replace>ACE_Select_Reactor_Notify</replace> +</substitute> + +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor_Impl</replace> +</substitute> + +<!-- After the specialization, the following functions are still virtual --> +<substitute> + <search>void renew</search> + <replace>virtual void renew</replace> +</substitute> +<substitute> + <search>int is_suspended_i</search> + <replace>virtual int is_suspended_i</replace> +</substitute> +<substitute> + <search>void clear_dispatch_mask</search> + <replace>virtual void clear_dispatch_mask</replace> +</substitute> + +</file> + +<file name="Select_Reactor_Base.cpp"> + +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor_Impl</replace> +</substitute> + +</file> + +<file name="Select_Reactor_Base.inl"> + +<remove>#include "ace/Reactor.h"</remove> + +</file> + +<file name="Select_Reactor_T.h"> + +<add> +<hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> +<data>class ACE_Sig_Handler;</data> +<data>class ACE_Sig_Action;</data> +<data>class ACE_Sig_Set;</data> +</add> + +<substitute> + <search>ACE_Reactor_Notify</search> + <replace>ACE_Select_Reactor_Notify</replace> +</substitute> + +<remove>virtual</remove> + +</file> + +<file name="Select_Reactor_T.cpp"> + +<add> + <hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data>#include "ace/Countdown_Time.h"</data> +</add> + +<substitute> + <search>ACE_Reactor_Notify</search> + <replace>ACE_Select_Reactor_Notify</replace> +</substitute> + +</file> + +<!-- +<file name="Select_Reactor_T.inl"> + +<remove>#include "ace/Reactor.h"</remove> + +</file> +--> + +<!-- Transformations to Reactor_Token_T.h --> +<file name="Reactor_Token_T.h"> + +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor_Impl</replace> +</substitute> + +<substitute match-line="yes"> + <search>#include "ace/Reactor_Impl.h"</search> + <replace>#include "ace/Select_Reactor_Base.h"</replace> +</substitute> + +</file> + +<file name="Reactor_Token_T.cpp"> + +<!-- Search for ACE_Reactor_Impl and replace it with + ACE_Select_Reactor_Impl --> +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor_Impl</replace> +</substitute> + +</file> + +<file name="Reactor.h"> + +<add> +<hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> +<data>#include "ace/Select_Reactor.h"</data> +</add> + +<remove>class ACE_Reactor_Impl;</remove> +<remove>virtual</remove> + +<substitute> +<search>ACE_Reactor_Impl</search> +<replace>ACE_Select_Reactor</replace> +</substitute> + +<!-- Remove the Reactor_Timer interface include --> +<remove>: public ACE_Reactor_Timer_Interface</remove> +<remove>#include "ace/Reactor_Timer_Interface.h"</remove> + +</file> + +<file name="Event_Handler.h"> + +<!-- remove the ACE_Event_Handler forware declaration --> +<remove>class ACE_Reactor_Timer_Interface;</remove> + +<!-- substitute ACE_Reactor_Timer operations with ACE_Reactor --> +<substitute> + <search>ACE_Reactor_Timer_Interface</search> + <replace>ACE_Reactor</replace> +</substitute> +</file> + +<file name="Event_Handler.cpp"> + <substitute> + <search>ACE_Reactor_Timer_Interface</search> + <replace>ACE_Reactor</replace> + </substitute> +</file> + +<file name="Timer_Queue_T.cpp"> + +<!-- Remove the Reactor_Timer_Interface include --> +<remove>#include "ace/Reactor_Timer_Interface.h"</remove> + +</file> + +<file name="Reactor.cpp"> + +<!-- Comment the conditional includes in the file --> +<comment> + <start-hook>REACTOR_SPL_COMMENT_INCLUDE_START_HOOK</start-hook> + <end-hook>REACTOR_SPL_COMMENT_INCLUDE_END_HOOK</end-hook> +</comment> + +<!-- Comment out conditional includes files in the Reactor's + constructor +--> +<comment> + <start-hook>REACTOR_SPL_CONSTRUCTOR_COMMENT_HOOK_START</start-hook> + <end-hook>REACTOR_SPL_CONSTRUCTOR_COMMENT_HOOK_END</end-hook> +</comment> + +<!-- Within the constructor now create the right Reactor --> +<add> + <hook>REACTOR_SPL_CONSTRUCTOR_COMMENT_HOOK_END</hook> + <data> + ACE_NEW (impl, + ACE_Select_Reactor); + </data> +</add> + +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor</replace> +</substitute> + +</file> + +<file name="Reactor.inl"> + +<add> + <hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data> +// Check if this is necessary +#include "ace/Select_Reactor.h" + </data> +</add> + +</file> + +<file name="Select_Reactor.h"> + +<!-- comment out the lock based select reactor, which is a select_mt --> +<comment> + <start-hook>TAO_REACTOR_SPL_COMMENT_HOOK_START</start-hook> + <end-hook>TAO_REACTOR_SPL_COMMENT_HOOK_END</end-hook> +</comment> + +<add> + <hook>TAO_REACTOR_SPL_COMMENT_HOOK_END</hook> + <data> + typedef ACE_Select_Reactor_T <ACE_Reactor_Token_T < ACE_Noop_Token > > ACE_Select_Reactor; + </data> +</add> +</file> + +<!-- Do not build the other reactors than the Select Reactor! --> +<file name="ace.mpc"> + +<!-- Here is where regular expressions can come handy. Such + a capability is not currently provided + --> +<substitute> + <search>TP_Reactor.h</search> + <replace>// TP_Reactor.h </replace> +</substitute> +<substitute> + <search>TP_Reactor.cpp</search> + <replace>// TP_Reactor.cpp</replace> +</substitute> + +<!-- Do not build the Msg_WFMO_Reactor --> +<substitute> + <search>Msg_WFMO_Reactor.cpp</search> + <replace>// Msg_WFMO_Reactor.cpp</replace> +</substitute> + +<!-- Do not build the WFMO Reactor --> +<substitute> + <search>WFMO_Reactor.cpp</search> + <replace>// WFMO_Reactor.cpp</replace> +</substitute> + +<!-- Do not build the Reactor Impl --> +<substitute> + <search>Reactor_Impl.cpp</search> + <replace>// Reactor_Impl.cpp</replace> +</substitute> +<substitute> + <search>Reactor_Impl.h</search> + <replace>// Reactor_Impl.h</replace> +</substitute> + +<!-- Do not build the Dev Poll Reactor --> +<substitute> + <search>Dev_Poll_Reactor.cpp</search> + <replace>// Dev_Poll_Reactor.cpp</replace> +</substitute> + +<!-- Do not build the priority Reactor --> +<substitute> + <search>Priority_Reactor.cpp</search> + <replace>// Priority_Reactor.cpp</replace> +</substitute> + +<!-- Do not build the Reactor_Timer_Interface --> +<substitute> + <search>Reactor_Timer_Interface.h</search> + <replace>// Reactor_Timer_Interface.h</replace> +</substitute> +<substitute> + <search>Reactor_Timer_Interface.cpp</search> + <replace>// Reactor_Timer_Interface.cpp </replace> +</substitute> + +</file> + +</module> + +<!-- transformations required in TAO to work with a select reactor --> +<module name="TAO/tao"> + +<!-- Changes to default_resource.h --> +<file name="default_resource.h"> + +<!-- Remove the forward declaration of ACE_Reactor_Impl --> +<substitute match-line="yes"> +<search>class ACE_Reactor_Impl;</search> +<replace>#include "ace/Reactor.h"</replace> +</substitute> + +<!-- Replace all occurences of ACE_Reactor_Impl with + ACE_Select_Reactor --> +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor</replace> +</substitute> + +</file> + +<!-- Changes to default_resource.cpp --> +<file name="default_resource.cpp"> + +<!-- Remove the occurence of TP_Reactor --> +<remove>#include "ace/TP_Reactor.h"</remove> + +<!-- Replace all occurences of ACE_Reactor_Impl with + ACE_Select_Reactor --> +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor</replace> +</substitute> + +<!-- Comment out the code that creates TP_Reactor --> +<comment> + <start-hook>TAO_REACTOR_SPL_COMMENT_HOOK_START</start-hook> + <end-hook>TAO_REACTOR_SPL_COMMENT_HOOK_END</end-hook> +</comment> + +<!-- Add hook to add code that creates the select reactor + component --> +<add> + <!-- We use the same hook that signifies where the comment code + ended to add the concrete Reactor type --> + <hook>TAO_REACTOR_SPL_COMMENT_HOOK_END</hook> + <data> + ACE_NEW_RETURN (impl, + TAO_NULL_LOCK_REACTOR ((ACE_Sig_Handler*)0, + (ACE_Timer_Queue*)0, + 0, + (ACE_Select_Reactor_Notify*)0, + this->reactor_mask_signals_), + 0); + </data> +</add> +</file> + +<!-- changes to tao.mpc --> +<file name="tao.mpc"> + <substitute> + <search>GUIResource_Factory.cpp</search> + <replace>// GUIResource_Factory.cpp</replace> + </substitute> + <substitute> + <search>GUIResource_Factory.h</search> + <replace>// GUIResource_Factory.h</replace> + </substitute> +</file> + +</module> + +<module name="TAO/tao/Strategies"> + +<file name="advanced_resource.h"> + +<!-- Replace all occurances of ACE_Reactor_Impl with + Select_Reactor + --> +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor</replace> +</substitute> + +</file> + +<file name="advanced_resource.cpp"> + +<!-- Comment out all other reactor includes --> +<remove>#include "ace/FlReactor.h"</remove> +<remove>#include "ace/TkReactor.h"</remove> +<remove>#include "ace/WFMO_Reactor.h"</remove> +<remove>#include "ace/TP_Reactor.h"</remove> +<remove>#include "ace/Msg_WFMO_Reactor.h"</remove> + +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor</replace> +</substitute> + +<!-- Replace Select_Reactor.h with Reactor.h --> +<substitute> + <search>ace/Select_Reactor.h</search> + <replace>ace/Reactor.h</replace> +</substitute> + +<!-- Comment out creation code for all other reactors --> +<comment> + <start-hook>TAO_ADVANCED_RESOURCE_REACTOR_SPL_COMMENT_HOOK_START</start-hook> + <end-hook>TAO_ADVANCED_RESOURCE_REACTOR_SPL_COMMENT_HOOK_END</end-hook> +</comment> + +<!-- Use the end hook to insert code that will create right reactor --> +<add> + <hook>TAO_ADVANCED_RESOURCE_REACTOR_SPL_COMMENT_HOOK_END</hook> + <data> + ACE_NEW_RETURN (impl, + TAO_NULL_LOCK_REACTOR ((ACE_Sig_Handler*)0, + (ACE_Timer_Queue*)0, + 0, + (ACE_Select_Reactor_Notify*)0, + this->reactor_mask_signals_), + 0); + </data> +</add> + +</file> + +</module> + +</transform> diff --git a/ACE/bin/FOCUS/specializations/Reactor_Family/TP_Reactor.spl b/ACE/bin/FOCUS/specializations/Reactor_Family/TP_Reactor.spl new file mode 100644 index 00000000000..f25c5fe5416 --- /dev/null +++ b/ACE/bin/FOCUS/specializations/Reactor_Family/TP_Reactor.spl @@ -0,0 +1,439 @@ +<?xml version="1.0"?> + +<!-- Thread Pool Reactor Specializations: + * ====================================== + * Thread Pool reactor is a variation of the Select Reactor. + * This specialization includes all of the specializations + * that are present in Select_Reactor.spl + * + * @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + * $Id$ +--> + +<transform> + +<module name="ace"> + +<!-- File where the transformations happen --> +<file name="Select_Reactor_Base.h"> + +<!-- Add the following lines based on a hook --> +<add> + <hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data>class ACE_Sig_Handler;</data> + <data>class ACE_Sig_Action;</data> + <data>class ACE_Sig_Set;</data> +</add> + +<!-- Remove what ever is present in the tag from the file --> +<remove>#include "ace/Reactor_Impl.h"</remove> +<remove>virtual</remove> +<remove>: public ACE_Reactor_Impl</remove> + +<!-- Replace a with b --> +<substitute> + <search>public ACE_Reactor_Notify</search> + <replace>public ACE_Event_Handler</replace> +</substitute> + +<add> + <hook>REACTOR_SPL_PUBLIC_METHODS_ADD_HOOK</hook> + <data> +//--- How can we devirtualize these methods? +virtual ~ACE_Select_Reactor_Impl () {} + +virtual int notify (ACE_Event_Handler *event_handler = 0, + ACE_Reactor_Mask mask = ACE_Event_Handler::EXCEPT_MASK, + ACE_Time_Value * = 0) = 0; + +virtual int remove_handler (ACE_Event_Handler *eh, + ACE_Reactor_Mask mask) = 0; + +virtual int register_handler (ACE_HANDLE handle, + ACE_Event_Handler *eh, + ACE_Reactor_Mask mask) =0; +//-------------------------------------------- + </data> +</add> + +<substitute> + <search>ACE_Reactor_Notify</search> + <replace>ACE_Select_Reactor_Notify</replace> +</substitute> + +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor_Impl</replace> +</substitute> + +<!-- After the specialization, the following functions are still virtual --> +<substitute> + <search>void renew</search> + <replace>virtual void renew</replace> +</substitute> +<substitute> + <search>int is_suspended_i</search> + <replace>virtual int is_suspended_i</replace> +</substitute> +<substitute> + <search>void clear_dispatch_mask</search> + <replace>virtual void clear_dispatch_mask</replace> +</substitute> + +</file> + +<file name="Select_Reactor_Base.cpp"> + +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor_Impl</replace> +</substitute> + +</file> + +<file name="Select_Reactor_Base.inl"> + +<remove>#include "ace/Reactor.h"</remove> + +</file> + +<file name="Select_Reactor_T.h"> + +<add> +<hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> +<data>class ACE_Sig_Handler;</data> +<data>class ACE_Sig_Action;</data> +<data>class ACE_Sig_Set;</data> +</add> + +<substitute> + <search>ACE_Reactor_Notify</search> + <replace>ACE_Select_Reactor_Notify</replace> +</substitute> +</file> + +<file name="Select_Reactor_T.cpp"> + +<add> + <hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data>#include "ace/Countdown_Time.h"</data> +</add> + +<substitute> + <search>ACE_Reactor_Notify</search> + <replace>ACE_Select_Reactor_Notify</replace> +</substitute> + +</file> + +<!-- Transformations to Reactor_Token_T.h --> +<file name="Reactor_Token_T.h"> + +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor_Impl</replace> +</substitute> + +<substitute match-line="yes"> + <search>#include "ace/Reactor_Impl.h"</search> + <replace>#include "ace/Select_Reactor_Base.h"</replace> +</substitute> + +</file> + +<file name="Reactor_Token_T.cpp"> + +<!-- Search for ACE_Reactor_Impl and replace it with + ACE_Select_Reactor_Impl --> +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_Select_Reactor_Impl</replace> +</substitute> + +</file> + +<!-- Starting below is the specialization for TP_Reactor --> + +<!-- Transformations to Reactor.h --> +<file name="Reactor.h"> + +<!-- Replace all occurences of ACE_Reactor_Impl with TP_Reactor --> +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_TP_Reactor</replace> +</substitute> + +<!-- Remove all occurences of the word virtual --> +<remove>virtual</remove> + +<!-- Remove the Reactor_Timer interface include --> +<remove>: public ACE_Reactor_Timer_Interface</remove> +<remove>#include "ace/Reactor_Timer_Interface.h"</remove> + +</file> + +<file name="Event_Handler.h"> + +<!-- remove the ACE_Event_Handler forware declaration --> +<remove>class ACE_Reactor_Timer_Interface;</remove> + +<!-- substitute ACE_Reactor_Timer operations with ACE_Reactor --> +<substitute> + <search>ACE_Reactor_Timer_Interface</search> + <replace>ACE_Reactor</replace> +</substitute> +</file> + +<file name="Event_Handler.cpp"> + <substitute> + <search>ACE_Reactor_Timer_Interface</search> + <replace>ACE_Reactor</replace> + </substitute> +</file> + +<file name="Timer_Queue_T.cpp"> + +<!-- Remove the Reactor_Timer_Interface include --> +<remove>#include "ace/Reactor_Timer_Interface.h"</remove> + +</file> + +<!-- Transformations to Reactor.inl --> +<file name="Reactor.inl"> + +<add> + <hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data> +// Check if this is necessary +#include "ace/Select_Reactor.h" + </data> +</add> + +</file> + +<file name="Reactor.cpp"> + +<!-- Replace ACE_Reactor_Impl with ACE_TP_Reactor --> +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_TP_Reactor</replace> +</substitute> + +<!-- Comment the conditional includes in the file --> +<comment> + <start-hook>REACTOR_SPL_COMMENT_INCLUDE_START_HOOK</start-hook> + <end-hook>REACTOR_SPL_COMMENT_INCLUDE_END_HOOK</end-hook> +</comment> + +<!-- Comment out conditional includes files in the Reactor's + constructor +--> +<comment> + <start-hook>REACTOR_SPL_CONSTRUCTOR_COMMENT_HOOK_START</start-hook> + <end-hook>REACTOR_SPL_CONSTRUCTOR_COMMENT_HOOK_END</end-hook> +</comment> + +<!-- Add the TP_Reactor include file --> +<add> + <hook>REACTOR_SPL_COMMENT_INCLUDE_END_HOOK</hook> + <data>#include "ace/TP_Reactor.h"</data> +</add> + +<!-- Within the constructor now create the right Reactor --> +<add> + <hook>REACTOR_SPL_CONSTRUCTOR_COMMENT_HOOK_END</hook> + <data> + ACE_NEW (impl, + ACE_TP_Reactor); + </data> +</add> + +</file> + +<!-- Transformations to TP_Reactor.h --> +<file name="TP_Reactor.h"> + +<!-- Remove all occurances of virtual --> +<remove>virtual</remove> + +</file> + +<!-- Transformations to TP_Reactor.cpp --> +<file name="TP_Reactor.cpp"> + +<!-- Comment hook --> +<comment> + <start-hook>REACTOR_SPL_COMMENT_HOOK_START</start-hook> + <end-hook>REACTOR_SPL_COMMENT_HOOK_END</end-hook> +</comment> + +<!-- Add this function to the --> +<add> + <hook>REACTOR_SPL_COMMENT_HOOK_END</hook> + <data> +int +ACE_TP_Reactor::register_handler (int signum, + ACE_Event_Handler *new_sh, + ACE_Sig_Action *new_disp, + ACE_Event_Handler **old_sh, + ACE_Sig_Action *old_disp) +{ + return ACE_Select_Reactor::register_handler (signum, + new_sh, + new_disp, + old_sh, + old_disp); +} + </data> +</add> + +</file> + +<!-- Transformations to Asynch_Pseudo_Task.h --> +<file name="Asynch_Pseudo_Task.h"> + +<!-- Remove the Select_Reacto.h include --> +<remove>#include "ace/Select_Reactor.h"</remove> + +<substitute> + <search>ACE_Select_Reactor</search> + <replace>ACE_TP_Reactor</replace> +</substitute> + +<!-- Add the TP_Reactor which is the concrete reactor --> +<add> + <hook>REACTOR_SPL_INCLUDE_FORWARD_DECL_ADD_HOOK</hook> + <data>#include "ace/TP_Reactor.h"</data> +</add> + +</file> + +<file name="ace.mpc"> + +<!-- Do not build the WFMO Reactor --> +<substitute> + <search>WFMO_Reactor.cpp</search> + <replace>// WFMO_Reactor.cpp</replace> +</substitute> + +<!-- Do not build the Reactor Impl --> +<substitute> + <search>Reactor_Impl.cpp</search> + <replace>// Reactor_Impl.cpp</replace> +</substitute> +<substitute> + <search>Reactor_Impl.h</search> + <replace>// Reactor_Impl.h</replace> +</substitute> + +<!-- Do not build the Dev Poll Reactor --> +<substitute> + <search>Dev_Poll_Reactor.cpp</search> + <replace>// Dev_Poll_Reactor.cpp</replace> +</substitute> + + +<!-- Do not build the Msg_WFMO_Reactor --> +<substitute> + <search>Msg_WFMO_Reactor.cpp</search> + <replace>// Msg_WFMO_Reactor.cpp</replace> +</substitute> + + +<!-- Do not build the priority Reactor --> +<substitute> + <search>Priority_Reactor.cpp</search> + <replace>// Priority_Reactor.cpp</replace> +</substitute> + +<!-- Do not build the Reactor_Timer_Interface --> +<substitute> + <search>Reactor_Timer_Interface.h</search> + <replace>// Reactor_Timer_Interface.h</replace> +</substitute> +<substitute> + <search>Reactor_Timer_Interface.cpp</search> + <replace>// Reactor_Timer_Interface.cpp </replace> +</substitute> + +</file> + +</module> +<!-- end of Changes to ace --> + +<!-- Transformations to TAO module --> +<module name="TAO/tao"> + +<file name="default_resource.h"> + +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_TP_Reactor</replace> +</substitute> + +</file> + +<file name="default_resource.cpp"> + +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_TP_Reactor</replace> +</substitute> + +</file> + +</module> + +<module name="TAO/tao/Strategies"> + +<file name="advanced_resource.h"> + +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_TP_Reactor</replace> +</substitute> + +</file> + +<file name="advanced_resource.cpp"> + +<!-- Comment out all other reactor includes --> + +<remove>#include "ace/FlReactor.h"</remove> +<remove>#include "ace/TkReactor.h"</remove> +<remove>#include "ace/WFMO_Reactor.h"</remove> +<!-- <remove>#include "ace/Select_Reactor.h"</remove> --> +<remove>#include "ace/Msg_WFMO_Reactor.h"</remove> + +<!-- Substitute ACE_Reactor_Impl with ACE_TP_Reactor --> +<substitute> + <search>ACE_Reactor_Impl</search> + <replace>ACE_TP_Reactor</replace> +</substitute> + +<!-- Comment out creation code for all other reactors --> +<comment> + <start-hook>TAO_ADVANCED_RESOURCE_REACTOR_SPL_COMMENT_HOOK_START</start-hook> + <end-hook>TAO_ADVANCED_RESOURCE_REACTOR_SPL_COMMENT_HOOK_END</end-hook> +</comment> + +<!-- Use the end hook to insert code that will create right reactor --> +<add> + <hook>TAO_ADVANCED_RESOURCE_REACTOR_SPL_COMMENT_HOOK_END</hook> + <data> + ACE_NEW_RETURN (impl, + ACE_TP_Reactor (ACE::max_handles (), + 1, + (ACE_Sig_Handler*)0, + (ACE_Timer_Queue*)0, + this->reactor_mask_signals_, + ACE_Select_Reactor_Token::LIFO), + 0); + </data> +</add> + +</file> + +</module> + +</transform> diff --git a/ACE/bin/FOCUS/specializations/Wait_Strategy/Wait_On_Read.spl b/ACE/bin/FOCUS/specializations/Wait_Strategy/Wait_On_Read.spl new file mode 100644 index 00000000000..ab76b9c8eef --- /dev/null +++ b/ACE/bin/FOCUS/specializations/Wait_Strategy/Wait_On_Read.spl @@ -0,0 +1,105 @@ +<?xml version="1.0"?> + +<!-- Wait Strategy Specialization + * =============================== + * Details all the specialization transformations necessary + * to specialize the Wait_Strategy with the Wait_On_Read strategy + * + * @author Arvind S. Krishna <arvindk@dre.vanderbilt.edu> + * $Id$ +--> + +<transform> + +<module name="TAO/tao"> + +<file name="Wait_Strategy.cpp"> + +<!-- Copy specialized code from the Wait_On_Read strategy + to this file --> + +<copy-from-source> + + <!-- Name of the source file from which to copy. In this case, this is + the Wait_On_Read source file --> + <source>Wait_On_Read.cpp</source> + + <!-- Copy data between the following hooks defined in the aforementioned + file --> + <copy-hook-start>WAIT_STRATEGY_SPL_COPY_HOOK_START</copy-hook-start> + <copy-hook-end>WAIT_STRATEGY_SPL_COPY_HOOK_END</copy-hook-end> + + <!-- Destination hook in the Wait_Strategy.h file where the code + should be placed --> + <dest-hook>TAO_WAIT_STRATEGY_SPL_ADD_HOOK</dest-hook> + +</copy-from-source> + +<!-- Copy include files to the hook to get the necessary include files --> +<add> + <hook>WAIT_STRATEGY_SPL_COPY_HOOK_START</hook> + <data> +#include "Wait_On_Read.h" +#include "Transport.h" +#include "Resume_Handle.h" +#include "Synch_Reply_Dispatcher.h" +#include "Client_Strategy_Factory.h" +#include "ORB_Core.h" +#include "ace/Reactor.h" +#include "ace/Countdown_Time.h" + </data> +</add> + +<!-- Once this is done, replace all occurences of TAO_Wait_On_Read with + TAO_Wait_Strategy --> +<substitute> + <search>TAO_Wait_On_Read</search> + <replace>TAO_Wait_Strategy</replace> +</substitute> + +</file> + +<file name="tao.mpc"> + +<!-- Do not build the other Wait strategy classes --> +<substitute> + <search>Wait_On_Read.h</search> + <replace>// Wait_On_Read.cpp</replace> +</substitute> +<substitute> + <search>Wait_On_Read.cpp</search> + <replace>// Wait_On_Read.cpp</replace> +</substitute> + +<substitute> + <search>Wait_On_Reactor.h</search> + <replace>// Wait_On_Reactor.cpp</replace> +</substitute> +<substitute> + <search>Wait_On_Reactor.cpp</search> + <replace>// Wait_On_Reactor.cpp</replace> +</substitute> + +<substitute> + <search>Wait_On_Leader_Follower.h</search> + <replace>// Wait_On_Leader_Follower.cpp</replace> +</substitute> +<substitute> + <search>Wait_On_Leader_Follower.cpp</search> + <replace>// Wait_On_Leader_Follower.cpp</replace> +</substitute> + +<substitute> + <search>Wait_On_LF_No_Upcall.h</search> + <replace>// Wait_On_LF_No_Upcall.cpp</replace> +</substitute> +<substitute> + <search>Wait_On_LF_No_Upcall.cpp</search> + <replace>// Wait_On_LF_No_Upcall.cpp</replace> +</substitute> + +</file> + +</module> + +</transform> |