summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/Trader/Constraint_Interpreter.h
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/Trader/Constraint_Interpreter.h')
-rw-r--r--TAO/orbsvcs/orbsvcs/Trader/Constraint_Interpreter.h221
1 files changed, 0 insertions, 221 deletions
diff --git a/TAO/orbsvcs/orbsvcs/Trader/Constraint_Interpreter.h b/TAO/orbsvcs/orbsvcs/Trader/Constraint_Interpreter.h
deleted file mode 100644
index 63a76e05575..00000000000
--- a/TAO/orbsvcs/orbsvcs/Trader/Constraint_Interpreter.h
+++ /dev/null
@@ -1,221 +0,0 @@
-/* -*- C++ -*- */
-// $Id$
-
-// ========================================================================
-//
-// = LIBRARY
-// orbsvcs
-//
-// = FILENAME
-// Constraint_Interpreter.h
-//
-// = AUTHOR
-// Seth Widoff <sbw1@cs.wustl.edu>
-//
-// ========================================================================
-
-#ifndef TAO_CONSTRAINT_INTERPRETER_H
-#define TAO_CONSTRAINT_INTERPRETER_H
-
-#include "Constraint_Nodes.h"
-#include "Constraint_Visitors.h"
-
-class TAO_Constraint_Evaluator;
-class TAO_Constraint_Validator;
-
-class TAO_Interpreter
-{
- // = TITLE
- // TAO_Interpreter is the superclass for all interpreters. Its
- // build tree method invokes the yacc parser to parse a constraint
- // or preference string.
-protected:
- // = Initialization and termination methods.
- TAO_Interpreter (void);
- // Constructor.
-
- ~TAO_Interpreter (void);
- // Destructor.
-
- int build_tree (const char* preferences);
- // Using the Yacc generated parser, construct an expression tree
- // representing <constraints> from the tokens returned by it.
-
- static int is_empty_string (const char* str);
-
- TAO_Constraint* root_;
- // The root of the expression tree, not equal to null if build_tree
- // successfully builds a tree from the constraints.
-};
-
-class TAO_Constraint_Interpreter : public TAO_Interpreter
-{
- //
- // = TITLE
- // TAO_Constraint_Interpreter will, given a constraint string whose
- // syntax and semantics comply with the trader specification for the
- // constraint language, determine if a CosTrading::Offer meets the
- // constraints.
- //
- // = DESCRIPTION
- // TAO_Constraint_Interpreter will first build an expression tree
- // representing the constraint expression using Lex and Yacc. Then,
- // using a TAO_Constraint_Validator, it will validate the semantic
- // correctness of the tree. When the evaluate method is invoked with
- // an Offer, the TAO_Constraint_Interpreter will construct an
- // EvaluationVisitor, which will evaluate the tree and decide
- // whether the offer meets the constraints.
-public:
- // = Initialization and termination methods.
- TAO_Constraint_Interpreter (const CosTradingRepos::ServiceTypeRepository::TypeStruct& ts,
- const char* constraints,
- CORBA::Environment& ACE_TRY_ENV)
- ACE_THROW_SPEC ((CosTrading::IllegalConstraint,
- CORBA::NO_MEMORY));
-
- TAO_Constraint_Interpreter (TAO_Constraint_Validator& validator,
- const char* constraints,
- CORBA::Environment& ACE_TRY_ENV)
- ACE_THROW_SPEC ((CosTrading::IllegalConstraint,
- CORBA::NO_MEMORY));
- // This constructor builds an expression tree representing the
- // constraint specified in <constraints>, and throws an Illegal
- // Constraint exception if the constraint given has syntax errors or
- // semantic errors, such as mismatched types.
-
- ~TAO_Constraint_Interpreter (void);
- // Destructor
-
- CORBA::Boolean evaluate (CosTrading::Offer* offer);
-
- CORBA::Boolean evaluate (TAO_Constraint_Evaluator& evaluator);
-
- // Determine whether an offer fits the constraints with which the
- // tree was constructed. This method is thread safe (hopefully).
-};
-
-class TAO_Preference_Interpreter : public TAO_Interpreter
-{
- // = TITLE
- // The TAO_Preference_Interpreter will, given a valid preference
- // string and offers, will order the offers based on the offers'
- // compliance with the preferences.
- //
- // = DESCRIPTION
- // Each time the order_offer method is invoked, the
- // TAO_Preference_Interpreter stores the offer reference in the
- // order dictated by its evaluation of the preference string. After
- // the TAO_Preference_Interpreter client has finished ordering all
- // the offers, it will extract the offers in order using the
- // remove_offer method.
-public:
- // = Initialization and termination methods.
- TAO_Preference_Interpreter (const CosTradingRepos::ServiceTypeRepository::TypeStruct& ts,
- const char* preference,
- CORBA::Environment& ACE_TRY_ENV)
- ACE_THROW_SPEC ((CosTrading::Lookup::IllegalPreference,
- CORBA::NO_MEMORY));
-
- TAO_Preference_Interpreter (TAO_Constraint_Validator& validator,
- const char* preference,
- CORBA::Environment& ACE_TRY_ENV)
- ACE_THROW_SPEC ((CosTrading::Lookup::IllegalPreference,
- CORBA::NO_MEMORY));
-
- // Parse the preference string, determining first if it's
- // valid. Throw an IllegalPreference exception if the preference
- // doesn't conform to the BNF grammar for preferences.
-
- ~TAO_Preference_Interpreter(void);
- // Destructor
-
- void order_offer (CosTrading::Offer* offer,
- CosTrading::OfferId offer_id = 0);
-
- void order_offer (TAO_Constraint_Evaluator& evaluator,
- CosTrading::Offer* offer,
- CosTrading::OfferId offer_id = 0);
- // Evaluate the offer, and order it internally based on the results
- // of the evaluation.
-
- int remove_offer (CosTrading::Offer*& offer,
- CosTrading::OfferId& offer_id);
-
- int remove_offer (CosTrading::Offer*& offer);
- // Remove the next offer. The offer returned will be the next in the
- // ordering determined by the preference string.
-
- int num_offers (void);
- // Return the number of offers remaining in the ordering.
-
- struct Preference_Info
- {
- CORBA::Boolean evaluated_;
- // True if the preference evaluation didn't return an error for this offer.
-
- TAO_Literal_Constraint value_;
- // The value of the preference evaluation.
-
- CosTrading::OfferId offer_id_;
- // The offer id of this offer.
-
- CosTrading::Offer* offer_;
- // A pointer to the offer.
- };
-
- typedef ACE_Unbounded_Queue<Preference_Info> Ordered_Offers;
-
-private:
-
- TAO_Preference_Interpreter (const TAO_Preference_Interpreter&);
- TAO_Preference_Interpreter& operator= (const TAO_Preference_Interpreter&);
- // Disallow copying.
-
- Ordered_Offers offers_;
- // The ordered list of offers.
-};
-
-// Functions we need for parsing.
-extern int yyparse (void);
-extern void yyrestart (FILE*);
-extern int yylex (void);
-
-// Have yylex read from the constraint string, not from stdin.
-#undef YY_INPUT
-#define YY_INPUT(b, r, ms) (r = TAO_Lex_String_Input::copy_into(b, ms))
-
-#undef yyerror
-#define yyerror(x)
-
-class TAO_Lex_String_Input
-{
- // = TITLE
- // Have Lex read from a string and not from stdin. Essentially,
- // the interpreter needs to call yylex() until EOF, and call
- // TAO_Lex_String_Input::reset() with the new string, prior to
- // calling yyparse.
-public:
- static void reset (char* input_string);
- // Reset the lex input.
-
- static int copy_into (char* buf, int max_size);
- // Method lex will call to read from the input string.
-
-private:
-
- static char* string_;
- static char* current_;
- static char* end_;
- // Pointers to keep track of the input string.
-};
-
-// The union used by lex and yacc to build the Abstract Syntax Tree.
-typedef union
-{
- TAO_Constraint* constraint_;
-} YYSTYPE;
-
-extern YYSTYPE yylval;
-extern YYSTYPE yyval;
-
-#endif /* TAO_CONSTRAINT_INTERPRETER_H */