blob: 4a4866e222fca9c2e9e8794164d41752523b193e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
/* -*- C++ -*- */
//=============================================================================
/**
* @file Log_Constraint_Visitors.h
*
* $Id$
*
*
*
*
* @author Pradeep Gore <pradeep@cs.wustl.edu>
* @author Jeff Parsons <parsons@cs.wustl.edu>
* @author D A Hanvey <d.hanvey@qub.ac.uk>
*/
//=============================================================================
#ifndef TAO_LOG_CONSTRAINT_VISITORS_H
#define TAO_LOG_CONSTRAINT_VISITORS_H
#include /**/ "ace/pre.h"
#include "ace/Hash_Map_Manager.h"
#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */
#include "orbsvcs/orbsvcs/ETCL/ETCL_Constraint_Visitor.h"
#include "orbsvcs/orbsvcs/DsLogAdminC.h"
#include "tao/Typecode.h"
#include "log_export.h"
class TAO_ETCL_Constraint;
class TAO_ETCL_Literal_Constraint;
class TAO_Log_Property_Constraint;
/**
* @class TAO_Log_Constraint_Visitor
*
* @brief "ETCL" Visitor for the Log queries.
*/
class TAO_Log_Export TAO_Log_Constraint_Visitor :
public TAO_ETCL_Constraint_Visitor
{
public:
/// Constructor.
TAO_Log_Constraint_Visitor (DsLogAdmin::LogRecord &rec);
/**
* Returns 1 if the offer satisfies the constraint
* represented by the the expression tree rooted at <root>, 0 if it
* doesn't. If an error occurs during process, the traversal
* automatically fails.
*/
CORBA::Boolean evaluate_constraint (TAO_ETCL_Constraint *root);
// = The overridden methods.
int visit_literal (TAO_ETCL_Literal_Constraint *);
int visit_identifier (TAO_ETCL_Identifier *);
int visit_union_value (TAO_ETCL_Union_Value *);
int visit_union_pos (TAO_ETCL_Union_Pos *);
int visit_component_pos (TAO_ETCL_Component_Pos *);
int visit_component_assoc (TAO_ETCL_Component_Assoc *);
int visit_component_array (TAO_ETCL_Component_Array *);
int visit_special (TAO_ETCL_Special *);
int visit_component (TAO_ETCL_Component *);
int visit_dot (TAO_ETCL_Dot *);
int visit_eval (TAO_ETCL_Eval *);
int visit_default (TAO_ETCL_Default *);
int visit_exist (TAO_ETCL_Exist *);
int visit_unary_expr (TAO_ETCL_Unary_Expr *);
int visit_binary_expr (TAO_ETCL_Binary_Expr *);
int visit_preference (TAO_ETCL_Preference *);
private:
// = Sub-methods for visit_binary_expr().
int visit_or (TAO_ETCL_Binary_Expr *);
int visit_and (TAO_ETCL_Binary_Expr *);
int visit_twiddle (TAO_ETCL_Binary_Expr *);
int visit_in (TAO_ETCL_Binary_Expr *);
int visit_binary_op (TAO_ETCL_Binary_Expr *binary_expr,
int op_type);
// = These use dynamic anys look inside the ETCL component.
CORBA::Boolean sequence_does_contain (const CORBA::Any *any,
TAO_ETCL_Literal_Constraint &item);
CORBA::Boolean array_does_contain (const CORBA::Any *any,
TAO_ETCL_Literal_Constraint &item);
CORBA::Boolean struct_does_contain (const CORBA::Any *any,
TAO_ETCL_Literal_Constraint &item);
CORBA::Boolean union_does_contain (const CORBA::Any *any,
TAO_ETCL_Literal_Constraint &item);
CORBA::Boolean any_does_contain (const CORBA::Any *any,
TAO_ETCL_Literal_Constraint &item);
/// Utility function to compare a TAO_ETCL_Literal_Constraint type
/// and a type code.
CORBA::Boolean simple_type_match (int expr_type,
CORBA::TCKind tc_kind);
private:
/// Used to lookup property name and values.
ACE_Hash_Map_Manager <ACE_CString,
CORBA::Any*,
TAO_SYNCH_MUTEX>
property_lookup_;
/// The result of a non_boolean operation.
ACE_Unbounded_Queue<TAO_ETCL_Literal_Constraint> queue_;
/// Holder for a value found in property_lookup_ or for a
/// nested type within that value.
CORBA::Any_var current_member_;
/// Local LogRecord.
DsLogAdmin::LogRecord &rec_;
};
#include /**/ "ace/post.h"
#endif /* TAO_LOG_CONSTRAINT_VISITORS_H */
|