TAO_PSDL_Type_Dcl_Visitor Class Reference

#include <PSDL_Type_Dcl_Visitor.h>

Inheritance diagram for TAO_PSDL_Type_Dcl_Visitor:

Inheritance graph
[legend]
Collaboration diagram for TAO_PSDL_Type_Dcl_Visitor:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 TAO_PSDL_Type_Dcl_Visitor ()
 ~TAO_PSDL_Type_Dcl_Visitor ()
int visit_identifier (TAO_PSDL_Identifier *identifier)
int visit_type_declarator (TAO_PSDL_Type_Declarator *node)
int visit_predefined_type (TAO_PSDL_Predefined_Type *predefined_type)

Private Member Functions

void print_for_simple_typedefs (void)
void print_for_sequence_typedefs (ACE_CString identifier_type, ACE_CString identifier)
void gen_code_for_si (void)

Detailed Description

Definition at line 28 of file PSDL_Type_Dcl_Visitor.h.


Constructor & Destructor Documentation

TAO_PSDL_Type_Dcl_Visitor::TAO_PSDL_Type_Dcl_Visitor (  ) 

Definition at line 9 of file PSDL_Type_Dcl_Visitor.cpp.

00010 {
00011 }

TAO_PSDL_Type_Dcl_Visitor::~TAO_PSDL_Type_Dcl_Visitor (  ) 

Definition at line 13 of file PSDL_Type_Dcl_Visitor.cpp.

00014 {
00015 }


Member Function Documentation

void TAO_PSDL_Type_Dcl_Visitor::gen_code_for_si ( void   )  [private, virtual]

Reimplemented from TAO_PSDL_Node_Visitor.

Definition at line 354 of file PSDL_Type_Dcl_Visitor.cpp.

References TAO_PSDL_Stream::decr_indent(), TAO_PSDL_Scope::get_si(), TAO_PSDL_Node_Visitor::identifiers_, TAO_PSDL_Stream::incr_indent(), TAO_PSDL_Stream::indent(), TAO_PSDL_Scope::instance(), TAO_PSDL_Stream::nl(), and TAO_PSDL_Stream::reset().

Referenced by print_for_simple_typedefs().

00355 {
00356   TAO_PSDL_Stream *ps_si = TAO_PSDL_Scope::instance ()->get_si ();
00357 
00358   ps_si->reset ();
00359   ps_si->indent (); // start from current indentation level
00360 
00361   // Generate the typecode information here
00362   *ps_si << "static const CORBA::Long _oc_";
00363 
00364   // Flat name generation.
00365   *ps_si << this->identifiers_[1];
00366   *ps_si << "[] =";
00367   ps_si->nl ();
00368   *ps_si << "{";
00369   ps_si->nl ();
00370 
00371   // Some invocation call to put in the stuff that goes between
00372   // braces.
00373   *ps_si << "// Typecode related information should go in here";
00374   ps_si->nl ();
00375 
00376   *ps_si << "};";
00377   ps_si->nl ();
00378   ps_si->nl ();
00379 
00380   *ps_si << "static CORBA::TypeCode _tc_TAO_tc_";
00381   *ps_si << this->identifiers_[1];
00382   *ps_si << " (";
00383   ps_si->nl ();
00384   ps_si->incr_indent ();
00385   *ps_si << "CORBA::tk_alias,";
00386   ps_si->nl ();
00387   *ps_si << "sizeof (_oc_" << this->identifiers_[1] << "),";
00388   ps_si->nl ();
00389   *ps_si << "(char *) &_oc_";
00390   *ps_si << this->identifiers_[1] << ",";
00391   ps_si->nl ();
00392   *ps_si << "0,";
00393   ps_si->nl ();
00394   *ps_si << "sizeof (" << this->identifiers_[1] << ")";
00395   ps_si->nl ();
00396   *ps_si << ");";
00397   ps_si->decr_indent ();
00398 
00399   ps_si->nl ();
00400   ps_si->nl ();
00401   *ps_si << "::CORBA::TypeCode_ptr _tc_" << this->identifiers_[1] << " =";
00402   ps_si->nl ();
00403   ps_si->incr_indent ();
00404 
00405   *ps_si << "&_tc_TAO_tc_" << this->identifiers_[1] << ";";
00406   ps_si->decr_indent ();
00407   ps_si->nl ();
00408   ps_si->nl ();
00409 
00410 
00411   return;
00412 }

