LRAUV  revA
ValueClause.h
Go to the documentation of this file.
1 
9 #ifndef VALUECLAUSE_H_
10 #define VALUECLAUSE_H_
11 
12 #include "data/DataReader.h"
13 #include "logger/Logger.h"
14 #include "utils/FlexArray.h"
15 
16 class MissionNode;
17 class MissionItem;
18 
27 {
28 
29 public:
30 
32  typedef enum { OP_NONE,
50  } Operation;
51 
52  static const Str OP_NAMES[ OPCOUNT ];
53 
54  typedef enum
55  {
59 
64  {
71 
73  : dataValue_( NULL ),
74  dataReader_( NULL ),
75  owner_( NULL ),
76  operationReader_( READER_NONE ),
77  subClause_( NULL ),
78  deleteDataValue_( true )
79  {}
80 
82  {
83  if( NULL != dataValue_ && deleteDataValue_ )
84  {
85  delete dataValue_;
86  }
87  if( NULL != subClause_ )
88  {
89  delete subClause_;
90  }
91  }
92  };
93 
98  {
101  };
102 
103  // Simple public Constructor -- normally Static Instance Constructor is used
104  ValueClause( DataValue* dataValue, Logger& logger );
105 
106  // Static Instance Constructor
107  static ValueClause* Instance( MissionNode* node, bool nodeIsParent, MissionItem* owner, Logger& logger, bool isStrValue = false );
108 
109  // Used to read a DataReader
110  static DataReader* ReadReader( MissionNode* node, MissionItem* owner,
111  DataValue* defaultValue, Logger& logger, bool deleteDataValue = true );
112 
113  // Used to read a static DataValue
114  static DataValue* ReadDataValue( MissionNode* unitNode, Logger& logger );
115 
116  // Used to read a Unit
117  static const Unit* ReadUnit( MissionNode* unitNode, Logger& logger, bool reportErrors = true );
118 
119  // Used to read a string DataValue
120  static DataValue* ReadStrValue( MissionNode* node, Logger& logger );
121 
122  // Used to read a string DataValue
123  static DataValue* ReadStrValueUri( MissionNode* node, Logger& logger );
124 
126  static Str StripPastColon( Str name );
127 
129  static Str StripPastLastDot( Str name );
130 
131  // tests the boolclause for truth
132  virtual bool test();
133 
134  // evaluates the clause
135  virtual bool eval();
136 
137  // evaluates the clause as a simple string
138  virtual bool evalStr();
139 
140  // Destructor
141  virtual ~ValueClause();
142 
143  // Convenience method
144  Str toString();
145 
146  // Accessor method
148  {
149  return dataValue_;
150  }
151 
152  // If input values have changed since last run of a component
153  bool wasTouchedSinceLastRun( const Component* component );
154 
155 private:
156  // Note that the copy constructor below is private and not given a body.
157  // Any attempt to call it will return a compiler error.
158  ValueClause( const ValueClause& old ); // disallow copy constructor
159 
160  // Convenience method
161  Str sideToString( ValueClauseSide& side );
162 
163  // Private Constructor
164  ValueClause( Logger& logger );
165 
166  // Used by instance to read in the Comparison part of the Clause
167  static Operation ReadComparison( MissionNode* node, Logger& logger );
168 
169  // Used by instance to read in an Entry (lhs or rhs) the Clause
170  static bool ReadSide( MissionNode* node, ValueClauseSide& side, MissionItem* owner, Logger& logger, bool isStrValue = false );
171 
172  // Used by instance to read in an ValueClauseOperation (comparison and rhs) the Clause
173  static ValueClauseOperation* ReadOperation( MissionNode* node, MissionItem* owner, Logger& logger );
174 
175  // Evaluates one side of the relationship at hand.
176  bool evalSide( const ValueClauseSide& side );
177 
179 
180  bool abs_;
181 
182  bool negate_;
183 
185 
187 
189 
190 };
191 
192 #endif /*VALUECLAUSE_H_*/
Client-side interface for injecting log data into the log queue.
Definition: Logger.h:30
Definition: ValueClause.h:40
static ValueClause * Instance(MissionNode *node, bool nodeIsParent, MissionItem *owner, Logger &logger, bool isStrValue=false)
Definition: ValueClause.cpp:64
Definition: ValueClause.h:38
static DataValue * ReadStrValueUri(MissionNode *node, Logger &logger)
Definition: ValueClause.cpp:234
static Str StripPastLastDot(Str name)
Converts something like Foo:bar.baz into baz.
Definition: ValueClause.cpp:257
Definition: ValueClause.h:33
Represents one side of a value clause equation.
Definition: ValueClause.h:63
Contains the DataReader class definition.
static Operation ReadComparison(MissionNode *node, Logger &logger)
Definition: ValueClause.cpp:319
Wraps a Behavior or Aggregate with mission-specific settings pertaining to that item.
Definition: MissionItem.h:31
Definition: ValueClause.h:44
Logger & logger_
Definition: ValueClause.h:178
ValueClause(DataValue *dataValue, Logger &logger)
Definition: ValueClause.cpp:51
Str sideToString(ValueClauseSide &side)
Definition: ValueClause.cpp:296
Str toString()
Definition: ValueClause.cpp:268
MissionItem * owner_
Definition: ValueClause.h:67
Definition: ValueClause.h:57
static DataValue * ReadDataValue(MissionNode *unitNode, Logger &logger)
Definition: ValueClause.cpp:147
A DataAccessor that reads values from the Slate Contains a default dataValue that must not be NULL...
Definition: DataReader.h:30
ValueClause * subClause_
Definition: ValueClause.h:69
static const Str OP_NAMES[OPCOUNT]
Definition: ValueClause.h:52
Operation
An attempt to define different comparison operators.
Definition: ValueClause.h:32
DataReader * dataReader_
Definition: ValueClause.h:66
ReaderOperation
Definition: ValueClause.h:54
static DataValue * ReadStrValue(MissionNode *node, Logger &logger)
Definition: ValueClause.cpp:208
A DataValue is an abstract base class for a data value and associated engineering units of the value...
Definition: DataValue.h:35
Operation comparison_
Definition: ValueClause.h:99
static bool ReadSide(MissionNode *node, ValueClauseSide &side, MissionItem *owner, Logger &logger, bool isStrValue=false)
Definition: ValueClause.cpp:341
Definition: ValueClause.h:36
A ValueClause is a set of boolean conditions that may be specified as conditions for executing (or st...
Definition: ValueClause.h:26
Definition: ValueClause.h:39
Contains the FlexArrayBase and FlexArray class declarations.
bool negate_
Definition: ValueClause.h:182
Definition: ValueClause.h:32
Definition: ValueClause.h:47
Definition: ValueClause.h:48
Wraps a TiXmlNode.
Definition: MissionNode.h:20
Replacement for standard template class string.
Definition: Str.h:12
static DataReader * ReadReader(MissionNode *node, MissionItem *owner, DataValue *defaultValue, Logger &logger, bool deleteDataValue=true)
Definition: ValueClause.cpp:122
Definition: ValueClause.h:42
Abstract Base class for software components.
Definition: Component.h:53
Definition: ValueClause.h:45
static const Unit * ReadUnit(MissionNode *unitNode, Logger &logger, bool reportErrors=true)
Definition: ValueClause.cpp:196
virtual bool test()
Definition: ValueClause.cpp:532
bool abs_
Definition: ValueClause.h:180
bool wasTouchedSinceLastRun(const Component *component)
Definition: ValueClause.cpp:759
ReaderOperation operationReader_
Definition: ValueClause.h:68
Represents a comparison and the right hand side of a value clause equation.
Definition: ValueClause.h:97
static ValueClauseOperation * ReadOperation(MissionNode *node, MissionItem *owner, Logger &logger)
Definition: ValueClause.cpp:464
Contains the Logger class definition.
DataValue * getDataValue()
Definition: ValueClause.h:147
ValueClauseSide rhs_
Definition: ValueClause.h:100
DataValue * dataValue_
Definition: ValueClause.h:184
Definition: ValueClause.h:35
FlexArray< ValueClauseOperation * > operations_
Definition: ValueClause.h:188
Definition: ValueClause.h:56
DataValue * dataValue_
Definition: ValueClause.h:65
Simple class providing a flexible size array of pointers.
Definition: DataReader.h:19
Definition: ValueClause.h:46
~ValueClauseSide()
Definition: ValueClause.h:81
virtual bool evalStr()
Definition: ValueClause.cpp:544
bool evalSide(const ValueClauseSide &side)
Definition: ValueClause.cpp:489
Definition: ValueClause.h:49
virtual ~ValueClause()
Definition: ValueClause.cpp:42
bool deleteDataValue_
Definition: ValueClause.h:70
Definition: ValueClause.h:37
static Str StripPastColon(Str name)
Converts something like Foo:bar.baz into bar.baz.
Definition: ValueClause.cpp:246
Code that represents an engineering unit.
Definition: Unit.h:24
ValueClauseSide()
Definition: ValueClause.h:72
Definition: ValueClause.h:41
virtual bool eval()
Definition: ValueClause.cpp:561
Definition: ValueClause.h:34
Definition: ValueClause.h:43
ValueClauseSide lhs_
Definition: ValueClause.h:186