diff options
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/ETCL/ETCL_Constraint.h')
-rw-r--r-- | TAO/orbsvcs/orbsvcs/ETCL/ETCL_Constraint.h | 430 |
1 files changed, 430 insertions, 0 deletions
diff --git a/TAO/orbsvcs/orbsvcs/ETCL/ETCL_Constraint.h b/TAO/orbsvcs/orbsvcs/ETCL/ETCL_Constraint.h new file mode 100644 index 00000000000..688b2df872c --- /dev/null +++ b/TAO/orbsvcs/orbsvcs/ETCL/ETCL_Constraint.h @@ -0,0 +1,430 @@ +// -*- C++ -*- + +// $Id$ +// +// ============================================================================ +// +// = LIBRARY +// orbsvcs/ETCL +// +// = FILENAME +// ECTL_Constraint +// +// = AUTHOR +// Carlos O'Ryan (coryan@cs.wustl.edu) +// Jeff Parsons (parsons@cs.wustl.edu) +// +// ============================================================================ + +#ifndef TAO_ETCL_CONSTRAINT_H +#define TAO_ETCL_CONSTRAINT_H + +#include "orbsvcs/ETCL/etcl_export.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "ace/SString.h" + +#include "tao/Basic_Types.h" + +TAO_BEGIN_VERSIONED_NAMESPACE_DECL + +typedef unsigned short TAO_Literal_Type; +#define TAO_UNKNOWN 999 + +class TAO_ETCL_Constraint_Visitor; + +namespace CORBA +{ + class Any; + typedef Any *Any_ptr; +} + +class TAO_ETCL_Export TAO_ETCL_Constraint +{ +public: + TAO_ETCL_Constraint (void); + virtual ~TAO_ETCL_Constraint (void); + // Constructor and destructor + + virtual int accept (TAO_ETCL_Constraint_Visitor *visitor) = 0; +}; + +// **************************************************************** + +class TAO_ETCL_Export TAO_ETCL_Literal_Constraint + : public TAO_ETCL_Constraint +{ +public: + TAO_ETCL_Literal_Constraint (void); + + // = Constructors for each of the various types of literals. + + explicit TAO_ETCL_Literal_Constraint (CORBA::Any* any); + explicit TAO_ETCL_Literal_Constraint (CORBA::ULong uinteger); + explicit TAO_ETCL_Literal_Constraint (CORBA::Long integer); + explicit TAO_ETCL_Literal_Constraint (CORBA::Boolean boolean); + explicit TAO_ETCL_Literal_Constraint (CORBA::Double doub); + explicit TAO_ETCL_Literal_Constraint (const char* str); + + TAO_ETCL_Literal_Constraint (const TAO_ETCL_Literal_Constraint& lit); + // Copy constructor + + ~TAO_ETCL_Literal_Constraint(void); + // Destructor. + + int accept (TAO_ETCL_Constraint_Visitor* visitor); + // Visitor accept method. + + TAO_Literal_Type expr_type (void) const; + + void operator= (const TAO_ETCL_Literal_Constraint& co); + // Assignment operator. + + // Conversion routines. + operator CORBA::Boolean (void) const; + operator CORBA::ULong (void) const; + operator CORBA::Long (void) const; + operator CORBA::Double (void) const; + operator const char* (void) const; + operator const CORBA::Any* (void) const; + + // Return the type represented by this MysteryOperand. + + // = Boolean operators. + + bool + operator< (const TAO_ETCL_Literal_Constraint& rhs); + + bool + operator<= (const TAO_ETCL_Literal_Constraint& rhs); + + bool + operator> (const TAO_ETCL_Literal_Constraint& rhs); + + bool + operator>= (const TAO_ETCL_Literal_Constraint& rhs); + + bool + operator== (const TAO_ETCL_Literal_Constraint& rhs); + + bool + operator!= (const TAO_ETCL_Literal_Constraint& rhs); + + // = Arithmetic operators. + + TAO_ETCL_Literal_Constraint + operator+ (const TAO_ETCL_Literal_Constraint& rhs); + + TAO_ETCL_Literal_Constraint + operator- (const TAO_ETCL_Literal_Constraint& rhs); + + TAO_ETCL_Literal_Constraint + operator* (const TAO_ETCL_Literal_Constraint& rhs); + + TAO_ETCL_Literal_Constraint + operator/ (const TAO_ETCL_Literal_Constraint& rhs); + + // Unary minus. + TAO_ETCL_Literal_Constraint + operator- (void); + + TAO_Literal_Type + widest_type (const TAO_ETCL_Literal_Constraint& rhs); + // Ensure both operands are of the same simple numeric type. + + static TAO_Literal_Type + comparable_type (CORBA::TypeCode_ptr type); + // Determine the comparable Expression Type from the CORBA type + +private: + void copy (const TAO_ETCL_Literal_Constraint& co); + // Private copy method. + + union + { + char* str_; + CORBA::Any_ptr any_; + CORBA::ULong uinteger_; + CORBA::Long integer_; + CORBA::Boolean bool_; + CORBA::Double double_; + } op_; + // Union of the possible literal types. + + unsigned short type_; + // The actual types of the TAO_ETCL_Literal_Constraint. +}; + +// **************************************************************** + +class TAO_ETCL_Export TAO_ETCL_Identifier : public TAO_ETCL_Constraint +{ +public: + TAO_ETCL_Identifier (const char *value); + + const char *value (void) const; + // Get the value + + // = The Constraint methods. + int accept (TAO_ETCL_Constraint_Visitor *visitor); + +private: + ACE_CString string_; + // The value +}; + +// **************************************************************** + +class TAO_ETCL_Export TAO_ETCL_Union_Value : public TAO_ETCL_Constraint +{ +public: + TAO_ETCL_Union_Value (int sign, + TAO_ETCL_Constraint *integer); + TAO_ETCL_Union_Value (TAO_ETCL_Constraint *string); + virtual ~TAO_ETCL_Union_Value (void); + + int sign (void) const; + TAO_ETCL_Literal_Constraint *integer (void) const; + TAO_ETCL_Literal_Constraint *string (void) const; + + // = The Constraint methods. + int accept (TAO_ETCL_Constraint_Visitor *visitor); + +private: + int sign_; + TAO_ETCL_Literal_Constraint *integer_; + TAO_ETCL_Literal_Constraint *string_; +}; + +class TAO_ETCL_Export TAO_ETCL_Union_Pos : public TAO_ETCL_Constraint +{ +public: + TAO_ETCL_Union_Pos (TAO_ETCL_Constraint *union_value, + TAO_ETCL_Constraint *component); + virtual ~TAO_ETCL_Union_Pos (void); + + TAO_ETCL_Union_Value *union_value (void) const; + TAO_ETCL_Constraint *component (void) const; + + // = The Constraint methods. + int accept (TAO_ETCL_Constraint_Visitor *visitor); + +private: + TAO_ETCL_Union_Value *union_value_; + TAO_ETCL_Constraint *component_; +}; + +class TAO_ETCL_Export TAO_ETCL_Component_Pos : public TAO_ETCL_Constraint +{ +public: + TAO_ETCL_Component_Pos (TAO_ETCL_Constraint *integer, + TAO_ETCL_Constraint *component); + virtual ~TAO_ETCL_Component_Pos (void); + + TAO_ETCL_Literal_Constraint *integer (void) const; + TAO_ETCL_Constraint *component (void) const; + + // = The Constraint methods. + int accept (TAO_ETCL_Constraint_Visitor *visitor); + +private: + TAO_ETCL_Literal_Constraint *integer_; + TAO_ETCL_Constraint *component_; +}; + +class TAO_ETCL_Export TAO_ETCL_Component_Assoc : public TAO_ETCL_Constraint +{ +public: + TAO_ETCL_Component_Assoc (TAO_ETCL_Constraint *identifier, + TAO_ETCL_Constraint *component); + virtual ~TAO_ETCL_Component_Assoc (void); + + TAO_ETCL_Identifier *identifier (void) const; + TAO_ETCL_Constraint *component (void) const; + + // = The Constraint methods. + int accept (TAO_ETCL_Constraint_Visitor *visitor); + +private: + TAO_ETCL_Identifier *identifier_; + TAO_ETCL_Constraint *component_; +}; + +class TAO_ETCL_Export TAO_ETCL_Component_Array : public TAO_ETCL_Constraint +{ +public: + TAO_ETCL_Component_Array (TAO_ETCL_Constraint *integer, + TAO_ETCL_Constraint *component); + virtual ~TAO_ETCL_Component_Array (void); + + TAO_ETCL_Literal_Constraint *integer (void) const; + TAO_ETCL_Constraint *component (void) const; + + // = The Constraint methods. + int accept (TAO_ETCL_Constraint_Visitor *visitor); + +private: + TAO_ETCL_Literal_Constraint *integer_; + TAO_ETCL_Constraint *component_; +}; + +class TAO_ETCL_Export TAO_ETCL_Special : public TAO_ETCL_Constraint +{ +public: + TAO_ETCL_Special (int type); + virtual ~TAO_ETCL_Special (void); + + int type (void) const; + + // = The Constraint methods. + int accept (TAO_ETCL_Constraint_Visitor *visitor); + +private: + int type_; +}; + +class TAO_ETCL_Export TAO_ETCL_Component : public TAO_ETCL_Constraint +{ +public: + TAO_ETCL_Component (TAO_ETCL_Constraint *identifier, + TAO_ETCL_Constraint *component); + virtual ~TAO_ETCL_Component (void); + + TAO_ETCL_Identifier *identifier (void) const; + TAO_ETCL_Constraint *component (void) const; + + // = The Constraint methods. + int accept (TAO_ETCL_Constraint_Visitor *visitor); + +private: + TAO_ETCL_Identifier *identifier_; + TAO_ETCL_Constraint *component_; +}; + +class TAO_ETCL_Export TAO_ETCL_Dot : public TAO_ETCL_Constraint +{ +public: + TAO_ETCL_Dot (TAO_ETCL_Constraint *component); + virtual ~TAO_ETCL_Dot (void); + + TAO_ETCL_Constraint *component (void) const; + + // = The Constraint methods. + int accept (TAO_ETCL_Constraint_Visitor *visitor); + +private: + TAO_ETCL_Constraint *component_; +}; + +class TAO_ETCL_Export TAO_ETCL_Eval : public TAO_ETCL_Constraint +{ +public: + TAO_ETCL_Eval (TAO_ETCL_Constraint *component); + virtual ~TAO_ETCL_Eval (void); + + TAO_ETCL_Constraint *component (void) const; + + // = The Constraint methods. + int accept (TAO_ETCL_Constraint_Visitor *visitor); + +private: + TAO_ETCL_Constraint *component_; +}; + +class TAO_ETCL_Export TAO_ETCL_Default : public TAO_ETCL_Constraint +{ +public: + TAO_ETCL_Default (TAO_ETCL_Constraint *component); + virtual ~TAO_ETCL_Default (void); + + TAO_ETCL_Constraint *component (void) const; + + // = The Constraint methods. + int accept (TAO_ETCL_Constraint_Visitor *visitor); + +private: + TAO_ETCL_Constraint *component_; +}; + +class TAO_ETCL_Export TAO_ETCL_Exist : public TAO_ETCL_Constraint +{ +public: + TAO_ETCL_Exist (TAO_ETCL_Constraint *component); + virtual ~TAO_ETCL_Exist (void); + + TAO_ETCL_Constraint *component (void) const; + + // = The Constraint methods. + int accept (TAO_ETCL_Constraint_Visitor *visitor); + +private: + TAO_ETCL_Constraint *component_; +}; + +class TAO_ETCL_Export TAO_ETCL_Unary_Expr : public TAO_ETCL_Constraint +{ +public: + TAO_ETCL_Unary_Expr (int type, + TAO_ETCL_Constraint *subexpr); + virtual ~TAO_ETCL_Unary_Expr (void); + + int type (void) const; + TAO_ETCL_Constraint *subexpr (void) const; + + // = The Constraint methods. + int accept (TAO_ETCL_Constraint_Visitor *visitor); + +private: + int type_; + TAO_ETCL_Constraint *subexpr_; +}; + +class TAO_ETCL_Export TAO_ETCL_Binary_Expr : public TAO_ETCL_Constraint +{ +public: + TAO_ETCL_Binary_Expr (int type, + TAO_ETCL_Constraint *lhs, + TAO_ETCL_Constraint *rhs); + virtual ~TAO_ETCL_Binary_Expr (void); + + int type (void) const; + TAO_ETCL_Constraint *rhs (void) const; + TAO_ETCL_Constraint *lhs (void) const; + + // = The Constraint methods. + int accept (TAO_ETCL_Constraint_Visitor *visitor); + +private: + int type_; + TAO_ETCL_Constraint *lhs_; + TAO_ETCL_Constraint *rhs_; +}; + +class TAO_ETCL_Export TAO_ETCL_Preference : public TAO_ETCL_Constraint +{ +public: + TAO_ETCL_Preference (int type, + TAO_ETCL_Constraint *subexpr = 0); + virtual ~TAO_ETCL_Preference (void); + + int type (void) const; + TAO_ETCL_Constraint *subexpr (void) const; + + // = The Constraint methods. + int accept (TAO_ETCL_Constraint_Visitor *visitor); + +private: + int type_; + TAO_ETCL_Constraint *subexpr_; +}; + +TAO_END_VERSIONED_NAMESPACE_DECL + +#if defined (__ACE_INLINE__) +#include "orbsvcs/ETCL/ETCL_Constraint.inl" +#endif /* __ACE_INLINE__ */ + +#endif /* TAO_ETCL_CONSTRAINT_H */ |