void TAO_PSDL_Type_Dcl_Visitor::print_for_sequence_typedefs ( ACE_CString  identifier_type,
ACE_CString  identifier 
) [private]

Definition at line 86 of file PSDL_Type_Dcl_Visitor.cpp.

References ACE_String_Base< CHAR >::c_str(), TAO_PSDL_Stream::decr_indent(), TAO_PSDL_Scope::get_name_space(), TAO_PSDL_Scope::get_sh(), TAO_PSDL_Stream::incr_indent(), TAO_PSDL_Scope::instance(), and TAO_PSDL_Stream::nl().

Referenced by visit_type_declarator().

00088 {
00089   ACE_CString name_space = TAO_PSDL_Scope::instance ()->get_name_space ();
00090 
00091   // Get a pointer to PSDL_Stream of the stub header.
00092   TAO_PSDL_Stream *ps_sh = TAO_PSDL_Scope::instance ()->get_sh ();
00093 
00094   ps_sh->nl ();
00095   *ps_sh << "#if !defined (TAO_USE_SEQUENCE_TEMPLATES)";
00096   ps_sh->nl ();
00097   *ps_sh << "#if !defined (__TAO_UNBOUNDED_SEQUENCE_" << name_space.c_str ()
00098          << "_" << identifier.c_str () << "_CH_)";
00099   ps_sh->nl ();
00100   *ps_sh << "#define __TAO_UNBOUNDED_SEQUENCE_" << name_space.c_str ()
00101          << "_" << identifier.c_str () << "_CH_";
00102   ps_sh->nl ();
00103   *ps_sh << "class TAO_EXPORT_MACRO _TAO_Unbounded_Sequence_CosNaming_"
00104          << identifier.c_str ();
00105   ps_sh->nl ();
00106   *ps_sh << ": public TAO_Unbounded_Base_Sequence";
00107   ps_sh->nl ();
00108   *ps_sh << "{";
00109   ps_sh->incr_indent ();
00110   ps_sh->nl ();
00111   *ps_sh << "public:";
00112   ps_sh->nl ();
00113   *ps_sh << "// = Initialization and termination methods.";
00114   ps_sh->nl ();
00115   *ps_sh << "_TAO_Unbounded_Sequence_" << name_space.c_str ()
00116          << "_" << identifier.c_str () << " (void);";
00117   ps_sh->nl ();
00118   *ps_sh << "_TAO_Unbounded_Sequence_" << name_space.c_str ()
00119          << "_" << identifier.c_str () << " (CORBA::ULong maximum);";
00120   ps_sh->nl ();
00121   *ps_sh << "_TAO_Unbounded_Sequence_" << name_space.c_str () << "_"
00122          << identifier.c_str () << " (";
00123   ps_sh->nl ();
00124   *ps_sh << "CORBA::ULong maximum,";
00125   ps_sh->nl ();
00126   *ps_sh << "CORBA::ULong length,";
00127   ps_sh->nl ();
00128   *ps_sh << identifier_type << " *data,";
00129   ps_sh->nl ();
00130   *ps_sh << "CORBA::Boolean release = 0";
00131   ps_sh->nl ();
00132   *ps_sh << ");";
00133   ps_sh->nl ();
00134   *ps_sh << "_TAO_Unbounded_Sequence_" << name_space.c_str () << "_" << identifier.c_str () << " (";
00135   ps_sh->nl ();
00136   *ps_sh << "const _TAO_Unbounded_Sequence_" << name_space.c_str () << "_" << identifier.c_str () << " &rhs\n";
00137   *ps_sh << ");\n";
00138   *ps_sh << "_TAO_Unbounded_Sequence_" << name_space.c_str () << "_" << identifier.c_str () << " &operator= (\n";
00139   *ps_sh << "const _TAO_Unbounded_Sequence_" << name_space.c_str () << "_" << identifier.c_str () << " &rhs\n";
00140   *ps_sh << ");\n";
00141   *ps_sh << "virtual ~_TAO_Unbounded_Sequence_" << name_space << "_" << identifier << " (void);";
00142   ps_sh->nl ();
00143   ps_sh->nl ();
00144   *ps_sh << "// = Accessors.\n";
00145   *ps_sh << identifier_type << " &operator[] (CORBA::ULong i);\n";
00146   *ps_sh << "const " << identifier_type << " &operator[] (CORBA::ULong i) const;\n";
00147   ps_sh->nl ();
00148   *ps_sh << "// = Static operations.\n";
00149   *ps_sh << "static " << identifier_type << " *allocbuf (CORBA::ULong size);\n";
00150   *ps_sh << "static void freebuf (" << identifier_type << " *buffer);\n";
00151   ps_sh->nl ();
00152   *ps_sh << "// Implement the TAO_Base_Sequence methods (see Sequence.h)";   ps_sh->nl ();
00153   *ps_sh << "virtual void _allocate_buffer (CORBA::ULong length);";   ps_sh->nl ();
00154   *ps_sh << "virtual void _deallocate_buffer (void);";   ps_sh->nl ();
00155   *ps_sh << identifier_type << " *get_buffer (CORBA::Boolean orphan = 0);";   ps_sh->nl ();
00156   *ps_sh << "const " << identifier_type << " *get_buffer (void) const;";   ps_sh->nl ();
00157   *ps_sh << "void replace (";   ps_sh->nl ();
00158   *ps_sh << "  CORBA::ULong max,";   ps_sh->nl ();
00159   *ps_sh << "  CORBA::ULong length,";   ps_sh->nl ();
00160   *ps_sh << identifier_type << " *data,";   ps_sh->nl ();
00161   *ps_sh << "CORBA::Boolean release";   ps_sh->nl ();
00162   *ps_sh << ");";   ps_sh->nl ();
00163   ps_sh->decr_indent ();
00164   *ps_sh << "};";   ps_sh->nl ();
00165   ps_sh->decr_indent ();
00166   ps_sh->nl ();
00167   *ps_sh << "#endif /* end #if !defined */";   ps_sh->nl ();
00168   ps_sh->nl ();
00169   ps_sh->nl ();
00170   *ps_sh << "#endif /* !TAO_USE_SEQUENCE_TEMPLATES */ ";   ps_sh->nl ();
00171 
00172   ps_sh->nl ();
00173   ps_sh->nl ();
00174 
00175   *ps_sh << "#if !defined (_" << name_space.c_str () << "_" << identifier.c_str () << "_CH_)";   ps_sh->nl ();
00176   *ps_sh << "#define _" << name_space.c_str () << "_" << identifier.c_str () << "_CH_";   ps_sh->nl ();
00177   ps_sh->nl ();
00178 
00179   *ps_sh << "class " << identifier.c_str () << ";";   ps_sh->nl ();
00180   *ps_sh << "class " << identifier.c_str () << "_var;";   ps_sh->nl ();
00181   ps_sh->nl ();
00182 
00183   *ps_sh << "// *************************************************************";   ps_sh->nl ();
00184   *ps_sh << "// " << identifier.c_str () ;   ps_sh->nl ();
00185   *ps_sh << "// *************************************************************";   ps_sh->nl ();
00186 
00187   ps_sh->nl ();
00188 
00189   *ps_sh << "class  " << identifier.c_str () << " : public";   ps_sh->nl ();
00190 
00191   ps_sh->nl ();
00192 
00193   *ps_sh << "#if !defined (TAO_USE_SEQUENCE_TEMPLATES)";   ps_sh->nl ();
00194   *ps_sh << "_TAO_Unbounded_Sequence_" << name_space.c_str () << "_" << identifier.c_str () ;   ps_sh->nl ();
00195   *ps_sh << "#else /* TAO_USE_SEQUENCE_TEMPLATES */";   ps_sh->nl ();
00196   *ps_sh << "TAO_Unbounded_Sequence<" << identifier.c_str () << "Component>";   ps_sh->nl ();
00197   *ps_sh << "#endif /* !TAO_USE_SEQUENCE_TEMPLATES */ ";   ps_sh->nl ();
00198   *ps_sh << "{";   ps_sh->nl ();
00199   ps_sh->incr_indent ();
00200   *ps_sh << "public:";   ps_sh->nl ();
00201   *ps_sh << identifier.c_str () << " (void); // default ctor";   ps_sh->nl ();
00202   *ps_sh << identifier.c_str () << " (CORBA::ULong max); // uses max size";   ps_sh->nl ();
00203   *ps_sh << identifier.c_str () << " (";   ps_sh->nl ();
00204   *ps_sh << "CORBA::ULong max, ";   ps_sh->nl ();
00205   *ps_sh << "CORBA::ULong length, ";   ps_sh->nl ();
00206   *ps_sh << identifier.c_str () << "Component *buffer, ";   ps_sh->nl ();
00207   *ps_sh << "CORBA::Boolean release = 0";   ps_sh->nl ();
00208   *ps_sh << ");";   ps_sh->nl ();
00209 
00210   *ps_sh  << identifier.c_str () << " (const " << identifier.c_str () << " &); // copy ctor";   ps_sh->nl ();
00211   *ps_sh << "~" << identifier.c_str () << " (void);";   ps_sh->nl ();
00212   *ps_sh << "static void _tao_any_destructor (void*);";   ps_sh->nl ();
00213   ps_sh->nl ();
00214   *ps_sh << "typedef " << identifier.c_str () << "_var _var_type;";   ps_sh->nl ();
00215   ps_sh->nl ();
00216   ps_sh->nl ();
00217   *ps_sh << "};";   ps_sh->nl ();
00218   ps_sh->decr_indent ();
00219   ps_sh->nl ();
00220   *ps_sh << "#endif /* end #if !defined */";   ps_sh->nl ();
00221   ps_sh->nl ();
00222   ps_sh->nl ();
00223   *ps_sh << "#if !defined (_" << name_space.c_str () << "_" << identifier.c_str () << "___VAR_CH_)";   ps_sh->nl ();
00224   *ps_sh << "#define _" << name_space.c_str () << "_" << identifier.c_str () << "___VAR_CH_";   ps_sh->nl ();
00225   ps_sh->nl ();
00226   *ps_sh << "// *************************************************************";   ps_sh->nl ();
00227   *ps_sh << "// class " << name_space.c_str () << "::" << identifier.c_str () << "_var";   ps_sh->nl ();
00228   *ps_sh << "// *************************************************************";   ps_sh->nl ();
00229   ps_sh->nl ();
00230   *ps_sh << "class  " << identifier.c_str () << "_var";   ps_sh->nl ();
00231   *ps_sh << "{";   ps_sh->nl ();
00232   ps_sh->incr_indent ();
00233   *ps_sh << "public:";   ps_sh->nl ();
00234   *ps_sh << identifier.c_str () << "_var (void);";   ps_sh->nl ();
00235   *ps_sh << identifier.c_str () << "_var (" << identifier.c_str () << " *);";   ps_sh->nl ();
00236   *ps_sh << identifier.c_str () << "_var (const " << identifier.c_str () << "_var &);";   ps_sh->nl ();
00237   *ps_sh << "~" << identifier.c_str () << "_var (void);";   ps_sh->nl ();
00238   ps_sh->nl ();
00239   *ps_sh << identifier.c_str () << "_var &operator= (" << identifier.c_str () << " *);";   ps_sh->nl ();
00240   *ps_sh << identifier.c_str () << "_var &operator= (const " << identifier.c_str () << "_var &);";   ps_sh->nl ();
00241   *ps_sh << identifier.c_str () << " *operator-> (void);";   ps_sh->nl ();
00242   *ps_sh << "const " << identifier.c_str () << " *operator-> (void) const;";   ps_sh->nl ();
00243   ps_sh->nl ();
00244   *ps_sh << "operator const " << identifier.c_str () << " &() const;";   ps_sh->nl ();
00245   *ps_sh << "operator " << identifier.c_str () << " &();";   ps_sh->nl ();
00246   *ps_sh << "operator " << identifier.c_str () << " &() const;";   ps_sh->nl ();
00247   *ps_sh << "operator " << identifier.c_str () << " *&(); // variable-size base types only";   ps_sh->nl ();
00248   ps_sh->nl ();
00249   *ps_sh << identifier.c_str () << "Component & operator[] (CORBA::ULong index);";   ps_sh->nl ();
00250   *ps_sh << "const " << identifier.c_str () << "Component & operator[] (CORBA::ULong index) const;";
00251 
00252   ps_sh->nl ();
00253   ps_sh->nl ();
00254 
00255   *ps_sh << "// in, inout, out, _retn ";   ps_sh->nl ();
00256   *ps_sh << "const " << identifier.c_str () << " &in (void) const;";   ps_sh->nl ();
00257   *ps_sh << identifier.c_str () << " &inout (void);";   ps_sh->nl ();
00258   *ps_sh << identifier.c_str () << " *&out (void);";   ps_sh->nl ();
00259   *ps_sh << identifier.c_str () << " *_retn (void);";   ps_sh->nl ();
00260   *ps_sh << identifier.c_str () << " *ptr (void) const;";
00261 
00262   ps_sh->decr_indent (0);
00263 
00264   ps_sh->nl ();
00265   ps_sh->nl ();
00266 
00267   *ps_sh << "private:";
00268 
00269   ps_sh->incr_indent (0);
00270   ps_sh->nl ();
00271 
00272   *ps_sh << identifier.c_str () << " *ptr_;";   ps_sh->nl ();
00273   *ps_sh << "};";
00274 
00275   ps_sh->nl ();
00276   ps_sh->nl ();
00277   ps_sh->nl ();
00278 
00279   *ps_sh << "#endif /* end #if !defined */";   ps_sh->nl ();
00280   ps_sh->nl ();
00281   ps_sh->nl ();
00282   *ps_sh << "#if !defined (_" << name_space.c_str () << "_" << identifier.c_str () << "___OUT_CH_)";   ps_sh->nl ();
00283   *ps_sh << "#define _" << name_space.c_str () << "_" << identifier.c_str () << "___OUT_CH_";   ps_sh->nl ();
00284   ps_sh->nl ();
00285   *ps_sh << "class  " << identifier.c_str () << "_out";   ps_sh->nl ();
00286   *ps_sh << "{";   ps_sh->nl ();
00287   ps_sh->incr_indent ();
00288   *ps_sh << "public:";   ps_sh->nl ();
00289   *ps_sh << identifier.c_str () << "_out (" << identifier.c_str () << " *&);";   ps_sh->nl ();
00290   *ps_sh << identifier.c_str () << "_out (" << identifier.c_str () << "_var &);";   ps_sh->nl ();
00291   *ps_sh << identifier.c_str () << "_out (const " << identifier.c_str () << "_out &);";   ps_sh->nl ();
00292   *ps_sh << identifier.c_str () << "_out &operator= (const " << identifier.c_str () << "_out &);";   ps_sh->nl ();
00293   *ps_sh << identifier.c_str () << "_out &operator= (" << identifier.c_str () << " *);";   ps_sh->nl ();
00294   *ps_sh << "operator " << identifier.c_str () << " *&();";   ps_sh->nl ();
00295   *ps_sh << identifier.c_str () << " *&ptr (void);";   ps_sh->nl ();
00296   *ps_sh << identifier.c_str () << " *operator-> (void);";   ps_sh->nl ();
00297   *ps_sh << identifier.c_str () << "Component & operator[] (CORBA::ULong index);";   ps_sh->nl ();
00298   ps_sh->nl ();
00299   *ps_sh << "private:";   ps_sh->nl ();
00300   *ps_sh << identifier.c_str () << " *&ptr_;";   ps_sh->nl ();
00301   *ps_sh << "// Assignment from T_var not allowed.";   ps_sh->nl ();
00302   *ps_sh << "void operator= (const " << identifier.c_str () << "_var &);";   ps_sh->nl ();
00303   *ps_sh << "};";   ps_sh->nl ();
00304   ps_sh->decr_indent ();
00305   ps_sh->nl ();
00306   ps_sh->nl ();
00307   *ps_sh << "#endif /* end #if !defined */";   ps_sh->nl ();
00308 
00309   *ps_sh << "TAO_NAMESPACE_STORAGE_CLASS ::CORBA::TypeCode_ptr "
00310          << "_tc_" << identifier.c_str () << ";";   ps_sh->nl ();
00311 }

