summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/Trader/Constraint_Interpreter.cpp
diff options
context:
space:
mode:
authorsbw1 <sbw1@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1998-02-27 00:51:26 +0000
committersbw1 <sbw1@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1998-02-27 00:51:26 +0000
commit34ecb5de6da4b5bd199eb3ee94119227652a8bd4 (patch)
tree67b30d9c76a8b392cf360f78e4249903a2ca515e /TAO/orbsvcs/orbsvcs/Trader/Constraint_Interpreter.cpp
parentf49e62b3ea80aa91f5202342992eabb6dcd6e230 (diff)
downloadATCD-34ecb5de6da4b5bd199eb3ee94119227652a8bd4.tar.gz
Well, people, here it is: the trading service, our specification
compliant stand alone trader. Enjoy.
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/Trader/Constraint_Interpreter.cpp')
-rw-r--r--TAO/orbsvcs/orbsvcs/Trader/Constraint_Interpreter.cpp77
1 files changed, 77 insertions, 0 deletions
diff --git a/TAO/orbsvcs/orbsvcs/Trader/Constraint_Interpreter.cpp b/TAO/orbsvcs/orbsvcs/Trader/Constraint_Interpreter.cpp
new file mode 100644
index 00000000000..4077030341f
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/Trader/Constraint_Interpreter.cpp
@@ -0,0 +1,77 @@
+// Constraint_Interpreter.cpp
+
+// ========================================================================
+// $Id$
+//
+// = LIBRARY
+// orbsvcs
+//
+// = FILENAME
+// Constraint_Interpreter.cpp
+//
+// = AUTHOR
+// Seth Widoff <sbw1@cs.wustl.edu>
+//
+// ========================================================================
+
+
+#include "Constraint_Interpreter.h"
+#include <ctype.h>
+#include <stdio.h>
+
+TAO_Constraint_Interpreter::
+TAO_Constraint_Interpreter(CosTradingRepos::ServiceTypeRepository::TypeStruct* ts,
+ const char* constraints,
+ CORBA::Environment& _env)
+ TAO_THROW_SPEC (CosTrading::IllegalConstraint)
+ : TAO_Interpreter ()
+{
+ TAO_Constraint_Validator type_checker(ts);
+
+ if (TAO_Interpreter::is_empty_string (constraints))
+ this->root_ = new TAO_Literal_Constraint ((CORBA::Boolean) 1);
+ else
+ {
+ if (this->build_tree (constraints) != 0)
+ TAO_THROW (CosTrading::IllegalConstraint (constraints));
+
+ if (type_checker.validate (this->root_) == -1)
+ TAO_THROW (CosTrading::IllegalConstraint (constraints));
+ }
+}
+
+TAO_Constraint_Interpreter::
+TAO_Constraint_Interpreter(TAO_Constraint_Validator& validator,
+ const char* constraints,
+ CORBA::Environment& _env)
+ TAO_THROW_SPEC (CosTrading::IllegalConstraint)
+{
+ if (TAO_Interpreter::is_empty_string (constraints))
+ this->root_ = new TAO_Literal_Constraint ((CORBA::Boolean) 1);
+ else
+ {
+ if (this->build_tree (constraints) != 0)
+ TAO_THROW (CosTrading::IllegalConstraint (constraints));
+
+ if (validator.validate (this->root_) == -1)
+ TAO_THROW (CosTrading::IllegalConstraint (constraints));
+ }
+}
+
+TAO_Constraint_Interpreter::~TAO_Constraint_Interpreter (void)
+{
+}
+
+CORBA::Boolean
+TAO_Constraint_Interpreter::evaluate (CosTrading::Offer* offer)
+{
+ TAO_Constraint_Evaluator evaluator (offer);
+ return evaluator.evaluate_constraint (this->root_);
+}
+
+CORBA::Boolean
+TAO_Constraint_Interpreter::evaluate(TAO_Constraint_Evaluator& evaluator)
+{
+ return evaluator.evaluate_constraint (this->root_);
+}
+