summaryrefslogtreecommitdiff
path: root/TAO/TAO_IDL/be_include/be_visitor_operation/operation_ss.h
blob: 03124ef8b4b3281ec5a7db975390e1e40b1f0b6a (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
131
132
133
134
135
136
137
138
139
140
141
//
// $Id$
//

// ============================================================================
//
// = LIBRARY
//    TAO IDL
//
// = FILENAME
//    operation_ss.h
//
// = DESCRIPTION
//    Visitor for generating code for IDL operations in server skeletons
//
// = AUTHOR
//    Aniruddha Gokhale
//
// ============================================================================

#if !defined (_BE_VISITOR_OPERATION_OPERATION_SS_H_)
#define _BE_VISITOR_OPERATION_OPERATION_SS_H_

// ************************************************************
// Operation visitor for server skeletons
// ************************************************************

class be_visitor_operation_ss : public be_visitor_operation
{
  //
  // = TITLE
  //   be_visitor_operation_ss
  //
  // = DESCRIPTION
  //   This is a concrete visitor to generate the server skeletons for operation
  //
  //
public:
  be_visitor_operation_ss (be_visitor_context *ctx);
  // constructor

  ~be_visitor_operation_ss (void);
  // destructor

  virtual int visit_operation (be_operation *node);
  // visit operation. We provide code for this method in the derived class

  virtual int visit_argument (be_argument *node);
  // visit argument to generate ParamData entries

  // template methods

  virtual int gen_pre_skel_info (be_operation *, be_type *) = 0;
  // generate any pre skeleton code info

  virtual int gen_demarshal_params (be_operation *, be_type *) = 0;
  // generate code for demarshaling incoming parameters

  virtual int gen_marshal_params (be_operation *, be_type *) = 0;
  // generate code for marshaling outgoing parameters

  // = helper
  virtual int post_process (be_decl *);
  // stuff to output after every member of the scope is handled

  virtual int gen_raise_exception (be_type *, 
                                   const char * excep,
                                   const char * status,
                                   const char * env);
  // helper that generates code for raising an exception

  virtual int gen_check_exception (be_type *, const char *env);
  // helper that generates code for checking for an exception

};

// concrete visitors

class be_interpretive_visitor_operation_ss : public be_visitor_operation_ss
{
  //
  // = TITLE
  //   be_interpretive_visitor_operation_ss
  //
  // = DESCRIPTION
  //   This is a concrete visitor to generate the server skeletons for
  //   operation using interpretive marshaling
  //
  //
public:
  be_interpretive_visitor_operation_ss (be_visitor_context *ctx);
  // constructor

  ~be_interpretive_visitor_operation_ss (void);
  // destructor

  // template methods

  virtual int gen_pre_skel_info (be_operation *, be_type *);
  // generate any pre skeleton code info

  virtual int gen_demarshal_params (be_operation *, be_type *);
  // generate code for demarshaling incoming parameters

  virtual int gen_marshal_params (be_operation *, be_type *);
  // generate code for marshaling outgoing parameters

};

class be_compiled_visitor_operation_ss : public be_visitor_operation_ss
{
  //
  // = TITLE
  //   be_compiled_visitor_operation_ss
  //
  // = DESCRIPTION
  //   This is a concrete visitor to generate the server skeletons for
  //   operation using compiled marshaling
  //
  //
public:
  be_compiled_visitor_operation_ss (be_visitor_context *ctx);
  // constructor

  ~be_compiled_visitor_operation_ss (void);
  // destructor

  // template methods

  virtual int gen_pre_skel_info (be_operation *, be_type *);
  // generate any pre skeleton code info

  virtual int gen_demarshal_params (be_operation *, be_type *);
  // generate code for demarshaling incoming parameters

  virtual int gen_marshal_params (be_operation *, be_type *);
  // generate code for marshaling outgoing parameters

};

#endif /* _BE_VISITOR_OPERATION_OPERATION_SS_H_ */