void TAO_PSDL_Type_Dcl_Visitor::print_for_simple_typedefs ( void   )  [private]

Definition at line 314 of file PSDL_Type_Dcl_Visitor.cpp.

References TAO_PSDL_Node_Visitor::base_type(), ACE_String_Base< CHAR >::c_str(), gen_code_for_si(), TAO_PSDL_Scope::get_sh(), TAO_PSDL_Node_Visitor::identifiers_, TAO_PSDL_Scope::instance(), TAO_PSDL_Stream::nl(), TAO_PSDL_Stream::reset(), ACE_OS::strcmp(), and TAO_PSDL_Node_Visitor::version_for_stub().

Referenced by visit_type_declarator().

00315 {
00316   ACE_CString type;
00317 
00318   // Get the base type of the identifier name
00319   this->base_type (this->identifiers_ [0], type);
00320 
00321   // Get a pointer to PSDL_Stream of the stub header.
00322   TAO_PSDL_Stream *ps_sh = TAO_PSDL_Scope::instance ()->get_sh ();
00323 
00324   if (ACE_OS::strcmp (type.c_str (), "char *") == 0)
00325     {
00326       ps_sh->reset ();
00327       ps_sh->nl ();
00328 
00329       *ps_sh << "typedef " << type.c_str () << " "
00330              << this->identifiers_ [1].c_str () << ";";
00331       }
00332 
00333   ps_sh->nl ();
00334   *ps_sh << "typedef " << this->version_for_stub (type).c_str () << " "
00335          << this->identifiers_[1].c_str ();
00336 
00337   if (ACE_OS::strcmp (type.c_str (), "char *") == 0)
00338     *ps_sh << "_var;";
00339   else
00340     *ps_sh << ";";
00341 
00342   ps_sh->nl ();
00343   *ps_sh << "typedef " << this->version_for_stub (type).c_str () << "_out"
00344          << " " << this->identifiers_[1].c_str () << "_out;";   ps_sh->nl ();
00345   *ps_sh << "TAO_NAMESPACE_STORAGE_CLASS ::CORBA::TypeCode_ptr"
00346          << " _tc_" << this->identifiers_[1].c_str () << ";";   ps_sh->nl ();
00347   ps_sh->nl ();
00348 
00349   // Generates code for the stub implementation files.
00350   this->gen_code_for_si ();
00351 }

