TAO_CosTrader  2.0.8
Public Member Functions | Protected Attributes | Private Member Functions
TAO_Constraint_Validator Class Reference

TAO_Constraint_Validator ensures that in an expression tree passed to it, the operands of each operation match the correct types. More...

#include <Constraint_Visitors.h>

Inheritance diagram for TAO_Constraint_Validator:
Inheritance graph
[legend]
Collaboration diagram for TAO_Constraint_Validator:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 TAO_Constraint_Validator (void)
 Constructor.
virtual ~TAO_Constraint_Validator (void)
 Destructor.
int validate (TAO_Constraint *root)
virtual int visit_constraint (TAO_Unary_Constraint *constraint)
virtual int visit_with (TAO_Unary_Constraint *unary_with)
virtual int visit_min (TAO_Unary_Constraint *unary_min)
virtual int visit_max (TAO_Unary_Constraint *unary_max)
virtual int visit_first (TAO_Noop_Constraint *noop_first)
virtual int visit_random (TAO_Noop_Constraint *noop_random)
virtual int visit_and (TAO_Binary_Constraint *boolean_and)
 The two operands must return a boolean value.
virtual int visit_or (TAO_Binary_Constraint *boolean_or)
virtual int visit_not (TAO_Unary_Constraint *unary_not)
 The operand must return a boolean value.
virtual int visit_exist (TAO_Unary_Constraint *unary_exist)
virtual int visit_unary_minus (TAO_Unary_Constraint *unary_minus)
 The operand must return a number to be negated.
virtual int visit_add (TAO_Binary_Constraint *boolean_add)
 Both operands must return numeric results.
virtual int visit_sub (TAO_Binary_Constraint *boolean_sub)
virtual int visit_mult (TAO_Binary_Constraint *boolean_mult)
virtual int visit_div (TAO_Binary_Constraint *boolean_div)
virtual int visit_twiddle (TAO_Binary_Constraint *binary_twiddle)
 Both operands must return strings.
virtual int visit_in (TAO_Binary_Constraint *binary_in)
virtual int visit_less_than (TAO_Binary_Constraint *boolean_lt)
 The left and right operands must both be of the same simple type.
virtual int visit_less_than_equal (TAO_Binary_Constraint *boolean_lte)
virtual int visit_greater_than (TAO_Binary_Constraint *boolean_gt)
virtual int visit_greater_than_equal (TAO_Binary_Constraint *boolean_gte)
virtual int visit_equal (TAO_Binary_Constraint *boolean_eq)
virtual int visit_not_equal (TAO_Binary_Constraint *boolean_neq)
virtual int visit_literal (TAO_Literal_Constraint *literal)
 The property must be defined in the service type description.
virtual int visit_property (TAO_Property_Constraint *literal)

Protected Attributes

TAO_Typecode_Table type_map_

Private Member Functions

CORBA::TypeCode * extract_type (TAO_Constraint *expr_type, TAO_Expression_Type &type)
int expr_returns_boolean (TAO_Expression_Type expr_type)
int expr_returns_number (TAO_Expression_Type expr_type)
int expr_returns_string (TAO_Expression_Type expr_type)
 TAO_Constraint_Validator (const TAO_Constraint_Validator &)
TAO_Constraint_Validatoroperator= (const TAO_Constraint_Validator &)

Detailed Description

TAO_Constraint_Validator ensures that in an expression tree passed to it, the operands of each operation match the correct types.

TAO_Constraint_Validator uses the visitor pattern to traverse all the nodes in an expression tree, checking that for each operator node the operands are of the proper data type it they're literals, or that they exist in the service type definition _and_ have the proper type, if they're property names. The algorithm for type checking is as follows: ensure that operand expression(s) return the correct types using expr_returns* methods. If they (or it) return the correct types, call accept on each operand until all return true or one returns false, at which point we can back out of the traversal and indicate failure.


Constructor & Destructor Documentation

TAO_Constraint_Validator::TAO_Constraint_Validator ( void  )

Constructor.

TAO_Constraint_Validator::~TAO_Constraint_Validator ( void  ) [virtual]

Destructor.

TAO_Constraint_Validator::TAO_Constraint_Validator ( const TAO_Constraint_Validator ) [private]

Member Function Documentation

int TAO_Constraint_Validator::expr_returns_boolean ( TAO_Expression_Type  expr_type) [private]

expr_returns_boolean returns 1 if <expr_type>, when evaluated, will return a boolean.

int TAO_Constraint_Validator::expr_returns_number ( TAO_Expression_Type  expr_type) [private]

