blob: ab5b00fadd0931fd84d7e7b2af8e4633d4e4dedb (
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
126
127
128
129
130
|
// $Id$
// ============================================================================
//
// = LIBRARY
// TAO IDL
//
// = FILENAME
// be_union.h
//
// = DESCRIPTION
// Extension of class AST_Union that provides additional means for C++
// mapping.
//
// = AUTHOR
// Copyright 1994-1995 by Sun Microsystems, Inc.
// and
// Aniruddha Gokhale
//
// ============================================================================
#ifndef BE_UNION_H
#define BE_UNION_H
#include "be_type.h"
#include "be_scope.h"
#include "ast_union.h"
class AST_ConcreteType;
class UTL_StrList;
class be_visitor;
/*
* BE_Union
*/
class be_union : public virtual AST_Union,
public virtual be_scope,
public virtual be_type
{
public:
// =Operations
be_union (void);
// default constructor
be_union(AST_ConcreteType *dt, UTL_ScopedName *n, UTL_StrList *p);
// constructor
virtual int gen_var_defn (char *local_name = 0);
// generate the _var class definition
virtual int gen_var_impl (char *local_name = 0,
char *full_name = 0);
// generate the implementation for the _var class
virtual int gen_out_defn (char *local_name = 0);
// generate the _out class definition
virtual int gen_out_impl (char *local_name = 0,
char *full_name = 0);
// generate the _out implementation
virtual int member_count (void);
// return the count of members
virtual int default_index (void);
// return the default index used
virtual idl_bool in_recursion (be_type *node = 0);
// ar we or the parameter node involved in some kind of recursion
// Visiting
virtual int accept (be_visitor *visitor);
// Narrowing
DEF_NARROW_METHODS3 (be_union, AST_Union, be_scope, be_type);
DEF_NARROW_FROM_DECL(be_union);
DEF_NARROW_FROM_SCOPE(be_union);
struct DefaultValue
{
union PermittedTypes
{
char char_val;
ACE_CDR::WChar wchar_val;
unsigned long bool_val;
ACE_INT16 short_val;
ACE_UINT16 ushort_val;
ACE_INT32 long_val;
ACE_UINT32 ulong_val;
ACE_UINT32 enum_val;
// TO-DO - handle (u)longlong types
} u;
long computed_;
// computed == -1 => error condition
// == 0 => does not exist because all cases have been covered
// == 1 => already computed
// == -2 => initial value
};
int default_value (DefaultValue &);
// get the default value
protected:
virtual int compute_size_type (void);
// compute the size type if it is unknown
private:
//=helper
int compute_member_count (void);
// count the number of members
int compute_default_index (void);
// count the default index
virtual int compute_default_value (void);
// compute the implicit default value (if any)
int member_count_;
// number of members
int default_index_;
// default label index (zero based indexing)
DefaultValue default_value_;
// implicit default value (if any)
};
#endif
|