int TAO_PSDL_Type_Dcl_Visitor::visit_identifier ( TAO_PSDL_Identifier identifier  )  [virtual]

Reimplemented from TAO_PSDL_Node_Visitor.

Definition at line 18 of file PSDL_Type_Dcl_Visitor.cpp.

References TAO_PSDL_Node_Visitor::count_, TAO_PSDL_Node_Visitor::identifiers_, and TAO_PSDL_Identifier::value().

00019 {
00020   if (this->identifiers_.size () == 0)
00021     {
00022       this->identifiers_.size (1);
00023       this->count_ = 0;
00024     }
00025 
00026   if (this->identifiers_.size () < this->count_ + 1)
00027     this->identifiers_.size (this->count_ + 1);
00028 
00029   this->identifiers_ [this->count_] = identifier->value ();
00030   ++this->count_;
00031 
00032   return 0;
00033 }

int TAO_PSDL_Type_Dcl_Visitor::visit_predefined_type ( TAO_PSDL_Predefined_Type predefined_type  )  [virtual]

Reimplemented from TAO_PSDL_Node_Visitor.

Definition at line 415 of file PSDL_Type_Dcl_Visitor.cpp.

References TAO_PSDL_Node::accept(), TAO_PSDL_Scope::convert_str(), TAO_PSDL_Node_Visitor::count_, TAO_PSDL_Scope::instance(), TAO_PSDL_Node_Visitor::predefined_type_, TAO_PSDL_Predefined_Type::type_of_variable_one(), TAO_PSDL_Predefined_Type::type_of_variable_three(), TAO_PSDL_Predefined_Type::type_of_variable_two(), TAO_PSDL_Predefined_Type::type_one(), TAO_PSDL_Predefined_Type::type_three(), and TAO_PSDL_Predefined_Type::type_two().

