Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef ACE_ETCL_CONSTRAINT_H
00015 #define ACE_ETCL_CONSTRAINT_H
00016
00017 #include "ace/pre.h"
00018
00019 #include "ace/SString.h"
00020
00021 #if !defined (ACE_LACKS_PRAGMA_ONCE)
00022 # pragma once
00023 #endif
00024
00025 #include "ace/CDR_Base.h"
00026
00027 #include "ace/ETCL/ace_etcl_export.h"
00028
00029 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00030
00031 typedef unsigned long Literal_Type;
00032
00033 class ETCL_Constraint_Visitor;
00034
00035 class ACE_ETCL_Export ETCL_Constraint
00036 {
00037 public:
00038
00039 ETCL_Constraint (void);
00040 virtual ~ETCL_Constraint (void);
00041
00042 virtual int accept (ETCL_Constraint_Visitor *visitor);
00043
00044 protected:
00045 enum
00046 {
00047 ACE_ETCL_STRING,
00048 ACE_ETCL_DOUBLE,
00049 ACE_ETCL_UNSIGNED,
00050 ACE_ETCL_SIGNED,
00051 ACE_ETCL_INTEGER,
00052 ACE_ETCL_BOOLEAN,
00053 ACE_ETCL_COMPONENT,
00054 ACE_ETCL_UNKNOWN
00055 };
00056 };
00057
00058
00059
00060 class ACE_ETCL_Export ETCL_Literal_Constraint
00061 : public ETCL_Constraint
00062 {
00063 public:
00064 ETCL_Literal_Constraint (void);
00065
00066
00067
00068 explicit ETCL_Literal_Constraint (ACE_CDR::ULong uinteger);
00069 explicit ETCL_Literal_Constraint (ACE_CDR::Long integer);
00070 explicit ETCL_Literal_Constraint (ACE_CDR::Boolean boolean);
00071 explicit ETCL_Literal_Constraint (ACE_CDR::Double doub);
00072 explicit ETCL_Literal_Constraint (const char* str);
00073
00074
00075 ETCL_Literal_Constraint (const ETCL_Literal_Constraint& lit);
00076
00077
00078 virtual ~ETCL_Literal_Constraint(void);
00079
00080
00081 virtual int accept (ETCL_Constraint_Visitor* visitor);
00082
00083 Literal_Type expr_type (void) const;
00084
00085
00086 void operator= (const ETCL_Literal_Constraint& co);
00087
00088
00089 operator ACE_CDR::Boolean (void) const;
00090 operator ACE_CDR::ULong (void) const;
00091 operator ACE_CDR::Long (void) const;
00092 operator ACE_CDR::Double (void) const;
00093 operator const char* (void) const;
00094
00095
00096
00097
00098
00099 bool
00100 operator< (const ETCL_Literal_Constraint& rhs);
00101
00102 bool
00103 operator<= (const ETCL_Literal_Constraint& rhs);
00104
00105 bool
00106 operator> (const ETCL_Literal_Constraint& rhs);
00107
00108 bool
00109 operator>= (const ETCL_Literal_Constraint& rhs);
00110
00111 bool
00112 operator== (const ETCL_Literal_Constraint& rhs);
00113
00114 bool
00115 operator!= (const ETCL_Literal_Constraint& rhs);
00116
00117
00118
00119 ETCL_Literal_Constraint
00120 operator+ (const ETCL_Literal_Constraint& rhs);
00121
00122 ETCL_Literal_Constraint
00123 operator- (const ETCL_Literal_Constraint& rhs);
00124
00125 ETCL_Literal_Constraint
00126 operator* (const ETCL_Literal_Constraint& rhs);
00127
00128 ETCL_Literal_Constraint
00129 operator/ (const ETCL_Literal_Constraint& rhs);
00130
00131
00132 ETCL_Literal_Constraint
00133 operator- (void);
00134
00135
00136 virtual Literal_Type
00137 widest_type (const ETCL_Literal_Constraint& rhs);
00138
00139 protected:
00140
00141 void copy (const ETCL_Literal_Constraint& co);
00142
00143
00144 union
00145 {
00146 char* str_;
00147 ACE_CDR::ULong uinteger_;
00148 ACE_CDR::Long integer_;
00149 ACE_CDR::Boolean bool_;
00150 ACE_CDR::Double double_;
00151 } op_;
00152
00153
00154 Literal_Type type_;
00155 };
00156
00157
00158
00159 class ACE_ETCL_Export ETCL_Identifier : public ETCL_Constraint
00160 {
00161 public:
00162 ETCL_Identifier (const char *value);
00163
00164
00165 const char *value (void) const;
00166
00167
00168 int accept (ETCL_Constraint_Visitor *visitor);
00169
00170 private:
00171
00172 ACE_CString string_;
00173 };
00174
00175
00176
00177 class ACE_ETCL_Export ETCL_Union_Value : public ETCL_Constraint
00178 {
00179 public:
00180 ETCL_Union_Value (void);
00181 ETCL_Union_Value (int sign,
00182 ETCL_Constraint *integer);
00183 ETCL_Union_Value (ETCL_Constraint *string);
00184 virtual ~ETCL_Union_Value (void);
00185
00186 int sign (void) const;
00187 ETCL_Literal_Constraint *integer (void) const;
00188 ETCL_Literal_Constraint *string (void) const;
00189
00190 virtual int accept (ETCL_Constraint_Visitor *visitor);
00191
00192 private:
00193 int sign_;
00194 ETCL_Literal_Constraint *integer_;
00195 ETCL_Literal_Constraint *string_;
00196 };
00197
00198 class ACE_ETCL_Export ETCL_Union_Pos : public ETCL_Constraint
00199 {
00200 public:
00201 ETCL_Union_Pos (void);
00202 ETCL_Union_Pos (ETCL_Constraint *union_value,
00203 ETCL_Constraint *component);
00204 virtual ~ETCL_Union_Pos (void);
00205
00206 ETCL_Union_Value *union_value (void) const;
00207 ETCL_Constraint *component (void) const;
00208
00209 virtual int accept (ETCL_Constraint_Visitor *visitor);
00210
00211 private:
00212 ETCL_Union_Value *union_value_;
00213 ETCL_Constraint *component_;
00214 };
00215
00216 class ACE_ETCL_Export ETCL_Component_Pos : public ETCL_Constraint
00217 {
00218 public:
00219 ETCL_Component_Pos (void);
00220 ETCL_Component_Pos (ETCL_Constraint *integer,
00221 ETCL_Constraint *component);
00222 virtual ~ETCL_Component_Pos (void);
00223
00224 ETCL_Literal_Constraint *integer (void) const;
00225 ETCL_Constraint *component (void) const;
00226
00227 virtual int accept (ETCL_Constraint_Visitor *visitor);
00228
00229 private:
00230 ETCL_Literal_Constraint *integer_;
00231 ETCL_Constraint *component_;
00232 };
00233
00234 class ACE_ETCL_Export ETCL_Component_Assoc : public ETCL_Constraint
00235 {
00236 public:
00237 ETCL_Component_Assoc (void);
00238 ETCL_Component_Assoc (ETCL_Constraint *identifier,
00239 ETCL_Constraint *component);
00240 virtual ~ETCL_Component_Assoc (void);
00241
00242 ETCL_Identifier *identifier (void) const;
00243 ETCL_Constraint *component (void) const;
00244
00245 virtual int accept (ETCL_Constraint_Visitor *visitor);
00246
00247 private:
00248 ETCL_Identifier *identifier_;
00249 ETCL_Constraint *component_;
00250 };
00251
00252 class ACE_ETCL_Export ETCL_Component_Array : public ETCL_Constraint
00253 {
00254 public:
00255 ETCL_Component_Array (void);
00256 ETCL_Component_Array (ETCL_Constraint *integer,
00257 ETCL_Constraint *component);
00258 virtual ~ETCL_Component_Array (void);
00259
00260 ETCL_Literal_Constraint *integer (void) const;
00261 ETCL_Constraint *component (void) const;
00262
00263 virtual int accept (ETCL_Constraint_Visitor *visitor);
00264
00265 private:
00266 ETCL_Literal_Constraint *integer_;
00267 ETCL_Constraint *component_;
00268 };
00269
00270 class ACE_ETCL_Export ETCL_Special : public ETCL_Constraint
00271 {
00272 public:
00273 ETCL_Special (void);
00274 ETCL_Special (int type);
00275 virtual ~ETCL_Special (void);
00276
00277 int type (void) const;
00278
00279 virtual int accept (ETCL_Constraint_Visitor *visitor);
00280
00281 private:
00282 int type_;
00283 };
00284
00285 class ACE_ETCL_Export ETCL_Component : public ETCL_Constraint
00286 {
00287 public:
00288 ETCL_Component (void);
00289 ETCL_Component (ETCL_Constraint *identifier,
00290 ETCL_Constraint *component);
00291 virtual ~ETCL_Component (void);
00292
00293 ETCL_Identifier *identifier (void) const;
00294 ETCL_Constraint *component (void) const;
00295
00296 virtual int accept (ETCL_Constraint_Visitor *visitor);
00297
00298 private:
00299 ETCL_Identifier *identifier_;
00300 ETCL_Constraint *component_;
00301 };
00302
00303 class ACE_ETCL_Export ETCL_Dot : public ETCL_Constraint
00304 {
00305 public:
00306 ETCL_Dot (void);
00307 ETCL_Dot (ETCL_Constraint *component);
00308 virtual ~ETCL_Dot (void);
00309
00310 ETCL_Constraint *component (void) const;
00311
00312 virtual int accept (ETCL_Constraint_Visitor *visitor);
00313
00314 private:
00315 ETCL_Constraint *component_;
00316 };
00317
00318 class ACE_ETCL_Export ETCL_Eval : public ETCL_Constraint
00319 {
00320 public:
00321 ETCL_Eval (void);
00322 ETCL_Eval (ETCL_Constraint *component);
00323 virtual ~ETCL_Eval (void);
00324
00325 ETCL_Constraint *component (void) const;
00326
00327 virtual int accept (ETCL_Constraint_Visitor *visitor);
00328
00329 private:
00330 ETCL_Constraint *component_;
00331 };
00332
00333 class ACE_ETCL_Export ETCL_Default : public ETCL_Constraint
00334 {
00335 public:
00336 ETCL_Default (void);
00337 ETCL_Default (ETCL_Constraint *component);
00338 virtual ~ETCL_Default (void);
00339
00340 ETCL_Constraint *component (void) const;
00341
00342 virtual int accept (ETCL_Constraint_Visitor *visitor);
00343
00344 private:
00345 ETCL_Constraint *component_;
00346 };
00347
00348 class ACE_ETCL_Export ETCL_Exist : public ETCL_Constraint
00349 {
00350 public:
00351 ETCL_Exist (void);
00352 ETCL_Exist (ETCL_Constraint *component);
00353 virtual ~ETCL_Exist (void);
00354
00355 ETCL_Constraint *component (void) const;
00356
00357 virtual int accept (ETCL_Constraint_Visitor *visitor);
00358
00359 private:
00360 ETCL_Constraint *component_;
00361 };
00362
00363 class ACE_ETCL_Export ETCL_Unary_Expr : public ETCL_Constraint
00364 {
00365 public:
00366 ETCL_Unary_Expr (int type,
00367 ETCL_Constraint *subexpr);
00368 virtual ~ETCL_Unary_Expr (void);
00369
00370 int type (void) const;
00371 ETCL_Constraint *subexpr (void) const;
00372
00373 int accept (ETCL_Constraint_Visitor *visitor);
00374
00375 private:
00376 int type_;
00377 ETCL_Constraint *subexpr_;
00378 };
00379
00380 class ACE_ETCL_Export ETCL_Binary_Expr : public ETCL_Constraint
00381 {
00382 public:
00383 ETCL_Binary_Expr (int type,
00384 ETCL_Constraint *lhs,
00385 ETCL_Constraint *rhs);
00386 virtual ~ETCL_Binary_Expr (void);
00387
00388 int type (void) const;
00389 ETCL_Constraint *rhs (void) const;
00390 ETCL_Constraint *lhs (void) const;
00391
00392 int accept (ETCL_Constraint_Visitor *visitor);
00393
00394 private:
00395 int type_;
00396 ETCL_Constraint *lhs_;
00397 ETCL_Constraint *rhs_;
00398 };
00399
00400 class ACE_ETCL_Export ETCL_Preference : public ETCL_Constraint
00401 {
00402 public:
00403 ETCL_Preference (void);
00404 ETCL_Preference (int type,
00405 ETCL_Constraint *subexpr = 0);
00406 virtual ~ETCL_Preference (void);
00407
00408 int type (void) const;
00409 ETCL_Constraint *subexpr (void) const;
00410
00411 virtual int accept (ETCL_Constraint_Visitor *visitor);
00412
00413 private:
00414 int type_;
00415 ETCL_Constraint *subexpr_;
00416 };
00417
00418 ACE_END_VERSIONED_NAMESPACE_DECL
00419
00420 #if defined (__ACE_INLINE__)
00421 #include "ace/ETCL/ETCL_Constraint.inl"
00422 #endif
00423
00424 #include "ace/post.h"
00425
00426 #endif // ACE_ETCL_CONSTRAINT_H