1 : //==============================================================================
2 : // File <$/src/cpp/dev/idlc/operation.cpp>
3 : // This file is part of YaOrb : Yet Another Object Request Broker,
4 : // Copyright (c) 2000-2003, Marc Alff.
5 : //
6 : // This program is free software; you can redistribute it and/or
7 : // modify it under the terms of the GNU General Public License
8 : // as published by the Free Software Foundation; either version 2
9 : // of the License, or (at your option) any later version.
10 : //
11 : // This program is distributed in the hope that it will be useful,
12 : // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 : // GNU General Public License for more details.
15 : //
16 : // You should have received a copy of the GNU General Public License
17 : // along with this program; if not, write to the Free Software
18 : // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 : //
20 : //==============================================================================
21 :
22 : #include "src/cpp/prod/tool/DEVELOPMENT.h"
23 : #include "src/cpp/prod/tool/Assert.h"
24 :
25 : #include "src/cpp/dev/idlc/operation.h"
26 : #include "src/cpp/dev/idlc/idl_type.h"
27 :
28 : Operation::Operation(
29 : OperationAttribute attrib,
30 : IDLType *result,
31 2111 : const String& name)
32 : : Symbol(name, operationSymbol),
33 : _attrib(attrib),
34 : _return(result),
35 : _parameters(),
36 2111 : _exceptions()
37 : {
38 0 : }
39 :
40 2111 : Operation::~Operation()
41 : {
42 2111 : delete _return ;
43 : _parameters.clear() ; // NOT clearAndDestroy : done by sym_tab.
44 0 : }
45 :
46 3473 : void Operation::addParameter(Parameter *param)
47 : {
48 : ASSERT(param != NULL) ;
49 3473 : const String& name = param->GetName() ;
50 3473 : if (findParameterByName(name) != NULL)
51 : {
52 1 : NON_DEV("Error message") ;
53 : }
54 : else
55 : {
56 : _parameters.addTail(param) ;
57 : }
58 : }
59 :
60 1549 : IDLType* Operation::GetReturnType(void) const
61 : {
62 : return _return ;
63 : }
64 :
65 1549 : const ParameterList& Operation::GetParameterList(void) const
66 : {
67 : return _parameters ;
68 : }
69 :
70 3473 : Parameter* Operation::findParameterByName(const String& name) const
71 : {
72 : Parameter *item = NULL ;
73 : ParameterListIt it(_parameters) ;
74 11283 : while (it.GetNext())
75 : {
76 : item = it.GetItem() ;
77 4338 : if (item->GetName() == name)
78 : {
79 : return item ;
80 : }
81 : }
82 :
83 : return NULL ;
84 : }
85 :
86 1176 : void Operation::addException(Exception *except)
87 : {
88 : ASSERT(except != NULL) ;
89 1176 : const String& name = except->GetName() ;
90 1176 : if (findExceptionByName(name) != NULL)
91 : {
92 1 : NON_DEV("Error message") ;
93 : }
94 : else
95 : {
96 : _exceptions.addTail(except) ;
97 : }
98 : }
99 :
100 0 : const ExceptionList& Operation::GetExceptionList(void) const
101 : {
102 : return _exceptions ;
103 : }
104 :
105 1176 : Exception* Operation::findExceptionByName(const String& name) const
106 : {
107 : Exception *item = NULL ;
108 : ExceptionListIt it(_exceptions) ;
109 3067 : while (it.GetNext())
110 : {
111 : item = it.GetItem() ;
112 716 : if (item->GetName() == name)
113 : {
114 : return item ;
115 : }
116 : }
117 :
118 : return NULL ;
119 48 : }
120 48 :
|