00416 {
00417   if (predefined_type->type_one () != 0)
00418     {
00419       this->identifiers_ [this->count_] =
00420         TAO_PSDL_Scope::instance ()->convert_str (predefined_type->type_one ());
00421       if (this->count_ == 0)
00422         {
00423           // @@ implies this is the type.
00424           this->predefined_type_ [this->count_] = 1;
00425         }
00426       ++this->count_;
00427     }
00428 
00429   if (predefined_type->type_two () != 0)
00430     {}
00431 
00432   if (predefined_type->type_three () != 0)
00433     {}
00434 
00435   if (predefined_type->type_of_variable_one () != 0)
00436     {
00437       if (predefined_type->type_of_variable_one ()->accept (this) == -1)
00438         return -1;
00439     }
00440   if (predefined_type->type_of_variable_two () != 0)
00441     {}
00442   if (predefined_type->type_of_variable_three () != 0)
00443     {}
00444   return 0;
00445 }

int TAO_PSDL_Type_Dcl_Visitor::visit_type_declarator ( TAO_PSDL_Type_Declarator node  )  [virtual]

Reimplemented from TAO_PSDL_Node_Visitor.

Definition at line 36 of file PSDL_Type_Dcl_Visitor.cpp.

References TAO_PSDL_Node::accept(), ACE_String_Base< CHAR >::c_str(), TAO_PSDL_Node_Visitor::count_, TAO_PSDL_Type_Declarator::declarators(), TAO_PSDL_Node_Visitor::identifiers_, TAO_PSDL_Node_Visitor::predefined_type_, print_for_sequence_typedefs(), print_for_simple_typedefs(), ACE_OS::strcmp(), and TAO_PSDL_Type_Declarator::type_spec().

