1
// file : CIDLC/TypeNameEmitter.cpp
2
// author : Jeff Parsons <j.parsons@vanderbilt.edu>
3
// cvs-id : TypeNameEmitter.cpp,v 1.9 2004/01/09 20:49:49 parsons Exp
5
#include "TypeNameEmitter.hpp"
6
#include "Literals.hpp"
11
using namespace StringLiterals;
13
TypeNameEmitter::TypeNameEmitter (ostream& os_)
18
// ====================================================================
20
ReturnTypeNameEmitter::ReturnTypeNameEmitter (ostream& os_)
21
: TypeNameEmitter (os_)
26
ReturnTypeNameEmitter::traverse (Void&)
32
ReturnTypeNameEmitter::traverse (Boolean&)
34
os << "::CORBA::Boolean";
38
ReturnTypeNameEmitter::traverse (Octet&)
40
os << "::CORBA::Octet";
44
ReturnTypeNameEmitter::traverse (Char&)
46
os << "::CORBA::Char";
50
ReturnTypeNameEmitter::traverse (Wchar&)
52
os << "::CORBA::WChar";
56
ReturnTypeNameEmitter::traverse (Short&)
58
os << "::CORBA::Short";
62
ReturnTypeNameEmitter::traverse (UnsignedShort&)
64
os << "::CORBA::UShort";
68
ReturnTypeNameEmitter::traverse (Long&)
70
os << "::CORBA::Long";
74
ReturnTypeNameEmitter::traverse (UnsignedLong&)
76
os << "::CORBA::ULong";
80
ReturnTypeNameEmitter::traverse (LongLong&)
82
os << "::CORBA::LongLong";
86
ReturnTypeNameEmitter::traverse (UnsignedLongLong&)
88
os << "::CORBA::ULongLong";
92
ReturnTypeNameEmitter::traverse (Float&)
94
os << "::CORBA::Float";
98
ReturnTypeNameEmitter::traverse (Double&)
100
os << "::CORBA::Double";
104
ReturnTypeNameEmitter::traverse (String&)
110
ReturnTypeNameEmitter::traverse (Wstring&)
112
os << "::CORBA::WChar *";
116
ReturnTypeNameEmitter::traverse (Object&)
118
os << "::CORBA::Object_ptr";
122
ReturnTypeNameEmitter::traverse (ValueBase&)
124
os << "::CORBA::ValueBase *";
128
ReturnTypeNameEmitter::traverse (Any&)
130
os << "::CORBA::Any *";
134
ReturnTypeNameEmitter::traverse (SemanticGraph::Struct& s)
136
// This should always be in the context, since the SizeTypeCalculator
137
// is executed before the servant code generators.
138
bool var_size = s.context ().get<bool> (STRS[VAR_SIZE]);
140
os << s.scoped_name ();
149
ReturnTypeNameEmitter::traverse (SemanticGraph::Union& u)
151
// This should always be in the context, since the SizeTypeCalculator
152
// is executed before the servant code generators.
153
bool var_size = u.context ().get<bool> (STRS[VAR_SIZE]);
155
os << u.scoped_name ();
164
ReturnTypeNameEmitter::traverse (SemanticGraph::UnboundedSequence& s)
166
os << s.scoped_name () << " *";
170
ReturnTypeNameEmitter::traverse (SemanticGraph::Interface& i)
172
os << i.scoped_name () << "_ptr";
176
ReturnTypeNameEmitter::traverse (SemanticGraph::ValueType& v)
178
os << v.scoped_name () << " *";
182
ReturnTypeNameEmitter::traverse (SemanticGraph::EventType& e)
184
os << e.scoped_name () << " *";
188
ReturnTypeNameEmitter::traverse (SemanticGraph::Component& c)
190
os << c.scoped_name () << "_ptr";
193
// ===============================================================
195
INArgTypeNameEmitter::INArgTypeNameEmitter (ostream& os_)
196
: TypeNameEmitter (os_)
201
INArgTypeNameEmitter::traverse (Void&)
203
// No-op, but the base class method is pure virtual.
207
INArgTypeNameEmitter::traverse (Boolean&)
209
os << "::CORBA::Boolean";
213
INArgTypeNameEmitter::traverse (Octet&)
215
os << "::CORBA::Octet";
219
INArgTypeNameEmitter::traverse (Char&)
221
os << "::CORBA::Char";
225
INArgTypeNameEmitter::traverse (Wchar&)
227
os << "::CORBA::WChar";
231
INArgTypeNameEmitter::traverse (Short&)
233
os << "::CORBA::Short";
237
INArgTypeNameEmitter::traverse (UnsignedShort&)
239
os << "::CORBA::UShort";
243
INArgTypeNameEmitter::traverse (Long&)
245
os << "::CORBA::Long";
249
INArgTypeNameEmitter::traverse (UnsignedLong&)
251
os << "::CORBA::ULong";
255
INArgTypeNameEmitter::traverse (LongLong&)
257
os << "::CORBA::LongLong";
261
INArgTypeNameEmitter::traverse (UnsignedLongLong&)
263
os << "::CORBA::ULongLong";
267
INArgTypeNameEmitter::traverse (Float&)
269
os << "::CORBA::Float";
273
INArgTypeNameEmitter::traverse (Double&)
275
os << "::CORBA::Double";
279
INArgTypeNameEmitter::traverse (String&)
281
os << "const char *";
285
INArgTypeNameEmitter::traverse (Wstring&)
287
os << "const ::CORBA::WChar *";
291
INArgTypeNameEmitter::traverse (Object&)
293
os << "::CORBA::Object_ptr";
297
INArgTypeNameEmitter::traverse (ValueBase&)
299
os << "::CORBA::ValueBase *";
303
INArgTypeNameEmitter::traverse (Any&)
305
os << "const ::CORBA::Any &";
309
INArgTypeNameEmitter::traverse (SemanticGraph::Struct& s)
311
os << "const " << s.scoped_name () << " &";;
315
INArgTypeNameEmitter::traverse (SemanticGraph::Union& u)
317
os << "const " << u.scoped_name () << " &";;
321
INArgTypeNameEmitter::traverse (SemanticGraph::UnboundedSequence& s)
323
os << "const " << s.scoped_name () << " &";;
327
INArgTypeNameEmitter::traverse (SemanticGraph::Interface& i)
329
os << i.scoped_name () << "_ptr";
333
INArgTypeNameEmitter::traverse (SemanticGraph::ValueType& v)
335
os << v.scoped_name () << " *";
339
INArgTypeNameEmitter::traverse (SemanticGraph::EventType& e)
341
os << e.scoped_name () << " *";
345
INArgTypeNameEmitter::traverse (SemanticGraph::Component& c)
347
os << c.scoped_name () << "_ptr";
350
// ===============================================================
352
INOUTArgTypeNameEmitter::INOUTArgTypeNameEmitter (ostream& os_)
353
: TypeNameEmitter (os_)
358
INOUTArgTypeNameEmitter::traverse (Void&)
360
// No-op, but the base class method is pure virtual.
364
INOUTArgTypeNameEmitter::traverse (Boolean&)
366
os << "::CORBA::Boolean &";
370
INOUTArgTypeNameEmitter::traverse (Octet&)
372
os << "::CORBA::Octet &";
376
INOUTArgTypeNameEmitter::traverse (Char&)
378
os << "::CORBA::Char &";
382
INOUTArgTypeNameEmitter::traverse (Wchar&)
384
os << "::CORBA::WChar &";
388
INOUTArgTypeNameEmitter::traverse (Short&)
390
os << "::CORBA::Short &";
394
INOUTArgTypeNameEmitter::traverse (UnsignedShort&)
396
os << "::CORBA::UShort &";
400
INOUTArgTypeNameEmitter::traverse (Long&)
402
os << "::CORBA::Long &";
406
INOUTArgTypeNameEmitter::traverse (UnsignedLong&)
408
os << "::CORBA::ULong &";
412
INOUTArgTypeNameEmitter::traverse (LongLong&)
414
os << "::CORBA::LongLong &";
418
INOUTArgTypeNameEmitter::traverse (UnsignedLongLong&)
420
os << "::CORBA::ULongLong &";
424
INOUTArgTypeNameEmitter::traverse (Float&)
426
os << "::CORBA::Float &";
430
INOUTArgTypeNameEmitter::traverse (Double&)
432
os << "::CORBA::Double &";
436
INOUTArgTypeNameEmitter::traverse (String&)
442
INOUTArgTypeNameEmitter::traverse (Wstring&)
444
os << "::CORBA::WChar *&";
448
INOUTArgTypeNameEmitter::traverse (Object&)
450
os << "::CORBA::Object_ptr &";
454
INOUTArgTypeNameEmitter::traverse (ValueBase&)
456
os << "::CORBA::ValueBase *&";
460
INOUTArgTypeNameEmitter::traverse (Any&)
462
os << "::CORBA::Any &";
466
INOUTArgTypeNameEmitter::traverse (SemanticGraph::Struct& s)
468
os << s.scoped_name () << " &";
472
INOUTArgTypeNameEmitter::traverse (SemanticGraph::Union& u)
474
os << u.scoped_name () << " &";
478
INOUTArgTypeNameEmitter::traverse (SemanticGraph::UnboundedSequence& s)
480
os << s.scoped_name () << " &";
484
INOUTArgTypeNameEmitter::traverse (SemanticGraph::Interface& i)
486
os << i.scoped_name () << "_ptr &";
490
INOUTArgTypeNameEmitter::traverse (SemanticGraph::ValueType& v)
492
os << v.scoped_name () << " *&";
496
INOUTArgTypeNameEmitter::traverse (SemanticGraph::EventType& e)
498
os << e.scoped_name () << " *&";
502
INOUTArgTypeNameEmitter::traverse (SemanticGraph::Component& c)
504
os << c.scoped_name () << "_ptr &";
507
// =================================================================
509
OUTArgTypeNameEmitter::OUTArgTypeNameEmitter (ostream& os_)
510
: TypeNameEmitter (os_)
515
OUTArgTypeNameEmitter::traverse (Void&)
517
// No-op, but the base class method is pure virtual.
521
OUTArgTypeNameEmitter::traverse (Boolean&)
523
os << "::CORBA::Boolean_out";
527
OUTArgTypeNameEmitter::traverse (Octet&)
529
os << "::CORBA::Octet_out";
533
OUTArgTypeNameEmitter::traverse (Char&)
535
os << "::CORBA::Char_out";
539
OUTArgTypeNameEmitter::traverse (Wchar&)
541
os << "::CORBA::WChar_out";
545
OUTArgTypeNameEmitter::traverse (Short&)
547
os << "::CORBA::Short_out";
551
OUTArgTypeNameEmitter::traverse (UnsignedShort&)
553
os << "::CORBA::UShort_out";
557
OUTArgTypeNameEmitter::traverse (Long&)
559
os << "::CORBA::Long_out";
563
OUTArgTypeNameEmitter::traverse (UnsignedLong&)
565
os << "::CORBA::ULong_out";
569
OUTArgTypeNameEmitter::traverse (LongLong&)
571
os << "::CORBA::LongLong_out";
575
OUTArgTypeNameEmitter::traverse (UnsignedLongLong&)
577
os << "::CORBA::ULongLong_out";
581
OUTArgTypeNameEmitter::traverse (Float&)
583
os << "::CORBA::Float_out";
587
OUTArgTypeNameEmitter::traverse (Double&)
589
os << "::CORBA::Double_out";
593
OUTArgTypeNameEmitter::traverse (String&)
595
os << "::CORBA::String_out";
599
OUTArgTypeNameEmitter::traverse (Wstring&)
601
os << "::CORBA::WString_out";
605
OUTArgTypeNameEmitter::traverse (Object&)
607
os << "::CORBA::Object_out";
611
OUTArgTypeNameEmitter::traverse (ValueBase&)
613
os << "::CORBA::ValueBase_out";
617
OUTArgTypeNameEmitter::traverse (Any&)
619
os << "::CORBA::Any_out";
623
OUTArgTypeNameEmitter::traverse (SemanticGraph::Struct& s)
625
os << s.scoped_name () << "_out";
629
OUTArgTypeNameEmitter::traverse (SemanticGraph::Union& u)
631
os << u.scoped_name () << "_out";
635
OUTArgTypeNameEmitter::traverse (SemanticGraph::UnboundedSequence& s)
637
os << s.scoped_name () << "_out";
641
OUTArgTypeNameEmitter::traverse (SemanticGraph::Interface& i)
643
os << i.scoped_name () << "_out";
647
OUTArgTypeNameEmitter::traverse (SemanticGraph::ValueType& v)
649
os << v.scoped_name () << "_out";
653
OUTArgTypeNameEmitter::traverse (SemanticGraph::EventType& e)
655
os << e.scoped_name () << "_out";
659
OUTArgTypeNameEmitter::traverse (SemanticGraph::Component& c)
661
os << c.scoped_name () << "_out";