mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 13:37:05 +00:00
426 lines
9.6 KiB
C++
426 lines
9.6 KiB
C++
// -*- C++ -*-
|
|
|
|
//=============================================================================
|
|
/**
|
|
* @file ETCL_Constraint.h
|
|
*
|
|
* $Id: ETCL_Constraint.h 81620 2008-05-06 12:39:57Z parsons $
|
|
*
|
|
* @author Carlos O'Ryan (coryan@cs.wustl.edu)
|
|
* @author Jeff Parsons (j.parsons@vanderbilt.edu)
|
|
*/
|
|
//=============================================================================
|
|
|
|
#ifndef ACE_ETCL_CONSTRAINT_H
|
|
#define ACE_ETCL_CONSTRAINT_H
|
|
|
|
#include /**/ "ace/pre.h"
|
|
|
|
#include "ace/SString.h"
|
|
|
|
#if !defined (ACE_LACKS_PRAGMA_ONCE)
|
|
# pragma once
|
|
#endif /* ACE_LACKS_PRAGMA_ONCE */
|
|
|
|
#include "ace/CDR_Base.h"
|
|
|
|
#include "ace/ETCL/ace_etcl_export.h"
|
|
|
|
ACE_BEGIN_VERSIONED_NAMESPACE_DECL
|
|
|
|
typedef unsigned long Literal_Type;
|
|
|
|
class ETCL_Constraint_Visitor;
|
|
|
|
class ACE_ETCL_Export ETCL_Constraint
|
|
{
|
|
public:
|
|
/// Constructor and destructor
|
|
ETCL_Constraint (void);
|
|
virtual ~ETCL_Constraint (void);
|
|
|
|
virtual int accept (ETCL_Constraint_Visitor *visitor);
|
|
|
|
protected:
|
|
enum
|
|
{
|
|
ACE_ETCL_STRING,
|
|
ACE_ETCL_DOUBLE,
|
|
ACE_ETCL_UNSIGNED,
|
|
ACE_ETCL_SIGNED,
|
|
ACE_ETCL_INTEGER,
|
|
ACE_ETCL_BOOLEAN,
|
|
ACE_ETCL_COMPONENT,
|
|
ACE_ETCL_UNKNOWN
|
|
};
|
|
};
|
|
|
|
// ****************************************************************
|
|
|
|
class ACE_ETCL_Export ETCL_Literal_Constraint
|
|
: public ETCL_Constraint
|
|
{
|
|
public:
|
|
ETCL_Literal_Constraint (void);
|
|
|
|
// = Constructors for each of the various types of literals.
|
|
|
|
explicit ETCL_Literal_Constraint (ACE_CDR::ULong uinteger);
|
|
explicit ETCL_Literal_Constraint (ACE_CDR::Long integer);
|
|
explicit ETCL_Literal_Constraint (ACE_CDR::Boolean boolean);
|
|
explicit ETCL_Literal_Constraint (ACE_CDR::Double doub);
|
|
explicit ETCL_Literal_Constraint (const char* str);
|
|
|
|
/// Copy constructor
|
|
ETCL_Literal_Constraint (const ETCL_Literal_Constraint& lit);
|
|
|
|
/// Destructor.
|
|
virtual ~ETCL_Literal_Constraint(void);
|
|
|
|
/// Visitor accept method.
|
|
virtual int accept (ETCL_Constraint_Visitor* visitor);
|
|
|
|
Literal_Type expr_type (void) const;
|
|
|
|
/// Assignment operator.
|
|
void operator= (const ETCL_Literal_Constraint& co);
|
|
|
|
// Conversion routines.
|
|
operator ACE_CDR::Boolean (void) const;
|
|
operator ACE_CDR::ULong (void) const;
|
|
operator ACE_CDR::Long (void) const;
|
|
operator ACE_CDR::Double (void) const;
|
|
operator const char* (void) const;
|
|
|
|
// Return the type represented by this MysteryOperand.
|
|
|
|
// = Boolean operators.
|
|
|
|
bool
|
|
operator< (const ETCL_Literal_Constraint& rhs);
|
|
|
|
bool
|
|
operator<= (const ETCL_Literal_Constraint& rhs);
|
|
|
|
bool
|
|
operator> (const ETCL_Literal_Constraint& rhs);
|
|
|
|
bool
|
|
operator>= (const ETCL_Literal_Constraint& rhs);
|
|
|
|
bool
|
|
operator== (const ETCL_Literal_Constraint& rhs);
|
|
|
|
bool
|
|
operator!= (const ETCL_Literal_Constraint& rhs);
|
|
|
|
// = Arithmetic operators.
|
|
|
|
ETCL_Literal_Constraint
|
|
operator+ (const ETCL_Literal_Constraint& rhs);
|
|
|
|
ETCL_Literal_Constraint
|
|
operator- (const ETCL_Literal_Constraint& rhs);
|
|
|
|
ETCL_Literal_Constraint
|
|
operator* (const ETCL_Literal_Constraint& rhs);
|
|
|
|
ETCL_Literal_Constraint
|
|
operator/ (const ETCL_Literal_Constraint& rhs);
|
|
|
|
// Unary minus.
|
|
ETCL_Literal_Constraint
|
|
operator- (void);
|
|
|
|
/// Ensure both operands are of the same simple numeric type.
|
|
virtual Literal_Type
|
|
widest_type (const ETCL_Literal_Constraint& rhs);
|
|
|
|
protected:
|
|
/// Private copy method.
|
|
void copy (const ETCL_Literal_Constraint& co);
|
|
|
|
/// Union of the possible literal types.
|
|
union
|
|
{
|
|
char* str_;
|
|
ACE_CDR::ULong uinteger_;
|
|
ACE_CDR::Long integer_;
|
|
ACE_CDR::Boolean bool_;
|
|
ACE_CDR::Double double_;
|
|
} op_;
|
|
|
|
/// The actual types of the ETCL_Literal_Constraint.
|
|
Literal_Type type_;
|
|
};
|
|
|
|
// ****************************************************************
|
|
|
|
class ACE_ETCL_Export ETCL_Identifier : public ETCL_Constraint
|
|
{
|
|
public:
|
|
ETCL_Identifier (const char *value);
|
|
|
|
/// Get the value
|
|
const char *value (void) const;
|
|
|
|
// = The Constraint methods.
|
|
int accept (ETCL_Constraint_Visitor *visitor);
|
|
|
|
private:
|
|
/// The value
|
|
ACE_CString string_;
|
|
};
|
|
|
|
// ****************************************************************
|
|
|
|
class ACE_ETCL_Export ETCL_Union_Value : public ETCL_Constraint
|
|
{
|
|
public:
|
|
ETCL_Union_Value (void);
|
|
ETCL_Union_Value (int sign,
|
|
ETCL_Constraint *integer);
|
|
ETCL_Union_Value (ETCL_Constraint *string);
|
|
virtual ~ETCL_Union_Value (void);
|
|
|
|
int sign (void) const;
|
|
ETCL_Literal_Constraint *integer (void) const;
|
|
ETCL_Literal_Constraint *string (void) const;
|
|
|
|
virtual int accept (ETCL_Constraint_Visitor *visitor);
|
|
|
|
private:
|
|
int sign_;
|
|
ETCL_Literal_Constraint *integer_;
|
|
ETCL_Literal_Constraint *string_;
|
|
};
|
|
|
|
class ACE_ETCL_Export ETCL_Union_Pos : public ETCL_Constraint
|
|
{
|
|
public:
|
|
ETCL_Union_Pos (void);
|
|
ETCL_Union_Pos (ETCL_Constraint *union_value,
|
|
ETCL_Constraint *component);
|
|
virtual ~ETCL_Union_Pos (void);
|
|
|
|
ETCL_Union_Value *union_value (void) const;
|
|
ETCL_Constraint *component (void) const;
|
|
|
|
virtual int accept (ETCL_Constraint_Visitor *visitor);
|
|
|
|
private:
|
|
ETCL_Union_Value *union_value_;
|
|
ETCL_Constraint *component_;
|
|
};
|
|
|
|
class ACE_ETCL_Export ETCL_Component_Pos : public ETCL_Constraint
|
|
{
|
|
public:
|
|
ETCL_Component_Pos (void);
|
|
ETCL_Component_Pos (ETCL_Constraint *integer,
|
|
ETCL_Constraint *component);
|
|
virtual ~ETCL_Component_Pos (void);
|
|
|
|
ETCL_Literal_Constraint *integer (void) const;
|
|
ETCL_Constraint *component (void) const;
|
|
|
|
virtual int accept (ETCL_Constraint_Visitor *visitor);
|
|
|
|
private:
|
|
ETCL_Literal_Constraint *integer_;
|
|
ETCL_Constraint *component_;
|
|
};
|
|
|
|
class ACE_ETCL_Export ETCL_Component_Assoc : public ETCL_Constraint
|
|
{
|
|
public:
|
|
ETCL_Component_Assoc (void);
|
|
ETCL_Component_Assoc (ETCL_Constraint *identifier,
|
|
ETCL_Constraint *component);
|
|
virtual ~ETCL_Component_Assoc (void);
|
|
|
|
ETCL_Identifier *identifier (void) const;
|
|
ETCL_Constraint *component (void) const;
|
|
|
|
virtual int accept (ETCL_Constraint_Visitor *visitor);
|
|
|
|
private:
|
|
ETCL_Identifier *identifier_;
|
|
ETCL_Constraint *component_;
|
|
};
|
|
|
|
class ACE_ETCL_Export ETCL_Component_Array : public ETCL_Constraint
|
|
{
|
|
public:
|
|
ETCL_Component_Array (void);
|
|
ETCL_Component_Array (ETCL_Constraint *integer,
|
|
ETCL_Constraint *component);
|
|
virtual ~ETCL_Component_Array (void);
|
|
|
|
ETCL_Literal_Constraint *integer (void) const;
|
|
ETCL_Constraint *component (void) const;
|
|
|
|
virtual int accept (ETCL_Constraint_Visitor *visitor);
|
|
|
|
private:
|
|
ETCL_Literal_Constraint *integer_;
|
|
ETCL_Constraint *component_;
|
|
};
|
|
|
|
class ACE_ETCL_Export ETCL_Special : public ETCL_Constraint
|
|
{
|
|
public:
|
|
ETCL_Special (void);
|
|
ETCL_Special (int type);
|
|
virtual ~ETCL_Special (void);
|
|
|
|
int type (void) const;
|
|
|
|
virtual int accept (ETCL_Constraint_Visitor *visitor);
|
|
|
|
private:
|
|
int type_;
|
|
};
|
|
|
|
class ACE_ETCL_Export ETCL_Component : public ETCL_Constraint
|
|
{
|
|
public:
|
|
ETCL_Component (void);
|
|
ETCL_Component (ETCL_Constraint *identifier,
|
|
ETCL_Constraint *component);
|
|
virtual ~ETCL_Component (void);
|
|
|
|
ETCL_Identifier *identifier (void) const;
|
|
ETCL_Constraint *component (void) const;
|
|
|
|
virtual int accept (ETCL_Constraint_Visitor *visitor);
|
|
|
|
private:
|
|
ETCL_Identifier *identifier_;
|
|
ETCL_Constraint *component_;
|
|
};
|
|
|
|
class ACE_ETCL_Export ETCL_Dot : public ETCL_Constraint
|
|
{
|
|
public:
|
|
ETCL_Dot (void);
|
|
ETCL_Dot (ETCL_Constraint *component);
|
|
virtual ~ETCL_Dot (void);
|
|
|
|
ETCL_Constraint *component (void) const;
|
|
|
|
virtual int accept (ETCL_Constraint_Visitor *visitor);
|
|
|
|
private:
|
|
ETCL_Constraint *component_;
|
|
};
|
|
|
|
class ACE_ETCL_Export ETCL_Eval : public ETCL_Constraint
|
|
{
|
|
public:
|
|
ETCL_Eval (void);
|
|
ETCL_Eval (ETCL_Constraint *component);
|
|
virtual ~ETCL_Eval (void);
|
|
|
|
ETCL_Constraint *component (void) const;
|
|
|
|
virtual int accept (ETCL_Constraint_Visitor *visitor);
|
|
|
|
private:
|
|
ETCL_Constraint *component_;
|
|
};
|
|
|
|
class ACE_ETCL_Export ETCL_Default : public ETCL_Constraint
|
|
{
|
|
public:
|
|
ETCL_Default (void);
|
|
ETCL_Default (ETCL_Constraint *component);
|
|
virtual ~ETCL_Default (void);
|
|
|
|
ETCL_Constraint *component (void) const;
|
|
|
|
virtual int accept (ETCL_Constraint_Visitor *visitor);
|
|
|
|
private:
|
|
ETCL_Constraint *component_;
|
|
};
|
|
|
|
class ACE_ETCL_Export ETCL_Exist : public ETCL_Constraint
|
|
{
|
|
public:
|
|
ETCL_Exist (void);
|
|
ETCL_Exist (ETCL_Constraint *component);
|
|
virtual ~ETCL_Exist (void);
|
|
|
|
ETCL_Constraint *component (void) const;
|
|
|
|
virtual int accept (ETCL_Constraint_Visitor *visitor);
|
|
|
|
private:
|
|
ETCL_Constraint *component_;
|
|
};
|
|
|
|
class ACE_ETCL_Export ETCL_Unary_Expr : public ETCL_Constraint
|
|
{
|
|
public:
|
|
ETCL_Unary_Expr (int type,
|
|
ETCL_Constraint *subexpr);
|
|
virtual ~ETCL_Unary_Expr (void);
|
|
|
|
int type (void) const;
|
|
ETCL_Constraint *subexpr (void) const;
|
|
|
|
int accept (ETCL_Constraint_Visitor *visitor);
|
|
|
|
private:
|
|
int type_;
|
|
ETCL_Constraint *subexpr_;
|
|
};
|
|
|
|
class ACE_ETCL_Export ETCL_Binary_Expr : public ETCL_Constraint
|
|
{
|
|
public:
|
|
ETCL_Binary_Expr (int type,
|
|
ETCL_Constraint *lhs,
|
|
ETCL_Constraint *rhs);
|
|
virtual ~ETCL_Binary_Expr (void);
|
|
|
|
int type (void) const;
|
|
ETCL_Constraint *rhs (void) const;
|
|
ETCL_Constraint *lhs (void) const;
|
|
|
|
int accept (ETCL_Constraint_Visitor *visitor);
|
|
|
|
private:
|
|
int type_;
|
|
ETCL_Constraint *lhs_;
|
|
ETCL_Constraint *rhs_;
|
|
};
|
|
|
|
class ACE_ETCL_Export ETCL_Preference : public ETCL_Constraint
|
|
{
|
|
public:
|
|
ETCL_Preference (void);
|
|
ETCL_Preference (int type,
|
|
ETCL_Constraint *subexpr = 0);
|
|
virtual ~ETCL_Preference (void);
|
|
|
|
int type (void) const;
|
|
ETCL_Constraint *subexpr (void) const;
|
|
|
|
virtual int accept (ETCL_Constraint_Visitor *visitor);
|
|
|
|
private:
|
|
int type_;
|
|
ETCL_Constraint *subexpr_;
|
|
};
|
|
|
|
ACE_END_VERSIONED_NAMESPACE_DECL
|
|
|
|
#if defined (__ACE_INLINE__)
|
|
#include "ace/ETCL/ETCL_Constraint.inl"
|
|
#endif /* __ACE_INLINE__ */
|
|
|
|
#include /**/ "ace/post.h"
|
|
|
|
#endif // ACE_ETCL_CONSTRAINT_H
|