00037 {
00038   // Typedefs.
00039   this->count_ = 0;
00040   this->identifiers_.size (2);
00041   this->predefined_type_.size (2);
00042 
00043   this->predefined_type_[this->count_] = 0;
00044 
00045   if (type_declarator->type_spec ()->accept (this) == -1)
00046     return -1;
00047 
00048   if (type_declarator->declarators ()->accept (this) == -1)
00049     return -1;
00050 
00051   ACE_CString type;
00052 
00053   // This flag is used to distinguish between the predefined types and
00054   // types that are typedef'ed before.
00055   if (this->predefined_type_ [0] == 0)
00056     {
00057       if (this->base_type (this->identifiers_[this->count_ -1], type))
00058         {
00059           if (ACE_OS::strcmp (type.c_str (), "struct") != 0)
00060             this->identifiers_[0] = type;
00061         }
00062     }
00063 
00064   // If the typedef is for a sequence of something, the very first
00065   // element is going to be 'sequence' (check visit_predefined_type
00066   // method in this class). We are basing our selection
00067   // based on that.
00068   if (ACE_OS::strcmp (this->identifiers_[0].c_str (), "sequence") != 0)
00069     {
00070       this->print_for_simple_typedefs ();
00071     }
00072   else
00073     this->print_for_sequence_typedefs (this->identifiers_[1],
00074                                        this->identifiers_[2]);
00075 
00076   return 0;
00077 }


The documentation for this class was generated from the following files:
Generated on Tue Feb 2 17:50:40 2010 for TAO_PSS by  doxygen 1.4.7