summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/Notify/Notify_Constraint_Visitors.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/Notify/Notify_Constraint_Visitors.cpp')
-rw-r--r--TAO/orbsvcs/orbsvcs/Notify/Notify_Constraint_Visitors.cpp1564
1 files changed, 0 insertions, 1564 deletions
diff --git a/TAO/orbsvcs/orbsvcs/Notify/Notify_Constraint_Visitors.cpp b/TAO/orbsvcs/orbsvcs/Notify/Notify_Constraint_Visitors.cpp
deleted file mode 100644
index e7224c069a0..00000000000
--- a/TAO/orbsvcs/orbsvcs/Notify/Notify_Constraint_Visitors.cpp
+++ /dev/null
@@ -1,1564 +0,0 @@
-/* -*- C++ -*- */
-/* $Id$ */
-
-#include "Notify_Constraint_Visitors.h"
-#include "orbsvcs/ETCL/ETCL_Constraint.h"
-#include "orbsvcs/ETCL/ETCL_y.h"
-#include "tao/DynamicAny/DynArray_i.h"
-#include "tao/DynamicAny/DynSequence_i.h"
-#include "tao/DynamicAny/DynStruct_i.h"
-#include "tao/DynamicAny/DynUnion_i.h"
-#include "tao/DynamicAny/DynEnum_i.h"
-#include "tao/DynamicAny/DynAnyFactory.h"
-
-TAO_NS_Constraint_Visitor::TAO_NS_Constraint_Visitor (void)
- : implicit_id_ (NONE)
-{
- (void) this->implicit_ids_.bind (ACE_CString ("filterable_data",
- 0,
- 0),
- FILTERABLE_DATA);
- (void) this->implicit_ids_.bind (ACE_CString ("header",
- 0,
- 0),
- HEADER);
- (void) this->implicit_ids_.bind (ACE_CString ("remainder_of_body",
- 0,
- 0),
- REMAINDER_OF_BODY);
- (void) this->implicit_ids_.bind (ACE_CString ("fixed_header",
- 0,
- 0),
- FIXED_HEADER);
- (void) this->implicit_ids_.bind (ACE_CString ("variable_header",
- 0,
- 0),
- VARIABLE_HEADER);
- (void) this->implicit_ids_.bind (ACE_CString ("event_name",
- 0,
- 0),
- EVENT_NAME);
- (void) this->implicit_ids_.bind (ACE_CString ("event_type",
- 0,
- 0),
- EVENT_TYPE);
- (void) this->implicit_ids_.bind (ACE_CString ("domain_name",
- 0,
- 0),
- DOMAIN_NAME);
- (void) this->implicit_ids_.bind (ACE_CString ("type_name",
- 0,
- 0),
- TYPE_NAME);
-}
-
-int
-TAO_NS_Constraint_Visitor::bind_structured_event (
- const CosNotification::StructuredEvent &s_event
- )
-{
- // The two sequences contained in a structured event are
- // copied into hash tables so iteration is done only once.
-
- CORBA::ULong length = s_event.filterable_data.length ();
- CORBA::ULong index = 0;
-
- for (index = 0; index < length; ++index)
- {
- ACE_CString name_str (s_event.filterable_data[index].name, 0, 0);
-
- int status =
- this->filterable_data_.bind (
- name_str,
- ACE_const_cast (CORBA::Any *,
- &s_event.filterable_data[index].value)
- );
-
- if (status != 0)
- {
- return -1;
- }
- }
-
- length = s_event.header.variable_header.length ();
-
- for (index = 0; index < length; ++index)
- {
- ACE_CString name_str (s_event.header.variable_header[index].name, 0, 0);
-
- int status =
- this->variable_header_.bind (
- name_str,
- ACE_const_cast (CORBA::Any *,
- &s_event.header.variable_header[index].value)
- );
-
- if (status != 0)
- {
- return -1;
- }
- }
-
- this->domain_name_ =
- CORBA::string_dup (s_event.header.fixed_header.event_type.domain_name);
-
- this->type_name_ =
- CORBA::string_dup (s_event.header.fixed_header.event_type.type_name);
-
- this->event_name_ =
- CORBA::string_dup (s_event.header.fixed_header.event_name);
-
- this->remainder_of_body_ = s_event.remainder_of_body;
-
- return 0;
-}
-
-CORBA::Boolean
-TAO_NS_Constraint_Visitor::evaluate_constraint (
- TAO_ETCL_Constraint* root
- )
-{
- CORBA::Boolean result = 0;
- this->queue_.reset ();
-
- // Evaluate the constraint in root_;
- if (root != 0)
- {
- if ((root->accept (this) == 0) &&
- (! this->queue_.is_empty ()))
- {
- TAO_ETCL_Literal_Constraint top;
- this->queue_.dequeue_head (top);
- result = (CORBA::Boolean) top;
- }
- }
-
- // If a property couldn't be evaluated we must return 0.
- return result;
-}
-
-int
-TAO_NS_Constraint_Visitor::visit_literal (
- TAO_ETCL_Literal_Constraint *literal
- )
-{
- this->queue_.enqueue_head (*literal);
- return 0;
-}
-
-int
-TAO_NS_Constraint_Visitor::visit_identifier (TAO_ETCL_Identifier *ident)
-{
- int return_value = -1;
- const char *name = ident->value ();
- ACE_CString key (name, 0, 0);
-
- CORBA::Any *any = 0;
-
- if (this->filterable_data_.find (key, any) == 0)
- {
- if (any != 0)
- {
- this->queue_.enqueue_head (TAO_ETCL_Literal_Constraint (any));
- return_value = 0;
- }
- }
-
- return return_value;
-}
-
-int
-TAO_NS_Constraint_Visitor::visit_union_value (
- TAO_ETCL_Union_Value *union_value
- )
-{
- switch (union_value->sign ())
- {
- case 0:
- this->queue_.enqueue_head (*union_value->string ());
- break;
- case -1:
- this->queue_.enqueue_head (-(*union_value->integer ()));
- break;
- case 1:
- this->queue_.enqueue_head (*union_value->integer ());
- break;
- default:
- return -1;
- }
-
- return 0;
-}
-
-int
-TAO_NS_Constraint_Visitor::visit_union_pos (
- TAO_ETCL_Union_Pos *union_pos
- )
-{
- ACE_DECLARE_NEW_CORBA_ENV;
- ACE_TRY
- {
- if (union_pos->union_value ()->accept (this) == 0)
- {
- TAO_ETCL_Literal_Constraint disc_val;
- this->queue_.dequeue_head (disc_val);
-
- TAO_DynUnion_i dyn_union;
- dyn_union.init (this->current_value_.in ()
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- CORBA::TypeCode_var tc = this->current_value_->type ();
-
- switch (disc_val.expr_type ())
- {
- case TAO_ETCL_INTEGER:
- case TAO_ETCL_SIGNED:
- case TAO_ETCL_UNSIGNED:
- {
- CORBA::Any disc_any;
- CORBA::TypeCode_var disc_tc =
- tc->discriminator_type (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- CORBA::TCKind disc_kind =
- TAO_DynAnyFactory::unalias (disc_tc.in ()
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- switch (disc_kind)
- {
- case CORBA::tk_boolean:
- disc_any <<= CORBA::Any::from_boolean ((CORBA::Boolean) disc_val);
- break;
- case CORBA::tk_short:
- disc_any <<= (CORBA::Short) ((CORBA::Long) disc_val);
- break;
- case CORBA::tk_ushort:
- disc_any <<= (CORBA::UShort) ((CORBA::ULong) disc_val);
- break;
- case CORBA::tk_long:
- disc_any <<= (CORBA::Long) disc_val;
- break;
- case CORBA::tk_ulong:
- disc_any <<= (CORBA::ULong) disc_val;
- break;
- case CORBA::tk_enum:
- {
- TAO_OutputCDR cdr;
- cdr.write_ulong ((CORBA::ULong) disc_val);
- disc_any._tao_replace (disc_tc.in (),
- TAO_ENCAP_BYTE_ORDER,
- cdr.begin ());
- break;
- }
- // @@@ (JP) I don't think ETCL handles 64-bit
- // integers at this point, and I also think that
- // chars and/or wchars will just come out in the
- // constraint as (w)strings of length 1.
- case CORBA::tk_longlong:
- case CORBA::tk_ulonglong:
- case CORBA::tk_char:
- case CORBA::tk_wchar:
- default:
- return -1;
- }
-
- DynamicAny::DynAny_var dyn_any =
- TAO_DynAnyFactory::make_dyn_any (disc_any
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
- dyn_union.set_discriminator (dyn_any.in ()
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
- DynamicAny::DynAny_var u_member =
- dyn_union.member (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
- this->current_value_ =
- u_member->to_any (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- break;
- }
- case TAO_ETCL_STRING:
- {
- const char *name = (const char *) disc_val;
- CORBA::ULong count =
- tc->member_count (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- const char *member_name = 0;
- CORBA::ULong i = 0;
-
- for (i = 0; i < count; ++i)
- {
- member_name = tc->member_name (i
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (ACE_OS::strcmp (name, member_name) == 0)
- {
- break;
- }
- }
-
- // If there's no match, member_label will throw
- // CORBA::TypeCode::Bounds and the catch block will
- // return -1;
- this->current_value_ = tc->member_label (i
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- break;
- }
- // The TAO_ETCL_Union_Value that was put on the queue
- // shouldn't have any other type.
- default:
- return -1;
- }
-
- TAO_ETCL_Constraint *nested = union_pos->component ();
-
- // If there's no nested component, then we just want the
- // union member value on the queue. Otherwise, we want
- // the member value in current_value_ while we visit
- // the nested component.
- if (nested == 0)
- {
- TAO_ETCL_Literal_Constraint lit (this->current_value_);
- this->queue_.enqueue_head (lit);
- return 0;
- }
- else
- {
- return nested->accept (this);
- }
- }
- else
- {
- return -1;
- }
- }
- ACE_CATCHANY
- {
- return -1;
- }
- ACE_ENDTRY;
-
- ACE_NOTREACHED (return 0);
-}
-
-int
-TAO_NS_Constraint_Visitor::visit_component_pos (
- TAO_ETCL_Component_Pos *pos
- )
-{
- ACE_DECLARE_NEW_CORBA_ENV;
- ACE_TRY
- {
- // If we are here (from visit_component) the Any containing the
- // component as found in filterable_data_ will be in current_value_.
- CORBA::TypeCode_var tc = this->current_value_->type ();
- CORBA::TCKind kind = TAO_DynAnyFactory::unalias (tc.in ()
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- DynamicAny::DynAny_var member;
- CORBA::Boolean success = 0;
- CORBA::ULong slot = (CORBA::ULong) *pos->integer ();
-
- switch (kind)
- {
- case CORBA::tk_enum:
- {
- TAO_DynEnum_i dyn_enum;
- dyn_enum.init (this->current_value_.in ()
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- success = dyn_enum.seek (slot
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (success == 0)
- {
- return -1;
- }
-
- member =
- dyn_enum.current_component (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- break;
- }
- case CORBA::tk_struct:
- {
- TAO_DynStruct_i dyn_struct;
- dyn_struct.init (this->current_value_.in ()
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- success = dyn_struct.seek (slot
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (success == 0)
- {
- return -1;
- }
-
- member = dyn_struct.current_component (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- break;
- }
- // @@@ (JP) I think enums and structs are the only two cases handled
- // by Component_Pos, since arrays and sequences are handled by
- // Component_Array, and unions are handled by Union_Pos.
- default:
- return -1;
- }
-
- CORBA::Any_var value = member->to_any (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- TAO_ETCL_Constraint *comp = pos->component ();
-
- if (comp == 0)
- {
- TAO_ETCL_Literal_Constraint result (value);
- this->queue_.enqueue_head (result);
- return 0;
- }
- else
- {
- this->current_value_ = value._retn ();
- return comp->accept (this);
- }
- }
- ACE_CATCHANY
- {
- return -1;
- }
- ACE_ENDTRY;
-
- ACE_NOTREACHED (return 0);
-}
-
-int
-TAO_NS_Constraint_Visitor::visit_component_assoc (
- TAO_ETCL_Component_Assoc *assoc
- )
-{
- CORBA::Any *any = 0;
- ACE_CString name (assoc->identifier ()->value (),
- 0,
- 0);
-
- switch (this->implicit_id_)
- {
- case FILTERABLE_DATA:
- if (this->filterable_data_.find (name, any) != 0
- || any == 0)
- {
- return -1;
- }
-
- break;
- case VARIABLE_HEADER:
- if (this->variable_header_.find (name, any) != 0
- || any == 0)
- {
- return -1;
- }
-
- break;
- // Only the sequence members of CosNotification::StructuredEvent can be
- // treated as associative arrays.
- default:
- return -1;
- }
-
- TAO_ETCL_Constraint *comp = assoc->component ();
- CORBA::Any *any_ptr = 0;
-
- if (comp == 0)
- {
- TAO_ETCL_Literal_Constraint result (any);
- this->queue_.enqueue_head (result);
-
- // If we're at the end of the line, put the name into
- // current_value_ so visit_exist can use it.
- ACE_NEW_RETURN (any_ptr,
- CORBA::Any,
- -1);
- (*any_ptr) <<= name.c_str ();
- this->current_value_ = any_ptr;
-
- return 0;
- }
- else
- {
- ACE_NEW_RETURN (any_ptr,
- CORBA::Any (*any),
- -1);
- this->current_value_ = any_ptr;
- return comp->accept (this);
- }
-}
-
-int
-TAO_NS_Constraint_Visitor::visit_component_array (
- TAO_ETCL_Component_Array *array
- )
-{
- ACE_DECLARE_NEW_CORBA_ENV;
- ACE_TRY
- {
- // If we are here (from visit_component) the Any containing the
- // component as found in filterable_data_ will be in current_value_.
- CORBA::TypeCode_var tc = this->current_value_->type ();
- CORBA::TCKind kind = TAO_DynAnyFactory::unalias (tc.in ()
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- DynamicAny::DynAny_var member;
- CORBA::Boolean success = 0;
- CORBA::ULong slot = (CORBA::ULong) *array->integer ();
-
- switch (kind)
- {
- case CORBA::tk_array:
- {
- TAO_DynEnum_i dyn_array;
- dyn_array.init (this->current_value_.in ()
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- success = dyn_array.seek (slot
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (success == 0)
- {
- return -1;
- }
-
- member = dyn_array.current_component (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- break;
- }
- case CORBA::tk_sequence:
- {
- TAO_DynStruct_i dyn_sequence;
- dyn_sequence.init (this->current_value_.in ()
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- success = dyn_sequence.seek (slot
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- if (success == 0)
- {
- return -1;
- }
-
- member =
- dyn_sequence.current_component (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- break;
- }
- // Enums and sequences are the only two cases handled
- // by Component_Array.
- default:
- return -1;
- }
-
- CORBA::Any_var value = member->to_any (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- TAO_ETCL_Constraint *comp = array->component ();
-
- if (comp == 0)
- {
- TAO_ETCL_Literal_Constraint result (value);
- this->queue_.enqueue_head (result);
- return 0;
- }
- else
- {
- this->current_value_ = value._retn ();
- return comp->accept (this);
- }
- }
- ACE_CATCHANY
- {
- return -1;
- }
- ACE_ENDTRY;
-
- ACE_NOTREACHED (return 0);
-}
-
-int
-TAO_NS_Constraint_Visitor::visit_special (TAO_ETCL_Special *special)
-{
- ACE_DECLARE_NEW_CORBA_ENV;
- ACE_TRY
- {
- CORBA::TypeCode_var tc = this->current_value_->type ();
-
- switch (special->type ())
- {
- case TAO_ETCL_LENGTH:
- {
- // If the TCKind is not a sequence or an array, the
- // call to length() will raise an exception, and the
- // catch block will return -1;
- CORBA::ULong length = tc->length (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- TAO_ETCL_Literal_Constraint lit (length);
- this->queue_.enqueue_head (lit);
- return 0;
- }
- case TAO_ETCL_DISCRIMINANT:
- {
- // If the TCKind is not a union, the
- // call to init() will raise an exception, and the
- // catch block will return -1;
- TAO_DynUnion_i dyn_union;
- dyn_union.init (this->current_value_.in ()
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- DynamicAny::DynAny_var disc =
- dyn_union.get_discriminator (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- CORBA::Any_var disc_any = disc->to_any (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- TAO_ETCL_Literal_Constraint lit (disc_any);
- this->queue_.enqueue_head (lit);
- return 0;
- }
- case TAO_ETCL_TYPE_ID:
- {
- const char *name = tc->name (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- TAO_ETCL_Literal_Constraint lit (name);
- this->queue_.enqueue_head (lit);
- return 0;
- }
- case TAO_ETCL_REPOS_ID:
- {
- const char *id = tc->id (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- TAO_ETCL_Literal_Constraint lit (id);
- this->queue_.enqueue_head (lit);
- return 0;
- }
- default:
- return -1;
- }
- }
- ACE_CATCHANY
- {
- return -1;
- }
- ACE_ENDTRY;
-
- ACE_NOTREACHED (return 0);
-}
-
-int
-TAO_NS_Constraint_Visitor::visit_component (
- TAO_ETCL_Component *component
- )
-{
- TAO_ETCL_Constraint *nested = component->component ();
- TAO_ETCL_Identifier *identifier = component->identifier ();
- ACE_CString component_name (identifier->value (),
- 0,
- 0);
- CORBA::Any *any_ptr = 0;
-
- if (this->implicit_ids_.find (component_name, this->implicit_id_) != 0)
- {
- this->implicit_id_ = NONE;
- }
-
- // If this component has no sub-component, only an identifier,
- // then we just visit the identifier, which puts a literal on
- // the queue to be handled upon returning from this method call.
- // If there is a sub-component, we store the literal's value
- // in our member _var for possible examination at a more
- // nested level, and visit the sub-component. If the identifier
- // matches one of the nested field names in
- // CosNotification::StructuredEvent, we just visit the nested
- // component, if any.
- if (this->implicit_id_ == NONE)
- {
- if (nested == 0)
- {
- // If this is the end of the line, we put the component name
- // into current_value_ so visit_exist can use it.
- ACE_NEW_RETURN (any_ptr,
- CORBA::Any,
- -1);
- (*any_ptr) <<= component_name.c_str ();
- this->current_value_ = any_ptr;
- return identifier->accept (this);
- }
- else
- {
- int result = identifier->accept (this);
-
- if (result != 0)
- {
- return result;
- }
-
- TAO_ETCL_Literal_Constraint id;
- this->queue_.dequeue_head (id);
- ACE_NEW_RETURN (any_ptr,
- CORBA::Any (*(const CORBA::Any *) id),
- -1);
- this->current_value_ = any_ptr;
- }
- }
-
- if (nested != 0)
- {
- return nested->accept (this);
- }
- else
- {
- switch (this->implicit_id_)
- {
- case TYPE_NAME:
- {
- TAO_ETCL_Literal_Constraint tn (this->type_name_.in ());
- this->queue_.enqueue_head (tn);
- return 0;
- }
- case EVENT_NAME:
- {
- TAO_ETCL_Literal_Constraint en (this->event_name_.in ());
- this->queue_.enqueue_head (en);
- return 0;
- }
- case DOMAIN_NAME:
- {
- TAO_ETCL_Literal_Constraint dn (this->domain_name_.in ());
- this->queue_.enqueue_head (dn);
- return 0;
- }
- case REMAINDER_OF_BODY:
- {
- TAO_ETCL_Literal_Constraint rob (&this->remainder_of_body_);
- this->queue_.enqueue_head (rob);
- return 0;
- }
- // The above cases are the leaves of the
- // CosNotification::StructuredEvent "tree". Anything else and we
- // should have a nested component. otherwise, it's an error.
- default:
- return -1;
- }
- }
-}
-
-int
-TAO_NS_Constraint_Visitor::visit_dot (TAO_ETCL_Dot *dot)
-{
- // If we are here, we know we're headed for a more nested
- // level, so we just visit it, there's nothing else in this
- // constraint.
- return dot->component ()->accept (this);
-}
-
-int
-TAO_NS_Constraint_Visitor::visit_eval (TAO_ETCL_Eval *eval)
-{
- // Nothing to do but visit the contained component.
- return eval->component ()->accept (this);
-}
-
-int
-TAO_NS_Constraint_Visitor::visit_default (TAO_ETCL_Default *def)
-{
- TAO_ETCL_Constraint *comp = def->component ();
-
- if (comp == 0)
- {
- return -1;
- }
-
- if (comp->accept (this) != 0)
- {
- return -1;
- }
-
- ACE_DECLARE_NEW_CORBA_ENV;
- ACE_TRY
- {
- CORBA::TypeCode_var tc = this->current_value_->type ();
-
- // If the current member is not a union, this call will
- // throw BadKind and the catch block will return -1.
- CORBA::Long default_index = tc->default_index (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- // No default index.
- if (default_index == -1)
- {
- TAO_ETCL_Literal_Constraint result ((CORBA::Boolean) 0);
- this->queue_.enqueue_head (result);
- return 0;
- }
-
- // Okay, there's a default index, but is it active?
-
- TAO_ETCL_Literal_Constraint disc;
- this->queue_.dequeue_head (disc);
- TAO_ETCL_Literal_Constraint default_index_value (default_index);
- return (disc == default_index_value);
- }
- ACE_CATCHANY
- {
- return -1;
- }
- ACE_ENDTRY;
-
- ACE_NOTREACHED (return 0);
-}
-
-int
-TAO_NS_Constraint_Visitor::visit_exist (TAO_ETCL_Exist *exist)
-{
- TAO_ETCL_Constraint *component = exist->component ();
-
- if (component->accept (this) == 0)
- {
- const char *value = 0;
- CORBA::Boolean result = 0;
-
- // For the two cases below, we don't want the item at the top of
- // the queue, because it's the result of a hash table lookup. For
- // an existence test, we want the key value, which is stored in
- // the current_value_ member.
- if (this->implicit_id_ == FILTERABLE_DATA
- || this->implicit_id_ == VARIABLE_HEADER)
- {
- TAO_ETCL_Literal_Constraint current (
- &this->current_value_.inout ()
- );
- value = CORBA::string_dup ((const char *) current);
- }
-
- switch (this->implicit_id_)
- {
- case FILTERABLE_DATA:
- result =
- (this->filterable_data_.find (ACE_CString (value, 0, 0)) == 0);
- break;
- case VARIABLE_HEADER:
- result =
- (this->variable_header_.find (ACE_CString (value, 0, 0)) == 0);
- break;
- case TYPE_NAME:
- result = (this->type_name_.in () != 0);
- break;
- case EVENT_NAME:
- result = (this->event_name_.in () != 0);
- break;
- case DOMAIN_NAME:
- result = (this->domain_name_.in () != 0);
- break;
- // Anything other than the above cases is an error.
- default:
- return -1;
- }
-
- this->queue_.enqueue_head (TAO_ETCL_Literal_Constraint (result));
-
- return 0;
- }
-
- return -1;
-}
-
-int
-TAO_NS_Constraint_Visitor::visit_unary_expr (
- TAO_ETCL_Unary_Expr *unary_expr
- )
-{
- TAO_ETCL_Constraint *subexpr = unary_expr->subexpr ();
-
- if (subexpr->accept (this) == 0)
- {
- TAO_ETCL_Literal_Constraint subexpr_result;
- CORBA::Boolean result = 0;
- int op_type = unary_expr->type ();
-
- switch (op_type)
- {
- case TAO_ETCL_NOT:
- this->queue_.dequeue_head (subexpr_result);
- result = ! (CORBA::Boolean) subexpr_result;
- this->queue_.enqueue_head (TAO_ETCL_Literal_Constraint (result));
- return 0;
- case TAO_ETCL_MINUS:
- // The leading '-' was parsed separately, so we have to pull
- // the literal constraint off the queue, apply the class' own
- // unary minus operator, and put it back.
- this->queue_.dequeue_head (subexpr_result);
- this->queue_.enqueue_head (-subexpr_result);
- return 0;
- case TAO_ETCL_PLUS:
- // Leave the literal constraint on the queue. The leading
- // '+' was just syntactic sugar - no action is necessary.
- return 0;
- default:
- // The parser should never construct a TAO_ETCL_Unary_Constraint
- // behind any operators except the above three.
- return -1;
- }
- }
-
- return -1;
-}
-
-int
-TAO_NS_Constraint_Visitor::visit_binary_expr (
- TAO_ETCL_Binary_Expr *binary_expr
- )
-{
- int bin_op_type = binary_expr->type ();
-
- switch (bin_op_type)
- {
- case TAO_ETCL_OR:
- return this->visit_or (binary_expr);
- case TAO_ETCL_AND:
- return this->visit_and (binary_expr);
- case TAO_ETCL_LT:
- case TAO_ETCL_LE:
- case TAO_ETCL_GT:
- case TAO_ETCL_GE:
- case TAO_ETCL_EQ:
- case TAO_ETCL_NE:
- case TAO_ETCL_PLUS:
- case TAO_ETCL_MINUS:
- case TAO_ETCL_MULT:
- case TAO_ETCL_DIV:
- return this->visit_binary_op (binary_expr,
- bin_op_type);
- case TAO_ETCL_TWIDDLE:
- return this->visit_twiddle (binary_expr);
- case TAO_ETCL_IN:
- return this->visit_in (binary_expr);
- default:
- return -1;
- }
-}
-
-int
-TAO_NS_Constraint_Visitor::visit_or (
- TAO_ETCL_Binary_Expr *binary
- )
-{
- int return_value = -1;
- CORBA::Boolean result = 0;
- TAO_ETCL_Constraint *lhs = binary->lhs ();
-
- if (lhs->accept (this) == 0)
- {
- TAO_ETCL_Literal_Constraint lhs_result;
- this->queue_.dequeue_head (lhs_result);
- result = (CORBA::Boolean) lhs_result;
-
- // Short-circuiting OR.
- if (result == 0)
- {
- TAO_ETCL_Constraint *rhs = binary->rhs ();
-
- if (rhs->accept (this) == 0)
- {
- TAO_ETCL_Literal_Constraint rhs_result;
- this->queue_.dequeue_head (rhs_result);
- result = (CORBA::Boolean) rhs_result;
- return_value = 0;
- }
- }
- else
- {
- return_value = 0;
- }
- }
-
- if (return_value == 0)
- {
- this->queue_.enqueue_head (TAO_ETCL_Literal_Constraint (result));
- }
-
- return return_value;
-}
-
-int
-TAO_NS_Constraint_Visitor::visit_and (
- TAO_ETCL_Binary_Expr *binary
- )
-{
- int return_value = -1;
- CORBA::Boolean result = 0;
- TAO_ETCL_Constraint *lhs = binary->lhs ();
-
- if (lhs->accept (this) == 0)
- {
- TAO_ETCL_Literal_Constraint lhs_result;
- this->queue_.dequeue_head (lhs_result);
- result = (CORBA::Boolean) lhs_result;
-
- // Short-circuiting AND.
- if (result == 1)
- {
- TAO_ETCL_Constraint *rhs = binary->rhs ();
-
- if (rhs->accept (this) == 0)
- {
- TAO_ETCL_Literal_Constraint rhs_result;
- this->queue_.dequeue_head (rhs_result);
- result = (CORBA::Boolean) rhs_result;
- return_value = 0;
- }
- }
- else
- {
- return_value = 0;
- }
- }
-
- if (return_value == 0)
- {
- this->queue_.enqueue_head (TAO_ETCL_Literal_Constraint (result));
- }
-
- return return_value;
-}
-
-int
-TAO_NS_Constraint_Visitor::visit_binary_op (
- TAO_ETCL_Binary_Expr *binary,
- int op_type
- )
-{
- int return_value = -1;
- TAO_ETCL_Constraint *lhs = binary->lhs ();
- CORBA::Boolean result = 0;
-
- // Perform an operation on the results of evaluating the left and
- // right branches of this subtree.
- if (lhs->accept (this) == 0)
- {
- TAO_ETCL_Literal_Constraint left_operand;
- this->queue_.dequeue_head (left_operand);
- TAO_ETCL_Constraint *rhs = binary->rhs ();
-
- if (rhs->accept (this) == 0)
- {
- TAO_ETCL_Literal_Constraint right_operand;
- this->queue_.dequeue_head (right_operand);
- return_value = 0;
-
- switch (op_type)
- {
- case TAO_ETCL_LT:
- result = left_operand < right_operand;
- this->queue_.enqueue_head (TAO_ETCL_Literal_Constraint (result));
- break;
- case TAO_ETCL_LE:
- result = left_operand <= right_operand;
- this->queue_.enqueue_head (TAO_ETCL_Literal_Constraint (result));
- break;
- case TAO_ETCL_GT:
- result = left_operand > right_operand;
- this->queue_.enqueue_head (TAO_ETCL_Literal_Constraint (result));
- break;
- case TAO_ETCL_GE:
- result = left_operand >= right_operand;
- this->queue_.enqueue_head (TAO_ETCL_Literal_Constraint (result));
- break;
- case TAO_ETCL_EQ:
- result = left_operand == right_operand;
- this->queue_.enqueue_head (TAO_ETCL_Literal_Constraint (result));
- break;
- case TAO_ETCL_NE:
- result = left_operand != right_operand;
- this->queue_.enqueue_head (TAO_ETCL_Literal_Constraint (result));
- break;
- case TAO_ETCL_PLUS:
- this->queue_.enqueue_head (left_operand + right_operand);
- break;
- case TAO_ETCL_MINUS:
- this->queue_.enqueue_head (left_operand - right_operand);
- break;
- case TAO_ETCL_MULT:
- this->queue_.enqueue_head (left_operand * right_operand);
- break;
- case TAO_ETCL_DIV:
- this->queue_.enqueue_head (left_operand / right_operand);
- break;
- default:
- return_value = -1;
- }
- }
- }
-
- return return_value;
-}
-
-int
-TAO_NS_Constraint_Visitor::visit_twiddle (
- TAO_ETCL_Binary_Expr *binary
- )
-{
- int return_value = -1;
- TAO_ETCL_Constraint *lhs = binary->lhs ();
-
- // Determine if the left operand is a substring of the right.
- if (lhs->accept (this) == 0)
- {
- TAO_ETCL_Literal_Constraint left;
- this->queue_.dequeue_head (left);
- TAO_ETCL_Constraint *rhs = binary->rhs ();
-
- if (rhs->accept (this) == 0)
- {
- TAO_ETCL_Literal_Constraint right;
- this->queue_.dequeue_head (right);
- CORBA::Boolean result =
- (ACE_OS::strstr ((const char *) right,
- (const char *) left) != 0);
- this->queue_.enqueue_head (TAO_ETCL_Literal_Constraint (result));
- return_value = 0;
- }
- }
-
- return return_value;
-}
-
-int
-TAO_NS_Constraint_Visitor::visit_in (
- TAO_ETCL_Binary_Expr *binary
- )
-{
- int return_value = -1;
- TAO_ETCL_Constraint *lhs = binary->lhs ();
-
- // Determine if the left operand is contained in the right.
-
- if (lhs->accept (this) == 0)
- {
- TAO_ETCL_Literal_Constraint left;
- this->queue_.dequeue_head (left);
-
- TAO_ETCL_Constraint *rhs = binary->rhs ();
-
- if (rhs->accept (this) == 0)
- {
- TAO_ETCL_Literal_Constraint bag;
- this->queue_.dequeue_head (bag);
-
- if (bag.expr_type () == TAO_ETCL_COMPONENT)
- {
- const CORBA::Any *component = (const CORBA::Any *) bag;
- CORBA::TCKind kind = CORBA::tk_null;
-
- ACE_DECLARE_NEW_CORBA_ENV;
- ACE_TRY
- {
- CORBA::TypeCode_var tc = component->type ();
- kind = TAO_DynAnyFactory::unalias (tc.in ()
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
- ACE_CATCHANY
- {
- return return_value;
- }
- ACE_ENDTRY;
-
- CORBA::Boolean result = 0;
-
- switch (kind)
- {
- case CORBA::tk_sequence:
- result = this->sequence_does_contain (component,
- left);
- break;
- case CORBA::tk_array:
- result = this->array_does_contain (component,
- left);
- break;
- case CORBA::tk_struct:
- result = this->struct_does_contain (component,
- left);
- break;
- case CORBA::tk_union:
- result = this->union_does_contain (component,
- left);
- break;
- case CORBA::tk_any:
- result = this->any_does_contain (component,
- left);
- break;
- default:
- return return_value;
- }
-
- this->queue_.enqueue_head (TAO_ETCL_Literal_Constraint (result));
- return_value = 0;
- }
- }
- }
-
- return return_value;
-}
-
-int
-TAO_NS_Constraint_Visitor::visit_preference (
- TAO_ETCL_Preference *
- )
-{
- // According to OMG 00-06-20 section 2.4.1, the Notification Service
- // does not use the preference operators. The method must be here
- // because it is called by the ETCL node, which may be used by other
- // CORBA services that do use the preference operators.
- return -1;
-}
-
-CORBA::Boolean
-TAO_NS_Constraint_Visitor::sequence_does_contain (
- const CORBA::Any *any,
- TAO_ETCL_Literal_Constraint &item
- )
-{
- ACE_DECLARE_NEW_CORBA_ENV;
- ACE_TRY
- {
- CORBA::TypeCode_var type = any->type ();
- CORBA::TCKind kind = TAO_DynAnyFactory::unalias (type.in ()
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- // The literal and the array elements must be
- // of the same simple type.
- CORBA::Boolean match = this->simple_type_match (item.expr_type (),
- kind);
-
- if (match == 0)
- {
- return 0;
- }
-
- TAO_DynSequence_i dyn_seq;
- dyn_seq.init (*any
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- DynamicAny::AnySeq_var any_seq =
- dyn_seq.get_elements (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- CORBA::ULong length = any_seq->length ();
-
- for (CORBA::ULong i = 0; i < length; ++i)
- {
- TAO_ETCL_Literal_Constraint element (&any_seq[i]);
-
- if (item == element)
- {
- return 1;
- }
- }
- }
- ACE_CATCHANY
- {
- return 0;
- }
- ACE_ENDTRY;
-
- return 0;
-}
-
-CORBA::Boolean
-TAO_NS_Constraint_Visitor::array_does_contain (
- const CORBA::Any *any,
- TAO_ETCL_Literal_Constraint &item
- )
-{
- ACE_DECLARE_NEW_CORBA_ENV;
- ACE_TRY
- {
- CORBA::TypeCode_var type = any->type ();
- CORBA::TCKind kind = TAO_DynAnyFactory::unalias (type.in ()
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- // The literal and the array elements must be
- // of the same simple type.
- CORBA::Boolean match = this->simple_type_match (item.expr_type (),
- kind);
-
- if (match == 0)
- {
- return 0;
- }
-
- TAO_DynArray_i dyn_array;
- dyn_array.init (*any
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- DynamicAny::AnySeq_var any_seq =
- dyn_array.get_elements (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- CORBA::ULong length = any_seq->length ();
-
- for (CORBA::ULong i = 0; i < length; ++i)
- {
- TAO_ETCL_Literal_Constraint element (&any_seq[i]);
-
- if (item == element)
- {
- return 1;
- }
- }
- }
- ACE_CATCHANY
- {
- return 0;
- }
- ACE_ENDTRY;
-
- return 0;
-}
-
-CORBA::Boolean
-TAO_NS_Constraint_Visitor::struct_does_contain (
- const CORBA::Any *any,
- TAO_ETCL_Literal_Constraint &item
- )
-{
- ACE_DECLARE_NEW_CORBA_ENV;
- ACE_TRY
- {
- TAO_DynStruct_i dyn_struct;
- dyn_struct.init (*any
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- DynamicAny::NameValuePairSeq_var members =
- dyn_struct.get_members (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- CORBA::ULong length = members->length ();
- CORBA::TypeCode_var tc;
- CORBA::TCKind kind;
-
- for (CORBA::ULong i = 0; i < length; ++i)
- {
- tc = members[i].value.type ();
- kind = TAO_DynAnyFactory::unalias (tc.in ()
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- // The literal and the struct member must be
- // of the same simple type.
- CORBA::Boolean match = this->simple_type_match (item.expr_type (),
- kind);
-
- if (match == 0)
- {
- continue;
- }
-
- TAO_ETCL_Literal_Constraint element (&members[i].value);
-
- if (item == element)
- {
- return 1;
- }
- }
- }
- ACE_CATCHANY
- {
- return 0;
- }
- ACE_ENDTRY;
-
- return 0;
-}
-
-CORBA::Boolean
-TAO_NS_Constraint_Visitor::union_does_contain (
- const CORBA::Any *any,
- TAO_ETCL_Literal_Constraint &item
- )
-{
- ACE_DECLARE_NEW_CORBA_ENV;
- ACE_TRY
- {
- TAO_DynUnion_i dyn_union;
- dyn_union.init (*any
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- DynamicAny::DynAny_var cc =
- dyn_union.current_component (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- CORBA::Any_var member = cc->to_any (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- CORBA::TypeCode_var tc = member->type ();
- CORBA::TCKind kind = TAO_DynAnyFactory::unalias (tc.in ()
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- // The literal and the union member must be
- // of the same simple type.
- CORBA::Boolean match = this->simple_type_match (item.expr_type (),
- kind);
-
- if (match == 0)
- {
- return 0;
- }
-
- TAO_ETCL_Literal_Constraint element (&member.inout ());
-
- return (item == element);
- }
- ACE_CATCHANY
- {
- return 0;
- }
- ACE_ENDTRY;
-
- ACE_NOTREACHED (return 0);
-}
-
-CORBA::Boolean
-TAO_NS_Constraint_Visitor::any_does_contain (
- const CORBA::Any *any,
- TAO_ETCL_Literal_Constraint &item
- )
-{
- const CORBA::Any *result = 0;
-
- *any >>= result;
-
- TAO_ETCL_Literal_Constraint element (ACE_const_cast (CORBA::Any *,
- result));
-
- return (item == element);
-}
-
-CORBA::Boolean
-TAO_NS_Constraint_Visitor::simple_type_match (int expr_type,
- CORBA::TCKind tc_kind)
-{
- switch (expr_type)
- {
- case TAO_ETCL_STRING:
- if (tc_kind != CORBA::tk_string)
- {
- return 0;
- }
- case TAO_ETCL_DOUBLE:
- if (tc_kind != CORBA::tk_double
- && tc_kind != CORBA::tk_float)
- {
- return 0;
- }
- case TAO_ETCL_INTEGER:
- case TAO_ETCL_SIGNED:
- if (tc_kind != CORBA::tk_short
- && tc_kind != CORBA::tk_long
- && tc_kind != CORBA::tk_longlong)
- {
- return 0;
- }
- case TAO_ETCL_UNSIGNED:
- if (tc_kind != CORBA::tk_ushort
- && tc_kind != CORBA::tk_ulong
- && tc_kind != CORBA::tk_ulonglong)
- {
- return 0;
- }
- case TAO_ETCL_BOOLEAN:
- if (tc_kind != CORBA::tk_boolean)
- {
- return 0;
- }
- default:
- return 0;
- }
-}
-
-#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
-
-template class ACE_Hash_Map_Manager<ACE_CString, CORBA::Any*, TAO_SYNCH_MUTEX>;
-template class ACE_Hash_Map_Manager_Ex<ACE_CString, CORBA::Any *, ACE_Hash<ACE_CString>, ACE_Equal_To<ACE_CString>, TAO_SYNCH_MUTEX>;
-template class ACE_Hash_Map_Entry <ACE_CString, CORBA::Any*>;
-template class ACE_Hash_Map_Iterator<ACE_CString, CORBA::Any*, TAO_SYNCH_MUTEX>;
-template class ACE_Hash_Map_Iterator_Ex<ACE_CString, CORBA::Any *, ACE_Hash<ACE_CString>, ACE_Equal_To<ACE_CString>, TAO_SYNCH_MUTEX>;
-template class ACE_Hash_Map_Iterator_Base_Ex<ACE_CString, CORBA::Any *, ACE_Hash<ACE_CString>, ACE_Equal_To<ACE_CString>, TAO_SYNCH_MUTEX>;
-template class ACE_Hash_Map_Reverse_Iterator<ACE_CString, CORBA::Any*, TAO_SYNCH_MUTEX>;
-template class ACE_Hash_Map_Reverse_Iterator_Ex<ACE_CString, CORBA::Any *, ACE_Hash<ACE_CString>, ACE_Equal_To<ACE_CString>, TAO_SYNCH_MUTEX>;
-template class ACE_Node<TAO_ETCL_Literal_Constraint>;
-template class ACE_Unbounded_Queue<TAO_ETCL_Literal_Constraint>;
-template class ACE_Unbounded_Queue_Iterator<TAO_ETCL_Literal_Constraint>;
-
-
-template class ACE_Hash_Map_Manager<ACE_CString, TAO_NS_Constraint_Visitor::structured_event_field, TAO_SYNCH_MUTEX>;
-template class ACE_Hash_Map_Manager_Ex<ACE_CString, TAO_NS_Constraint_Visitor::structured_event_field, ACE_Hash<ACE_CString>, ACE_Equal_To<ACE_CString>, TAO_SYNCH_MUTEX>;
-template class ACE_Hash_Map_Entry <ACE_CString, TAO_NS_Constraint_Visitor::structured_event_field>;
-template class ACE_Hash_Map_Iterator<ACE_CString, TAO_NS_Constraint_Visitor::structured_event_field, TAO_SYNCH_MUTEX>;
-template class ACE_Hash_Map_Iterator_Ex<ACE_CString, TAO_NS_Constraint_Visitor::structured_event_field, ACE_Hash<ACE_CString>, ACE_Equal_To<ACE_CString>, TAO_SYNCH_MUTEX>;
-template class ACE_Hash_Map_Iterator_Base_Ex<ACE_CString, TAO_NS_Constraint_Visitor::structured_event_field, ACE_Hash<ACE_CString>, ACE_Equal_To<ACE_CString>, TAO_SYNCH_MUTEX>;
-template class ACE_Hash_Map_Reverse_Iterator<ACE_CString, TAO_NS_Constraint_Visitor::structured_event_field, TAO_SYNCH_MUTEX>;
-template class ACE_Hash_Map_Reverse_Iterator_Ex<ACE_CString, TAO_NS_Constraint_Visitor::structured_event_field, ACE_Hash<ACE_CString>, ACE_Equal_To<ACE_CString>, TAO_SYNCH_MUTEX>;
-#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
-
-#pragma instantiate ACE_Hash_Map_Manager<ACE_CString, CORBA::Any*, TAO_SYNCH_MUTEX>
-#pragma instantiate ACE_Hash_Map_Manager_Ex<ACE_CString, CORBA::Any *, ACE_Hash<ACE_CString>, ACE_Equal_To<ACE_CString>, TAO_SYNCH_MUTEX>
-#pragma instantiate ACE_Hash_Map_Entry <ACE_CString, CORBA::Any*>
-#pragma instantiate ACE_Hash_Map_Iterator<ACE_CString, CORBA::Any*, TAO_SYNCH_MUTEX>
-#pragma instantiate ACE_Hash_Map_Iterator_Ex<ACE_CString, CORBA::Any *, ACE_Hash<ACE_CString>, ACE_Equal_To<ACE_CString>, TAO_SYNCH_MUTEX>
-#pragma instantiate ACE_Hash_Map_Iterator_Base_Ex<ACE_CString, CORBA::Any *, ACE_Hash<ACE_CString>, ACE_Equal_To<ACE_CString>, TAO_SYNCH_MUTEX>
-#pragma instantiate ACE_Hash_Map_Reverse_Iterator<ACE_CString, CORBA::Any*, TAO_SYNCH_MUTEX>
-#pragma instantiate ACE_Hash_Map_Reverse_Iterator_Ex<ACE_CString, CORBA::Any *, ACE_Hash<ACE_CString>, ACE_Equal_To<ACE_CString>, TAO_SYNCH_MUTEX>
-#pragma instantiate ACE_Node<TAO_ETCL_Literal_Constraint>
-#pragma instantiate ACE_Unbounded_Queue<TAO_ETCL_Literal_Constraint>
-#pragma instantiate ACE_Unbounded_Queue_Iterator<TAO_ETCL_Literal_Constraint>
-
-#pragma instantiate ACE_Hash_Map_Manager<ACE_CString, TAO_NS_Constraint_Visitor::structured_event_field, TAO_SYNCH_MUTEX>
-#pragma instantiate ACE_Hash_Map_Manager_Ex<ACE_CString, TAO_NS_Constraint_Visitor::structured_event_field, ACE_Hash<ACE_CString>, ACE_Equal_To<ACE_CString>, TAO_SYNCH_MUTEX>
-#pragma instantiate ACE_Hash_Map_Entry <ACE_CString, TAO_NS_Constraint_Visitor::structured_event_field>
-#pragma instantiate ACE_Hash_Map_Iterator<ACE_CString, TAO_NS_Constraint_Visitor::structured_event_field, TAO_SYNCH_MUTEX>
-#pragma instantiate ACE_Hash_Map_Iterator_Ex<ACE_CString, TAO_NS_Constraint_Visitor::structured_event_field, ACE_Hash<ACE_CString>, ACE_Equal_To<ACE_CString>, TAO_SYNCH_MUTEX>
-#pragma instantiate ACE_Hash_Map_Iterator_Base_Ex<ACE_CString, TAO_NS_Constraint_Visitor::structured_event_field, ACE_Hash<ACE_CString>, ACE_Equal_To<ACE_CString>, TAO_SYNCH_MUTEX>
-#pragma instantiate ACE_Hash_Map_Reverse_Iterator<ACE_CString, TAO_NS_Constraint_Visitor::structured_event_field, TAO_SYNCH_MUTEX>
-#pragma instantiate ACE_Hash_Map_Reverse_Iterator_Ex<ACE_CString, TAO_NS_Constraint_Visitor::structured_event_field, ACE_Hash<ACE_CString>, ACE_Equal_To<ACE_CString>, TAO_SYNCH_MUTEX>
-
-#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */