// -*- C++ -*- //============================================================================= /** * @file DynCommon.h * * $Id$ * * @author Jeff Parsons */ //============================================================================= #ifndef TAO_DYNCOMMON_H #define TAO_DYNCOMMON_H #include /**/ "ace/pre.h" #include "tao/DynamicAny/DynamicAny.h" #if !defined (ACE_LACKS_PRAGMA_ONCE) # pragma once #endif /* ACE_LACKS_PRAGMA_ONCE */ TAO_BEGIN_VERSIONED_NAMESPACE_DECL /** * @class TAO_DynCommon * * Contains most of the functionality common to all the * Dynamic Any implementation classes. */ class TAO_DynamicAny_Export TAO_DynCommon : public virtual DynamicAny::DynAny { public: /// Constructor. TAO_DynCommon (void); /// Destructor. virtual ~TAO_DynCommon (void); // = Some functions common to all Dynamic Any types. virtual CORBA::TypeCode_ptr type ( void) ACE_THROW_SPEC (( CORBA::SystemException )); virtual void assign ( DynamicAny::DynAny_ptr dyn_any ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch )); virtual void insert_boolean ( CORBA::Boolean value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual void insert_octet ( CORBA::Octet value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual void insert_char ( CORBA::Char value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual void insert_short ( CORBA::Short value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual void insert_ushort ( CORBA::UShort value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual void insert_long ( CORBA::Long value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual void insert_ulong ( CORBA::ULong value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual void insert_float ( CORBA::Float value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual void insert_double ( CORBA::Double value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual void insert_string ( const char * value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual void insert_reference ( CORBA::Object_ptr value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual void insert_typecode ( CORBA::TypeCode_ptr value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual void insert_longlong ( CORBA::LongLong value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual void insert_ulonglong ( CORBA::ULongLong value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual void insert_longdouble ( CORBA::LongDouble value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual void insert_wchar ( CORBA::WChar value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual void insert_wstring ( const CORBA::WChar * value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual void insert_any ( const CORBA::Any & value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual void insert_dyn_any ( DynamicAny::DynAny_ptr value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual void insert_val ( CORBA::ValueBase * value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::Boolean get_boolean ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::Octet get_octet ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::Char get_char ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::Short get_short ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::UShort get_ushort ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::Long get_long ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::ULong get_ulong ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::Float get_float ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::Double get_double ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual char * get_string ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::Object_ptr get_reference ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::TypeCode_ptr get_typecode ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::LongLong get_longlong ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::ULongLong get_ulonglong ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::LongDouble get_longdouble ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::WChar get_wchar ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::WChar * get_wstring ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::Any * get_any ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual DynamicAny::DynAny_ptr get_dyn_any ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::ValueBase * get_val ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::Boolean seek ( CORBA::Long index ) ACE_THROW_SPEC (( CORBA::SystemException )); virtual void rewind ( void) ACE_THROW_SPEC (( CORBA::SystemException )); virtual CORBA::Boolean next ( void) ACE_THROW_SPEC (( CORBA::SystemException )); virtual DynamicAny::DynAny_ptr copy ( void) ACE_THROW_SPEC (( CORBA::SystemException )); virtual CORBA::ULong component_count ( void) ACE_THROW_SPEC (( CORBA::SystemException )); virtual void insert_abstract ( CORBA::AbstractBase_ptr value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::AbstractBase_ptr get_abstract ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual void insert_boolean_seq ( const CORBA::BooleanSeq & value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual void insert_octet_seq ( const CORBA::OctetSeq & value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual void insert_char_seq ( const CORBA::CharSeq & value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual void insert_short_seq ( const CORBA::ShortSeq & value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual void insert_ushort_seq ( const CORBA::UShortSeq & value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual void insert_long_seq ( const CORBA::LongSeq & value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual void insert_ulong_seq ( const CORBA::ULongSeq & value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual void insert_float_seq ( const CORBA::FloatSeq & value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual void insert_double_seq ( const CORBA::DoubleSeq & value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual void insert_longlong_seq ( const CORBA::LongLongSeq & value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual void insert_ulonglong_seq ( const CORBA::ULongLongSeq & value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual void insert_longdouble_seq ( const CORBA::LongDoubleSeq & value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual void insert_wchar_seq ( const CORBA::WCharSeq & value ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::BooleanSeq * get_boolean_seq ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::OctetSeq * get_octet_seq ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::CharSeq * get_char_seq ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::ShortSeq * get_short_seq ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::UShortSeq * get_ushort_seq ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::LongSeq * get_long_seq ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::ULongSeq * get_ulong_seq ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::FloatSeq * get_float_seq ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::DoubleSeq * get_double_seq ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::LongLongSeq * get_longlong_seq ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::ULongLongSeq * get_ulonglong_seq ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::LongDoubleSeq * get_longdouble_seq ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); virtual CORBA::WCharSeq * get_wchar_seq ( void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); /// This sets one of two flags in this base class. CORBA 2.4.2 /// requires that destroy() do nothing if it is called on /// the result of current_component(), the only non-deep-copying /// method in the Dynamic Any API. If the boolean arg below is 0, /// the call is from inside current_component(), and the flag /// ref_to_component_ is set. If the boolean arg is 1, the call /// is from inside destroy(), and the container_is_destroying_ /// flag is set, overriding the first flag in the component's /// destroy() method. void set_flag ( DynamicAny::DynAny_ptr component, CORBA::Boolean destroying ) ACE_THROW_SPEC (( CORBA::SystemException )); // Utility functions. DynamicAny::DynAny_ptr check_component (void) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch, DynamicAny::DynAny::InvalidValue )); void check_type (CORBA::TypeCode_ptr tc ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch )); static bool is_basic_type_seq (CORBA::TypeCode_ptr tc); // Accessors CORBA::Boolean has_components (void) const; CORBA::Boolean destroyed (void) const; CORBA::Any &the_any (void); // Mutators void container_is_destroying (CORBA::Boolean val); void ref_to_component (CORBA::Boolean val); protected: /// Were we created by current_component()? CORBA::Boolean ref_to_component_; /// Flag to let destroy() call by container override the flag above. CORBA::Boolean container_is_destroying_; /// Do we contain other Dynamic Anys? CORBA::Boolean has_components_; /// Has destroy() been called on us yet? CORBA::Boolean destroyed_; /// Slot of the current component (if any). CORBA::Long current_position_; /// Number of components, as defined by CORBA 2.4.2. CORBA::ULong component_count_; /// Holder for our type code. CORBA::TypeCode_var type_; /// Gets a value only for basic types, but used in insert_* /// and get_*, defined in this base class. CORBA::Any any_; private: // Utility functions used by insert_* and get_*. CORBA::TypeCode_ptr check_type_and_unalias (CORBA::TypeCode_ptr tc ) ACE_THROW_SPEC (( CORBA::SystemException, DynamicAny::DynAny::TypeMismatch )); }; TAO_END_VERSIONED_NAMESPACE_DECL #include /**/ "ace/post.h" #endif /* TAO_DYNCOMMON_H */