expr_returns_boolean returns 1 if <expr_type>, when evaluated, will return a number.

int TAO_Constraint_Validator::expr_returns_string ( TAO_Expression_Type  expr_type) [private]

expr_returns_boolean returns 1 if <expr_type>, when evaluated, will return a string.

CORBA::TypeCode * TAO_Constraint_Validator::extract_type ( TAO_Constraint expr_type,
TAO_Expression_Type type 
) [private]
TAO_Constraint_Validator& TAO_Constraint_Validator::operator= ( const TAO_Constraint_Validator ) [private]
int TAO_Constraint_Validator::validate ( TAO_Constraint root)

Validate returns 1 if the expression tree whose root is <root> makes semantic sense, in that the operands for each operation comply with each other and the types accepted by the operator.

int TAO_Constraint_Validator::visit_add ( TAO_Binary_Constraint boolean_add) [virtual]

Both operands must return numeric results.

Implements TAO_Constraint_Visitor.

int TAO_Constraint_Validator::visit_and ( TAO_Binary_Constraint boolean_and) [virtual]

The two operands must return a boolean value.

Implements TAO_Constraint_Visitor.

int TAO_Constraint_Validator::visit_constraint ( TAO_Unary_Constraint constraint) [virtual]
int TAO_Constraint_Validator::visit_div ( TAO_Binary_Constraint boolean_div) [virtual]
int TAO_Constraint_Validator::visit_equal ( TAO_Binary_Constraint boolean_eq) [virtual]
int TAO_Constraint_Validator::visit_exist ( TAO_Unary_Constraint unary_exist) [virtual]

The operand must return a valid (i.e., present in the service type description) property name.

Implements TAO_Constraint_Visitor.

int TAO_Constraint_Validator::visit_first ( TAO_Noop_Constraint noop_first) [virtual]
int TAO_Constraint_Validator::visit_greater_than ( TAO_Binary_Constraint boolean_gt) [virtual]
int TAO_Constraint_Validator::visit_greater_than_equal ( TAO_Binary_Constraint boolean_gte) [virtual]
int TAO_Constraint_Validator::visit_in ( TAO_Binary_Constraint binary_in) [virtual]

The right operand must be a sequence of the same simple type as the left operand.

Implements TAO_Constraint_Visitor.

int TAO_Constraint_Validator::visit_less_than ( TAO_Binary_Constraint boolean_lt) [virtual]

The left and right operands must both be of the same simple type.

Implements TAO_Constraint_Visitor.

int TAO_Constraint_Validator::visit_less_than_equal ( TAO_Binary_Constraint boolean_lte) [virtual]
int TAO_Constraint_Validator::visit_literal ( TAO_Literal_Constraint literal) [virtual]

The property must be defined in the service type description.

Implements TAO_Constraint_Visitor.

int TAO_Constraint_Validator::visit_max ( TAO_Unary_Constraint unary_max) [virtual]
int TAO_Constraint_Validator::visit_min ( TAO_Unary_Constraint unary_min) [virtual]
int TAO_Constraint_Validator::visit_mult ( TAO_Binary_Constraint boolean_mult) [virtual]
int TAO_Constraint_Validator::visit_not ( TAO_Unary_Constraint unary_not) [virtual]

The operand must return a boolean value.

Implements TAO_Constraint_Visitor.

int TAO_Constraint_Validator::visit_not_equal ( TAO_Binary_Constraint boolean_neq) [virtual]
int TAO_Constraint_Validator::visit_or ( TAO_Binary_Constraint boolean_or) [virtual]
int TAO_Constraint_Validator::visit_property ( TAO_Property_Constraint literal) [virtual]
int TAO_Constraint_Validator::visit_random ( TAO_Noop_Constraint noop_random) [virtual]
int TAO_Constraint_Validator::visit_sub ( TAO_Binary_Constraint boolean_sub) [virtual]
int TAO_Constraint_Validator::visit_twiddle ( TAO_Binary_Constraint binary_twiddle) [virtual]

Both operands must return strings.

Implements TAO_Constraint_Visitor.

int TAO_Constraint_Validator::visit_unary_minus ( TAO_Unary_Constraint unary_minus) [virtual]

The operand must return a number to be negated.

Implements TAO_Constraint_Visitor.

int TAO_Constraint_Validator::visit_with ( TAO_Unary_Constraint unary_with) [virtual]

Member Data Documentation

A map gleaned from the ServiceTypeStruct, which correlates property names with their types.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines