PSDL_Interface_Visitor.cpp

Go to the documentation of this file.
00001 #include "PSDL_Interface_Visitor.h"
00002 #include "PSDL_Stream.h"
00003 
00004 ACE_RCSID (PSS,
00005            PSDL_Interface_Visitor,
00006            "PSDL_Interface_Visitor.cpp,v 1.7 2005/10/04 11:38:19 jwillemsen Exp")
00007 
00008 TAO_PSDL_Interface_Visitor::TAO_PSDL_Interface_Visitor (void)
00009   : forward_dcl_ (0),
00010     interface_name_ ()
00011 {
00012   // constructor.
00013 }
00014 
00015 TAO_PSDL_Interface_Visitor::~TAO_PSDL_Interface_Visitor (void)
00016 {
00017   // destructor.
00018 }
00019 
00020 int
00021 TAO_PSDL_Interface_Visitor::visit_identifier (TAO_PSDL_Identifier *identifier)
00022 {
00023   this->identifiers_.size (1);
00024   this->count_ = 0;
00025 
00026   // Save the identifier.
00027   this->identifiers_ [this->count_] = identifier->value ();
00028 
00029   return 0;
00030 }
00031 
00032 int
00033 TAO_PSDL_Interface_Visitor::visit_forward_dcl (TAO_PSDL_Forward_Dcl *forward_dcl)
00034 {
00035   if (forward_dcl->identifier ()->accept (this) == -1)
00036     return -1;
00037 
00038   this->interface_name_ = this->identifiers_[this->count_];
00039 
00040   // Get a pointer to PSDL_Stream of the stub header.
00041   TAO_PSDL_Stream *ps_sh = TAO_PSDL_Scope::instance ()->get_sh ();
00042 
00043   ps_sh->reset ();
00044 
00045   *ps_sh << "class " << this->interface_name_ << ";";
00046   ps_sh->nl ();
00047 
00048   this->forward_dcl_ = 1;
00049   this->print_for_forward_dcl ();
00050 
00051   return 0;
00052 }
00053 
00054 int
00055 TAO_PSDL_Interface_Visitor::visit_interface_dcl (TAO_PSDL_Interface_Dcl *interface_dcl)
00056 {
00057   if (interface_dcl->interface_header ()->accept (this) == -1)
00058     return -1;
00059 
00060   if (interface_dcl->interface_body () != 0)
00061     {
00062       if (interface_dcl->interface_body ()->accept (this) == -1)
00063         return -1;
00064     }
00065 
00066   // The generated code for interfaces.
00067   this->print_end_for_interface ();
00068   return 0;
00069 }
00070 
00071 int
00072 TAO_PSDL_Interface_Visitor::visit_interface_header (TAO_PSDL_Interface_Header *interface_header)
00073 {
00074   if (interface_header->identifier ()->accept (this) == -1)
00075     return -1;
00076 
00077   this->interface_name_ = this->identifiers_[this->count_];
00078   TAO_PSDL_Scope::instance ()->set_interface_name (this->interface_name_);
00079   this->print_class_for_interface ();
00080 
00081   if (interface_header->type () != 0)
00082     {
00083       if (interface_header->type ()->accept (this) == -1)
00084         return -1;
00085     }
00086 
00087   if (interface_header->interface_inheritance_spec () != 0)
00088     {
00089       if (interface_header->interface_inheritance_spec ()->accept (this) == -1)
00090         return -1;
00091     }
00092 
00093   return 0;
00094 }
00095 
00096 void
00097 TAO_PSDL_Interface_Visitor::print_for_forward_dcl (void)
00098 {
00099   // Get a pointer to PSDL_Stream of the stub header.
00100   TAO_PSDL_Stream *ps_sh = TAO_PSDL_Scope::instance ()->get_sh ();
00101 
00102   ps_sh->reset ();
00103 
00104   ps_sh->nl ();
00105 
00106   ACE_CString name_space = TAO_PSDL_Scope::instance ()->get_name_space ();
00107 
00108   *ps_sh << "#if !defined (_" << name_space << "_" << this->interface_name_
00109          << "___PTR_CH_)";  ps_sh->nl ();
00110 
00111   *ps_sh << "#define _" << name_space << "_"
00112          << this->interface_name_ << "___PTR_CH_";
00113 
00114   ps_sh->nl ();
00115   ps_sh->nl ();
00116 
00117   if (this->forward_dcl_ != 1)
00118     {
00119       *ps_sh << "class " << this->interface_name_ << ";";  ps_sh->nl ();
00120     }
00121 
00122   *ps_sh << "typedef " << this->interface_name_ << "*"
00123          << this->interface_name_ << "_ptr;";
00124   ps_sh->nl ();
00125   ps_sh->nl ();
00126 
00127   *ps_sh << "#endif /* end #if !defined */" << "\n\n";  ps_sh->nl ();
00128 
00129   *ps_sh << "#if !defined (_" << name_space << "_"
00130          << this->interface_name_ << "___VAR_CH_)";
00131   ps_sh->nl ();
00132 
00133   *ps_sh << "#define _" << name_space << "_"
00134          << this->interface_name_ << "___VAR_CH_";
00135   ps_sh->nl ();
00136   ps_sh->nl ();
00137 
00138   *ps_sh << "class " << this->interface_name_.c_str ()
00139          << "_var : public TAO_Base_Var";  ps_sh->nl ();
00140 
00141   *ps_sh << "{";
00142   ps_sh->nl ();
00143   ps_sh->incr_indent (0);
00144 
00145   *ps_sh << "public:";
00146   ps_sh->nl ();
00147 
00148   *ps_sh  <<  this->interface_name_ << "_var (void);"
00149           << "// default constructor";
00150   ps_sh->nl ();
00151 
00152   *ps_sh  <<  this->interface_name_ << "_var (" << this->interface_name_
00153           << "_ptr p) : ptr_ (p) {}";
00154   ps_sh->nl ();
00155 
00156   *ps_sh  <<  this->interface_name_ << "_var (const "
00157           << this->interface_name_
00158           << "_var &);" << "// copy constructor";
00159   ps_sh->nl ();
00160 
00161   *ps_sh << " ~" << this->interface_name_ << "_var (void"
00162          << "); // destructor";
00163   ps_sh->nl ();
00164   ps_sh->nl ();
00165 
00166   *ps_sh << this->interface_name_ << "_var"
00167          << "&operator= (" << this->interface_name_
00168          << "_ptr);";  ps_sh->nl ();
00169 
00170   *ps_sh  << this->interface_name_ << "_var"
00171           << "&operator= (const " << this->interface_name_
00172           << "_var &);";
00173   ps_sh->nl ();
00174 
00175   *ps_sh  << this->interface_name_
00176           << "_ptr operator-> (void) const;";
00177   ps_sh->nl ();
00178   ps_sh->nl ();
00179 
00180   *ps_sh << "operator const "
00181          << this->interface_name_ << "_ptr &() const;";  ps_sh->nl ();
00182 
00183   *ps_sh << "operator "
00184          << this->interface_name_ << "_ptr &();";
00185 
00186   ps_sh->nl ();
00187   ps_sh->nl ();
00188 
00189   *ps_sh << "// in, inout, out, _retn";  ps_sh->nl ();
00190 
00191   *ps_sh << this->interface_name_ << "_ptr in (void) const;";
00192   ps_sh->nl ();
00193 
00194   *ps_sh << this->interface_name_ << "_ptr &inout (void);";
00195   ps_sh->nl ();
00196 
00197   *ps_sh << this->interface_name_ << "_ptr &out (void);";
00198   ps_sh->nl ();
00199 
00200   *ps_sh << this->interface_name_ << "_ptr _retn (void);";
00201   ps_sh->nl ();
00202 
00203   *ps_sh <<  this->interface_name_ << "_ptr ptr (void) const;";
00204   ps_sh->nl ();
00205   ps_sh->nl ();
00206 
00207   *ps_sh << "// Hooks used by template sequence and object manager classes";
00208   ps_sh->nl ();
00209 
00210   *ps_sh << "// for non-defined forward declared interfaces.";  ps_sh->nl ();
00211 
00212   *ps_sh << "static " << this->interface_name_ << "_ptr tao_duplicate ("
00213          << this->interface_name_ << "_ptr);";
00214   ps_sh->nl ();
00215 
00216   *ps_sh << "static void tao_release ("
00217          << this->interface_name_ << "_ptr);";
00218   ps_sh->nl ();
00219 
00220   *ps_sh << "static " << this->interface_name_
00221          << "_ptr tao_nil (void);";  ps_sh->nl ();
00222 
00223   *ps_sh << "static " << this->interface_name_ << "_ptr tao_narrow (";
00224   ps_sh->incr_indent (0);
00225   ps_sh->nl ();
00226 
00227   *ps_sh << "CORBA::Object *";
00228   ps_sh->nl ();
00229   *ps_sh << "ACE_ENV_ARG_DECL_NOT_USED";
00230 
00231   ps_sh->decr_indent (0);
00232   ps_sh->nl ();
00233 
00234   *ps_sh << ");";
00235   ps_sh->nl ();
00236 
00237   *ps_sh << "static CORBA::Object * tao_upcast (void *);";
00238 
00239   ps_sh->reset ();
00240   ps_sh->nl ();
00241   ps_sh->nl ();
00242 
00243   *ps_sh << "private:";
00244   ps_sh->incr_indent (0);
00245   ps_sh->nl ();
00246 
00247   *ps_sh << this->interface_name_ << "_ptr ptr_;";
00248   ps_sh->nl ();
00249 
00250   *ps_sh << "// Unimplemented - prevents widening assignment.";
00251   ps_sh->nl ();
00252 
00253   *ps_sh << this->interface_name_ << "_var (const TAO_Base_var &rhs);";
00254   ps_sh->nl ();
00255 
00256   *ps_sh << this->interface_name_
00257          << "_var &operator= (const TAO_Base_var &rhs);";
00258   ps_sh->nl ();
00259 
00260   ps_sh->decr_indent (0);
00261   ps_sh->nl ();
00262 
00263   *ps_sh << "};";
00264   ps_sh->nl ();
00265 
00266   *ps_sh << "#endif /* end #if !defined */";
00267   ps_sh->nl ();
00268   ps_sh->nl ();
00269 
00270   ps_sh->reset ();
00271 
00272   *ps_sh << "#if !defined (_" << name_space
00273          << "_" << this->interface_name_ << "___OUT_CH_)";
00274   ps_sh->nl ();
00275 
00276   *ps_sh << "#define _" << name_space
00277          << "_" << this->interface_name_ << "___OUT_CH_";
00278   ps_sh->nl ();
00279   ps_sh->nl ();
00280 
00281   *ps_sh << "class  " << this->interface_name_ << "_out";  ps_sh->nl ();
00282   *ps_sh << "{";
00283   ps_sh->nl ();
00284   ps_sh->incr_indent (0);
00285 
00286   *ps_sh << "public:";  ps_sh->nl ();
00287   *ps_sh << this->interface_name_ << "_out (" << this->interface_name_
00288          << "_ptr &);";  ps_sh->nl ();
00289   *ps_sh << this->interface_name_ << "_out (" << this->interface_name_
00290          << "_var &);";  ps_sh->nl ();
00291   *ps_sh << this->interface_name_ << "_out (const "
00292          << this->interface_name_ << "_out &);";  ps_sh->nl ();
00293   *ps_sh << this->interface_name_ << "_out &operator= (const "
00294          << this->interface_name_ << "_out &);";  ps_sh->nl ();
00295   *ps_sh << this->interface_name_ << "_out &operator= (const "
00296          << this->interface_name_ << "_var &);";  ps_sh->nl ();
00297   *ps_sh << this->interface_name_ << "_out &operator= ("
00298          << this->interface_name_ << "_ptr);";  ps_sh->nl ();
00299   *ps_sh << "operator " << this->interface_name_ << "_ptr &();";  ps_sh->nl ();
00300   *ps_sh << this->interface_name_ << "_ptr &ptr (void);";  ps_sh->nl ();
00301 
00302   *ps_sh << this->interface_name_ << "_ptr operator-> (void);";
00303 
00304   ps_sh->reset ();
00305   ps_sh->nl ();
00306   ps_sh->nl ();
00307 
00308   *ps_sh << "private:";
00309   ps_sh->incr_indent (0);
00310   ps_sh->nl ();
00311   *ps_sh << this->interface_name_ << "_ptr &ptr_;";  ps_sh->nl ();
00312 
00313   ps_sh->decr_indent (0);
00314   ps_sh->nl ();
00315 
00316   *ps_sh << "};\n";
00317 
00318   *ps_sh << "#endif /* end #if !defined */";
00319 
00320   ps_sh->reset ();
00321 
00322   ps_sh->nl ();
00323   ps_sh->nl ();
00324 
00325 
00326   *ps_sh << "// External declarations for undefined interface";
00327   ps_sh->nl ();
00328   *ps_sh << "//" << this->interface_name_;
00329   ps_sh->nl ();
00330   ps_sh->nl ();
00331 
00332   *ps_sh << this->interface_name_ << "_ptr";
00333   ps_sh->nl ();
00334 
00335   *ps_sh << "tao_" << this->interface_name_ << "_duplicate (";
00336   ps_sh->incr_indent (0);
00337   ps_sh->nl ();
00338 
00339   *ps_sh << this->interface_name_ << "_ptr";
00340 
00341   ps_sh->decr_indent (0);
00342   ps_sh->nl ();
00343   *ps_sh << ");";
00344 
00345   ps_sh->nl ();
00346   ps_sh->nl ();
00347 
00348   *ps_sh << "void";
00349   ps_sh->nl ();
00350   *ps_sh << "tao_" << this->interface_name_ << "_release (";
00351   ps_sh->incr_indent (0);
00352   ps_sh->nl ();
00353   *ps_sh << this->interface_name_ << "_ptr";
00354   ps_sh->decr_indent (0);
00355   ps_sh->nl ();
00356   *ps_sh << ");";
00357 
00358   ps_sh->nl ();
00359   ps_sh->nl ();
00360 
00361   *ps_sh << this->interface_name_ << "_ptr";
00362   ps_sh->nl ();
00363 
00364   *ps_sh << "tao_" << this->interface_name_ << "_nil (";
00365   ps_sh->incr_indent (0);
00366   ps_sh->nl ();
00367   *ps_sh << "void";
00368   ps_sh->decr_indent (0);
00369   ps_sh->nl ();
00370   *ps_sh << ");";
00371 
00372   ps_sh->nl ();
00373   ps_sh->nl ();
00374 
00375   *ps_sh << this->interface_name_ << "_ptr";
00376   ps_sh->nl ();
00377 
00378   *ps_sh << "tao_" << this->interface_name_ << "_narrow (";
00379   ps_sh->incr_indent (0);
00380   ps_sh->nl ();
00381 
00382   *ps_sh << "CORBA::Object *";
00383   ps_sh->nl ();
00384 
00385   *ps_sh << "ACE_ENV_ARG_DECL_NOT_USED";
00386 
00387   ps_sh->decr_indent (0);
00388   ps_sh->nl ();
00389   *ps_sh << ");";
00390 
00391   ps_sh->nl ();
00392   ps_sh->nl ();
00393 
00394   *ps_sh << "CORBA::Object *";
00395   ps_sh->nl ();
00396   *ps_sh << "tao_" << this->interface_name_ << "_upcast (";
00397   ps_sh->incr_indent (0);
00398   ps_sh->nl ();
00399   *ps_sh << "void *";
00400   ps_sh->decr_indent (0);
00401   ps_sh->nl ();
00402   *ps_sh << ");";
00403 
00404   ps_sh->nl ();
00405   ps_sh->nl ();
00406 
00407   *ps_sh << "// Any operators for interface " << this->interface_name_;
00408   ps_sh->nl ();
00409 
00410   *ps_sh << "void operator<<= (CORBA::Any &, " << this->interface_name_ << "_ptr);";
00411   ps_sh->nl ();
00412 
00413   *ps_sh << "CORBA::Boolean operator>>= (const CORBA::Any &, " << this->interface_name_ << " *&);";
00414   ps_sh->nl ();
00415   ps_sh->nl ();
00416   *ps_sh << "#ifndef __ACE_INLINE__";
00417   ps_sh->nl ();
00418   ps_sh->nl ();
00419 
00420   *ps_sh << " CORBA::Boolean operator<< (TAO_OutputCDR &, const " << this->interface_name_ << "_ptr );";
00421   ps_sh->nl ();
00422   *ps_sh << " CORBA::Boolean operator>> (TAO_InputCDR &, " << this->interface_name_ << "_ptr &);";
00423   ps_sh->nl ();
00424   ps_sh->nl ();
00425   *ps_sh << "#endif /* __ACE_INLINE__ */";
00426   ps_sh->nl ();
00427 
00428 }
00429 
00430 void
00431 TAO_PSDL_Interface_Visitor::print_class_for_interface (void)
00432 {
00433   this->print_for_forward_dcl ();
00434 
00435   ACE_CString name_space = TAO_PSDL_Scope::instance ()->get_name_space ();
00436 
00437   // Get a pointer to PSDL_Stream of the stub header.
00438   TAO_PSDL_Stream *ps_sh = TAO_PSDL_Scope::instance ()->get_sh ();
00439 
00440   *ps_sh << "#if !defined (_" << name_space << "_" << this->interface_name_
00441          << "_CH_)";  ps_sh->nl ();
00442   *ps_sh << "#define _" << name_space << this->interface_name_
00443          << "_CH_";  ps_sh->nl ();
00444 
00445   *ps_sh << "// Forward Classes Declaration.";  ps_sh->nl ();
00446   *ps_sh << "class _TAO_" << this->interface_name_ << "_Proxy_Impl;";  ps_sh->nl ();
00447   *ps_sh << "class _TAO_" << this->interface_name_ << "_Remote_Proxy_Impl;";  ps_sh->nl ();
00448   *ps_sh << "class _TAO_" << this->interface_name_ << "_Proxy_Broker;";  ps_sh->nl ();
00449   *ps_sh << "class _TAO_" << this->interface_name_ << "_Remote_Proxy_Broker;";  ps_sh->nl ();
00450 
00451 
00452   *ps_sh << "class  " << this->interface_name_;
00453   *ps_sh << ": public virtual CORBA::Object";  ps_sh->nl ();
00454 
00455   *ps_sh << "{";
00456   ps_sh->nl ();
00457   ps_sh->incr_indent (0);
00458 
00459   *ps_sh << "public:";  ps_sh->nl ();
00460 
00461   *ps_sh << "typedef " << this->interface_name_ << "_ptr _ptr_type;";  ps_sh->nl ();
00462   *ps_sh << "typedef " << this->interface_name_ << "_var _var_type;";  ps_sh->nl ();
00463 
00464   *ps_sh << "static int _tao_class_id;";  ps_sh->nl ();
00465 
00466   *ps_sh << "// The static operations.";  ps_sh->nl ();
00467   *ps_sh << "static " << this->interface_name_
00468          << "_ptr _duplicate ("
00469          << this->interface_name_ << "_ptr obj);"
00470     ;
00471 
00472   *ps_sh << "static " << this->interface_name_ << "_ptr _narrow (";  ps_sh->nl ();
00473   *ps_sh << "CORBA::Object_ptr obj";  ps_sh->nl ();
00474   *ps_sh << "ACE_ENV_ARG_DECL_WITH_DEFAULTS";  ps_sh->nl ();
00475   *ps_sh << ");";  ps_sh->nl ();
00476 
00477   *ps_sh << "static " << this->interface_name_
00478          << "_ptr _unchecked_narrow (";  ps_sh->nl ();
00479   *ps_sh << "CORBA::Object_ptr obj";  ps_sh->nl ();
00480   *ps_sh << "ACE_ENV_ARG_DECL_WITH_DEFAULTS";  ps_sh->nl ();
00481   *ps_sh << ");";  ps_sh->nl ();
00482 
00483   *ps_sh << "static " << this->interface_name_ << "_ptr _nil (void)";  ps_sh->nl ();
00484   *ps_sh << "{";  ps_sh->nl ();
00485   *ps_sh << "return (" << this->interface_name_ << "_ptr)0;";
00486 
00487   ps_sh->decr_indent (0);
00488   ps_sh->nl ();
00489 
00490   *ps_sh << "}";  ps_sh->nl ();
00491 
00492   *ps_sh << "static void _tao_any_destructor (void*);";  ps_sh->nl ();
00493 
00494 
00495 }
00496 
00497 void
00498 TAO_PSDL_Interface_Visitor::print_end_for_interface (void)
00499 {
00500   ACE_CString name_space = TAO_PSDL_Scope::instance ()->get_name_space ();
00501 
00502   // Get a pointer to PSDL_Stream of the stub header.
00503   TAO_PSDL_Stream *ps_sh = TAO_PSDL_Scope::instance ()->get_sh ();
00504 
00505   *ps_sh << "virtual CORBA::Boolean _is_a (";  ps_sh->nl ();
00506   *ps_sh << "const CORBA::Char *type_id";  ps_sh->nl ();
00507   *ps_sh << "ACE_ENV_ARG_DECL_WITH_DEFAULTS";  ps_sh->nl ();
00508   *ps_sh << ");";  ps_sh->nl ();
00509 
00510   *ps_sh << "virtual void *_tao_QueryInterface (ptrdiff_t type);";  ps_sh->nl ();
00511 
00512   *ps_sh << "virtual const char* _interface_repository_id (void) const;";  ps_sh->nl ();
00513 
00514   *ps_sh << "private:";  ps_sh->nl ();
00515   *ps_sh << "_TAO_" << this->interface_name_ << "_Proxy_Broker *the_TAO_" << this->interface_name_ << "_Proxy_Broker_;";  ps_sh->nl ();
00516 
00517   *ps_sh << "protected:";  ps_sh->nl ();
00518   *ps_sh << this->interface_name_ << "(int collocated = 0);";  ps_sh->nl ();
00519 
00520   *ps_sh << "// These methods travese the inheritance tree and set the";  ps_sh->nl ();
00521   *ps_sh << "// parents piece of the given class in the right mode";  ps_sh->nl ();
00522   *ps_sh << "virtual void " << name_space << "_" << this->interface_name_
00523          << "_setup_collocation (int collocated);";  ps_sh->nl ();
00524 
00525   *ps_sh << this->interface_name_ << "(";  ps_sh->nl ();
00526   *ps_sh << "TAO_Stub *objref, ";  ps_sh->nl ();
00527   *ps_sh << "CORBA::Boolean _tao_collocated = 0,";  ps_sh->nl ();
00528   *ps_sh << "TAO_Abstract_ServantBase *servant = 0";  ps_sh->nl ();
00529   *ps_sh << ");";  ps_sh->nl ();
00530 
00531   *ps_sh << "friend class _TAO_" << this->interface_name_ << "_Remote_Proxy_Impl;";  ps_sh->nl ();
00532   *ps_sh << "friend class _TAO_" << this->interface_name_ << "_ThruPOA_Proxy_Impl;";  ps_sh->nl ();
00533   *ps_sh << "friend class _TAO_" << this->interface_name_ << "_Direct_Proxy_Impl;";  ps_sh->nl ();
00534 
00535   *ps_sh << "virtual ~" << this->interface_name_ << "(void);";  ps_sh->nl ();
00536 
00537   *ps_sh << "private:";  ps_sh->nl ();
00538   *ps_sh << this->interface_name_ << "(const " << this->interface_name_ << "&);";  ps_sh->nl ();
00539   *ps_sh << "void operator= (const " << this->interface_name_ << "&);";  ps_sh->nl ();
00540   *ps_sh << "};";  ps_sh->nl ();
00541 
00542   *ps_sh << "// The Proxy Implementations are used by each interface to";  ps_sh->nl ();
00543   *ps_sh << "// perform a call. Each different implementation encapsulate";  ps_sh->nl ();
00544   *ps_sh << "// an invocation logics.";  ps_sh->nl ();
00545 
00546 
00547   *ps_sh << "///////////////////////////////////////////////////////////////////////";  ps_sh->nl ();
00548   *ps_sh << "//                    Base Proxy Impl. Declaration";  ps_sh->nl ();
00549   *ps_sh << "//";  ps_sh->nl ();
00550 
00551   *ps_sh << "class  _TAO_" << this->interface_name_ << "_Proxy_Impl";  ps_sh->nl ();
00552   *ps_sh << ": public virtual TAO_Object_Proxy_Impl";  ps_sh->nl ();
00553 
00554   *ps_sh << "{";
00555   ps_sh->nl ();
00556   ps_sh->incr_indent (0);
00557 
00558   *ps_sh << "public:";  ps_sh->nl ();
00559   *ps_sh << "virtual ~_TAO_" << this->interface_name_ << "_Proxy_Impl (void) { }";  ps_sh->nl ();
00560 
00561   *ps_sh << "protected:";  ps_sh->nl ();
00562   *ps_sh << "_TAO_" << this->interface_name_ << "_Proxy_Impl (void);";  ps_sh->nl ();
00563   *ps_sh << "};";  ps_sh->nl ();
00564 
00565   *ps_sh << "//";  ps_sh->nl ();
00566   *ps_sh << "//               End Base Proxy Impl. Declaration";  ps_sh->nl ();
00567   *ps_sh << "///////////////////////////////////////////////////////////////////////";  ps_sh->nl ();
00568 
00569 
00570   *ps_sh << "///////////////////////////////////////////////////////////////////////";  ps_sh->nl ();
00571   *ps_sh << "//                Remote Proxy Impl. Declaration";  ps_sh->nl ();
00572   *ps_sh << "//";  ps_sh->nl ();
00573 
00574   *ps_sh << "class  _TAO_" << this->interface_name_ << "_Remote_Proxy_Impl";  ps_sh->nl ();
00575   *ps_sh << ": public virtual _TAO_" << this->interface_name_ << "_Proxy_Impl,";  ps_sh->nl ();
00576   *ps_sh << "public virtual TAO_Remote_Object_Proxy_Impl";  ps_sh->nl ();
00577 
00578   *ps_sh << "{";
00579   ps_sh->nl ();
00580   ps_sh->incr_indent (0);
00581 
00582   *ps_sh << "public:";
00583   ps_sh->nl ();
00584 
00585   *ps_sh << "_TAO_" << this->interface_name_
00586          << "_Remote_Proxy_Impl (void);";
00587   ps_sh->nl ();
00588 
00589   *ps_sh << "virtual ~_TAO_" << this->interface_name_
00590          << "_Remote_Proxy_Impl (void) { }";
00591 
00592   ps_sh->decr_indent (0);
00593   ps_sh->nl ();
00594 
00595   *ps_sh << "};";  ps_sh->nl ();
00596 
00597   *ps_sh << "//";  ps_sh->nl ();
00598   *ps_sh << "//             End Remote Proxy Impl. Declaration";  ps_sh->nl ();
00599   *ps_sh << "///////////////////////////////////////////////////////////////////////";  ps_sh->nl ();
00600 
00601   *ps_sh << "// The Proxy Brokers are used by each interface to get";  ps_sh->nl ();
00602   *ps_sh << "// the right proxy for performing a call. In the new ";  ps_sh->nl ();
00603   *ps_sh << "// collocation scheme, the proxy to be used can vary on";  ps_sh->nl ();
00604   *ps_sh << "// a call by call basis.";  ps_sh->nl ();
00605 
00606 
00607   *ps_sh << "///////////////////////////////////////////////////////////////////////";  ps_sh->nl ();
00608   *ps_sh << "//                 Base Proxy Broker Declaration ";  ps_sh->nl ();
00609   *ps_sh << "//";  ps_sh->nl ();
00610 
00611   *ps_sh << "class  _TAO_" << this->interface_name_ << "_Proxy_Broker";
00612   ps_sh->nl ();
00613 
00614   *ps_sh << "{";
00615   ps_sh->incr_indent (0);
00616   ps_sh->nl ();
00617 
00618   *ps_sh << "public:";
00619   ps_sh->nl ();
00620   *ps_sh << "virtual ~_TAO_" << this->interface_name_ << "_Proxy_Broker (void);";  ps_sh->nl ();
00621   *ps_sh << "virtual _TAO_" << this->interface_name_ << "_Proxy_Impl &select_proxy (";  ps_sh->nl ();
00622   *ps_sh << this->interface_name_ << "*object";  ps_sh->nl ();
00623   *ps_sh << "ACE_ENV_ARG_DECL_WITH_DEFAULTS";  ps_sh->nl ();
00624   *ps_sh << ") = 0;";  ps_sh->nl ();
00625 
00626   *ps_sh << "protected:";  ps_sh->nl ();
00627   *ps_sh << "_TAO_" << this->interface_name_ << "_Proxy_Broker (void);";
00628   ps_sh->nl ();
00629 
00630   *ps_sh << "};";  ps_sh->nl ();
00631 
00632   *ps_sh << "//";  ps_sh->nl ();
00633   *ps_sh << "//              End Base Proxy Broker Declaration ";  ps_sh->nl ();
00634   *ps_sh << "///////////////////////////////////////////////////////////////";
00635   ps_sh->nl ();
00636 
00637 
00638   *ps_sh << "///////////////////////////////////////////////////////////////";
00639   ps_sh->nl ();
00640   *ps_sh << "//                 Remote Proxy Broker Declaration ";
00641   ps_sh->nl ();
00642   *ps_sh << "//";
00643   ps_sh->nl ();
00644 
00645   *ps_sh << "class  _TAO_" << this->interface_name_ << "_Remote_Proxy_Broker";
00646   ps_sh->nl ();
00647   *ps_sh << ": public virtual _TAO_" << this->interface_name_
00648          << "_Proxy_Broker";
00649   ps_sh->nl ();
00650 
00651   *ps_sh << "{";
00652   ps_sh->incr_indent (0);
00653   ps_sh->nl ();
00654 
00655   *ps_sh << "public: ";  ps_sh->nl ();
00656   *ps_sh << "_TAO_" << this->interface_name_ << "_Remote_Proxy_Broker (void);";  ps_sh->nl ();
00657 
00658   *ps_sh << "virtual ~_TAO_" << this->interface_name_ << "_Remote_Proxy_Broker (void);";  ps_sh->nl ();
00659 
00660   *ps_sh << "virtual _TAO_" << this->interface_name_ << "_Proxy_Impl &select_proxy (";  ps_sh->nl ();
00661   *ps_sh << this->interface_name_ << "*object";  ps_sh->nl ();
00662   *ps_sh << "ACE_ENV_ARG_DECL";  ps_sh->nl ();
00663   *ps_sh << ");";  ps_sh->nl ();
00664 
00665   *ps_sh << "private:";  ps_sh->nl ();
00666   *ps_sh << "_TAO_" << this->interface_name_ << "_Remote_Proxy_Impl remote_proxy_impl_;";  ps_sh->nl ();
00667 
00668   *ps_sh << "public:";  ps_sh->nl ();
00669   *ps_sh << "// This member function is used to get an handle to the unique instance";  ps_sh->nl ();
00670   *ps_sh << "// of the Remote Proxy Broker that is available for a given";  ps_sh->nl ();
00671   *ps_sh << "// interface.";  ps_sh->nl ();
00672   *ps_sh << "static _TAO_" << this->interface_name_ << "_Remote_Proxy_Broker *the_TAO_" << this->interface_name_ << "_Remote_Proxy_Broker (void);";  ps_sh->nl ();
00673   *ps_sh << "};";  ps_sh->nl ();
00674 
00675   *ps_sh << "//";  ps_sh->nl ();
00676   *ps_sh << "//              End Remote Proxy Broker Declaration ";  ps_sh->nl ();
00677   *ps_sh << "//////////////////////////////////////////////////////////////";
00678   ps_sh->nl ();
00679 
00680   *ps_sh << "#endif /* end #if !defined */";  ps_sh->nl ();
00681 
00682   *ps_sh << "TAO_NAMESPACE_STORAGE_CLASS ::CORBA::TypeCode_ptr _tc_"
00683          << this->interface_name_ << ";";
00684   ps_sh->nl ();
00685 }
00686 
00687 void
00688 TAO_PSDL_Interface_Visitor::gen_code_for_si (void)
00689 {
00690   TAO_PSDL_Stream *ps_si = TAO_PSDL_Scope::instance ()->get_si ();
00691 
00692   ps_si->reset ();
00693   ps_si->indent (); // start from current indentation level
00694 
00695   *ps_si << "int " << this->interface_name_ << "::_tao_class_id = 0;";
00696   ps_si->nl ();
00697   ps_si->nl ();
00698 
00699   *ps_si << this->interface_name_ << "_ptr";
00700   ps_si->nl ();
00701   *ps_si << "tao_" << this->interface_name_ << "_duplicate (";
00702   ps_si->incr_indent (0);
00703   ps_si->nl ();
00704   *ps_si << this->interface_name_ << "_ptr p";
00705   ps_si->nl ();
00706   *ps_si << ")";
00707   ps_si->decr_indent (0);
00708   ps_si->nl ();
00709   *ps_si << "{";
00710   ps_si->incr_indent (0);
00711   ps_si->nl ();
00712   *ps_si << "return " << this->interface_name_ << "::_duplicate (p);";
00713   ps_si->decr_indent (0);
00714   ps_si->nl ();
00715   *ps_si << "}";
00716   ps_si->nl ();
00717 
00718   ps_si->nl ();
00719 
00720   *ps_si << "void";
00721   ps_si->nl ();
00722 
00723   *ps_si << "tao_" << this->interface_name_ << "_release (";
00724   ps_si->incr_indent (0);
00725   ps_si->nl ();
00726 
00727   *ps_si << this->interface_name_ << "_ptr p";
00728   ps_si->nl ();
00729 
00730   *ps_si << ")";
00731   ps_si->decr_indent (0);
00732   ps_si->nl ();
00733   *ps_si << "{";
00734 
00735   ps_si->incr_indent (0);
00736   ps_si->nl ();
00737   *ps_si << "CORBA::release (p);";
00738   ps_si->decr_indent (0);
00739   ps_si->nl ();
00740   *ps_si << "}";
00741 
00742   ps_si->nl ();
00743   ps_si->nl ();
00744 
00745   *ps_si << this->interface_name_ << "_ptr";
00746   ps_si->nl ();
00747   *ps_si << "tao_" << this->interface_name_ << "_nil (";
00748   ps_si->incr_indent (0);
00749   ps_si->nl ();
00750   *ps_si << "void";
00751   ps_si->nl ();
00752   *ps_si << ")";
00753   ps_si->decr_indent (0);
00754   ps_si->nl ();
00755   *ps_si << "{";
00756   ps_si->incr_indent (0);
00757   ps_si->nl ();
00758   *ps_si << "return " << this->interface_name_ << "::_nil ();";
00759   ps_si->decr_indent (0);
00760   ps_si->nl ();
00761   *ps_si << "}";
00762   ps_si->nl ();
00763 
00764   ps_si->nl ();
00765 
00766   *ps_si << this->interface_name_ << "_ptr";
00767   ps_si->nl ();
00768   *ps_si << "tao_" << this->interface_name_ << "_narrow (";
00769   ps_si->incr_indent (0);
00770   ps_si->nl ();
00771   *ps_si << "CORBA::Object *p";
00772   ps_si->nl ();
00773 
00774   *ps_si << "ACE_ENV_ARG_DECL";   ps_si->nl ();
00775   *ps_si << ")";
00776   ps_si->decr_indent (0);
00777   ps_si->nl ();
00778   *ps_si << "{";
00779 
00780   ps_si->incr_indent (0);
00781   ps_si->nl ();
00782 
00783   *ps_si << "return " << this->interface_name_
00784          << "::_narrow (p ACE_ENV_ARG_PARAMETER);";
00785   ps_si->decr_indent (0);
00786   ps_si->nl ();
00787   *ps_si << "}";
00788 
00789   ps_si->nl ();
00790   ps_si->nl ();
00791 
00792   *ps_si << "CORBA::Object *";   ps_si->nl ();
00793   *ps_si << "tao_" << this->interface_name_ << "_upcast (";
00794 
00795   ps_si->incr_indent (0);
00796   ps_si->nl ();
00797 
00798   *ps_si << "void *src";   ps_si->nl ();
00799   *ps_si << ")";
00800   ps_si->decr_indent (0);
00801   ps_si->nl ();
00802 
00803   *ps_si << "{";
00804   ps_si->incr_indent (0);
00805   ps_si->nl ();
00806 
00807   *ps_si << this->interface_name_ << " **tmp =";
00808   ps_si->incr_indent (0);
00809   ps_si->nl ();
00810   *ps_si << "ACE_static_cast (" << this->interface_name_ << " **, src);";
00811   ps_si->decr_indent (0);
00812   ps_si->nl ();
00813   *ps_si << "return *tmp;";
00814   ps_si->decr_indent (0);
00815   ps_si->nl ();
00816   *ps_si << "}";
00817 
00818   ps_si->nl ();
00819   ps_si->nl ();
00820 
00821   *ps_si << "// ***********************************************************";
00822   ps_si->nl ();
00823   *ps_si << "// " << this->interface_name_ << "_var";   ps_si->nl ();
00824   *ps_si << "// ***********************************************************";
00825 
00826   ps_si->nl ();
00827   ps_si->nl ();
00828 
00829   *ps_si << this->interface_name_ << "_var::"
00830          << this->interface_name_
00831          << "_var (void) // default constructor";
00832 
00833   ps_si->incr_indent (0);
00834   ps_si->nl ();
00835   *ps_si << ": ptr_ (" << this->interface_name_ << "::_nil ())";
00836 
00837   ps_si->decr_indent (0);
00838   ps_si->nl ();
00839   *ps_si << "{}";
00840 
00841   ps_si->nl ();
00842   ps_si->nl ();
00843 
00844   *ps_si << "::" << this->interface_name_ << "_ptr";   ps_si->nl ();
00845   *ps_si << this->interface_name_ << "_var::ptr (void) const";   ps_si->nl ();
00846 
00847   *ps_si << "{";
00848   ps_si->incr_indent (0);
00849   ps_si->nl ();
00850   *ps_si << "return this->ptr_;";
00851 
00852   ps_si->decr_indent (0);
00853   ps_si->nl ();
00854   *ps_si << "}";
00855 
00856   ps_si->nl ();
00857   ps_si->nl ();
00858 
00859   *ps_si << this->interface_name_ << "_var::"
00860          << this->interface_name_ << "_var (const ::"
00861          << this->interface_name_ << "_var &p) // copy constructor";
00862 
00863   ps_si->incr_indent (0);
00864   ps_si->nl ();
00865   *ps_si << ": TAO_Base_var (),";
00866 
00867   ps_si->incr_indent (0); ps_si->nl ();
00868   *ps_si << "ptr_ (" << this->interface_name_
00869          << "::_duplicate (p.ptr ()))";
00870 
00871   ps_si->decr_indent (0);
00872   ps_si->decr_indent (0);
00873   ps_si->nl ();
00874   *ps_si << "{}";
00875 
00876   ps_si->nl ();
00877   ps_si->nl ();
00878 
00879   *ps_si << this->interface_name_ << "_var::~"
00880          << this->interface_name_ << "_var (void) // destructor";
00881 
00882   ps_si->nl ();
00883   *ps_si << "{";
00884   ps_si->incr_indent (0);
00885   ps_si->nl ();
00886   *ps_si << "CORBA::release (this->ptr_);";
00887 
00888   ps_si->decr_indent (0);
00889   ps_si->nl ();
00890   *ps_si << "}";
00891 
00892   ps_si->nl ();
00893   ps_si->nl ();
00894 
00895   *ps_si << this->interface_name_ << "_var &";   ps_si->nl ();
00896   *ps_si << this->interface_name_ << "_var::operator= ("
00897          << this->interface_name_ << "_ptr p)";
00898 
00899   ps_si->nl ();
00900   *ps_si << "{";
00901   ps_si->incr_indent (0);
00902   ps_si->nl ();
00903 
00904   *ps_si << "this->ptr_ = p;";   ps_si->nl ();
00905   *ps_si << "return *this;";
00906 
00907   ps_si->decr_indent (0);
00908   ps_si->nl ();
00909   *ps_si << "}";
00910 
00911   ps_si->nl ();
00912   ps_si->nl ();
00913 
00914   *ps_si << this->interface_name_ << "_var &";   ps_si->nl ();
00915   *ps_si << this->interface_name_ << "_var::operator= (const ::"
00916          << this->interface_name_ << "_var &p)";
00917   ps_si->nl ();
00918 
00919   *ps_si << "{";
00920   ps_si->incr_indent (0);
00921   ps_si->nl ();
00922 
00923   *ps_si << "if (this != &p)";
00924 
00925   ps_si->incr_indent (0);
00926   ps_si->nl ();
00927   *ps_si << "{";
00928 
00929   ps_si->incr_indent (0);
00930   ps_si->nl ();
00931 
00932   *ps_si << "CORBA::release (this->ptr_);";   ps_si->nl ();
00933   *ps_si << "this->ptr_ = ::" << this->interface_name_
00934          << "::_duplicate (p.ptr ());";
00935   ps_si->decr_indent (0);
00936   ps_si->nl ();
00937   *ps_si << "}";
00938 
00939   ps_si->decr_indent (0);
00940   ps_si->nl ();
00941 
00942   *ps_si << "return *this;";
00943 
00944   ps_si->decr_indent (0);
00945   ps_si->nl ();
00946   *ps_si << "}";
00947 
00948   ps_si->nl ();
00949   ps_si->nl ();
00950 
00951   *ps_si << this->interface_name_ << "_var::operator const ::"
00952          << this->interface_name_ << "_ptr &() const // cast";   ps_si->nl ();
00953   *ps_si << "{";
00954 
00955   ps_si->incr_indent (0);
00956   ps_si->nl ();
00957   *ps_si << "return this->ptr_;";
00958 
00959   ps_si->decr_indent (0);
00960   ps_si->nl ();
00961   *ps_si << "}";
00962 
00963   ps_si->nl ();
00964   ps_si->nl ();
00965 
00966   *ps_si << this->interface_name_ << "_var::operator ::"
00967          << this->interface_name_ << "_ptr &() // cast ";   ps_si->nl ();
00968   *ps_si << "{";
00969   ps_si->incr_indent (0);
00970   ps_si->nl ();
00971 
00972   *ps_si << "return this->ptr_;";
00973 
00974   ps_si->decr_indent (0);
00975   ps_si->nl ();
00976   *ps_si << "}";
00977 
00978   ps_si->nl ();
00979   ps_si->nl ();
00980 
00981   *ps_si << "::" << this->interface_name_ << "_ptr";   ps_si->nl ();
00982   *ps_si << this->interface_name_ << "_var::operator-> (void) const";
00983   ps_si->nl ();
00984 
00985   *ps_si << "{";
00986   ps_si->incr_indent (0);
00987   ps_si->nl ();
00988 
00989   *ps_si << "return this->ptr_;";
00990 
00991   ps_si->decr_indent (0);
00992   ps_si->nl ();
00993   *ps_si << "}";
00994 
00995   ps_si->nl ();
00996   ps_si->nl ();
00997 
00998   *ps_si << "::" << this->interface_name_ << "_ptr";   ps_si->nl ();
00999   *ps_si << this->interface_name_ << "_var::in (void) const";   ps_si->nl ();
01000 
01001   *ps_si << "{";
01002   ps_si->incr_indent (0);
01003   ps_si->nl ();
01004 
01005   *ps_si << "return this->ptr_;";
01006 
01007   ps_si->decr_indent (0);
01008   ps_si->nl ();
01009   *ps_si << "}";
01010 
01011   ps_si->nl ();
01012   ps_si->nl ();
01013 
01014   *ps_si << "::" << this->interface_name_ << "_ptr &";   ps_si->nl ();
01015   *ps_si << this->interface_name_ << "_var::inout (void)";   ps_si->nl ();
01016 
01017   *ps_si << "{";
01018   ps_si->incr_indent (0);
01019   ps_si->nl ();
01020 
01021   *ps_si << "return this->ptr_;";
01022 
01023   ps_si->decr_indent (0);
01024   ps_si->nl ();
01025   *ps_si << "}";
01026 
01027   ps_si->nl ();
01028   ps_si->nl ();
01029 
01030   *ps_si << "::" << this->interface_name_ << "_ptr &";   ps_si->nl ();
01031   *ps_si << this->interface_name_ << "_var::out (void)";   ps_si->nl ();
01032 
01033   *ps_si << "{";
01034   ps_si->incr_indent (0);
01035   ps_si->nl ();
01036 
01037   *ps_si << "CORBA::release (this->ptr_);";   ps_si->nl ();
01038   *ps_si << "this->ptr_ = ::" << this->interface_name_ << "::_nil ();";
01039   ps_si->nl ();
01040   *ps_si << "return this->ptr_;";
01041 
01042   ps_si->nl ();
01043   ps_si->decr_indent (0);
01044   *ps_si << "}";
01045 
01046   ps_si->nl ();
01047   ps_si->nl ();
01048 
01049   *ps_si << "::" << this->interface_name_ << "_ptr";   ps_si->nl ();
01050   *ps_si << this->interface_name_ << "_var::_retn (void)";   ps_si->nl ();
01051 
01052   *ps_si << "{";
01053   ps_si->incr_indent (0);
01054   ps_si->nl ();
01055 
01056   *ps_si << "// yield ownership of managed obj reference";   ps_si->nl ();
01057   *ps_si << "::" << this->interface_name_ << "_ptr val = this->ptr_;";
01058   ps_si->nl ();
01059   *ps_si << "this->ptr_ = ::" << this->interface_name_ << "::_nil ();";
01060   ps_si->nl ();
01061   *ps_si << "return val;";
01062 
01063   ps_si->decr_indent (0);
01064   ps_si->nl ();
01065   *ps_si << "}";
01066 
01067   ps_si->nl ();
01068   ps_si->nl ();
01069 
01070   *ps_si << "::" << this->interface_name_ << "_ptr";   ps_si->nl ();
01071   *ps_si << this->interface_name_ << "_var::tao_duplicate ("
01072          << this->interface_name_ << "_ptr p)";
01073   ps_si->nl ();
01074 
01075   *ps_si << "{";
01076   ps_si->incr_indent (0);
01077   ps_si->nl ();
01078 
01079   *ps_si << "return ::" << this->interface_name_ << "::_duplicate (p);";
01080 
01081   ps_si->decr_indent (0);
01082   ps_si->nl ();
01083   *ps_si << "}";
01084 
01085   ps_si->nl ();
01086   ps_si->nl ();
01087 
01088   *ps_si << "void";   ps_si->nl ();
01089   *ps_si << this->interface_name_ << "_var::tao_release ("
01090          << this->interface_name_ << "_ptr p)";
01091   ps_si->nl ();
01092 
01093   *ps_si << "{";
01094   ps_si->incr_indent (0);
01095   ps_si->nl ();
01096 
01097   *ps_si << "CORBA::release (p);";
01098 
01099   ps_si->nl ();
01100   ps_si->decr_indent (0);
01101   *ps_si << "}";
01102 
01103   ps_si->nl ();
01104   ps_si->nl ();
01105 
01106   *ps_si << "::" << this->interface_name_ << "_ptr";   ps_si->nl ();
01107   *ps_si << this->interface_name_ << "_var::tao_nil (void)";   ps_si->nl ();
01108 
01109   *ps_si << "{";
01110   ps_si->incr_indent (0);
01111   ps_si->nl ();
01112 
01113   *ps_si << "return ::" << this->interface_name_ << "::_nil ();";
01114 
01115   ps_si->decr_indent (0);
01116   ps_si->nl ();
01117   *ps_si << "}";
01118 
01119   ps_si->nl ();
01120   ps_si->nl ();
01121 
01122   *ps_si << "::" << this->interface_name_ << "_ptr";   ps_si->nl ();
01123   *ps_si << this->interface_name_ << "_var::tao_narrow (";
01124 
01125   ps_si->incr_indent (0);
01126   ps_si->nl ();
01127 
01128   *ps_si << "CORBA::Object *p";   ps_si->nl ();
01129   *ps_si << "ACE_ENV_ARG_DECL";   ps_si->nl ();
01130   *ps_si << ")";
01131 
01132   ps_si->decr_indent (0);
01133   ps_si->nl ();
01134 
01135   *ps_si << "{";
01136   ps_si->incr_indent (0);
01137   ps_si->nl ();
01138 
01139   *ps_si << "return ::" << this->interface_name_
01140          << "::_narrow (p ACE_ENV_ARG_PARAMETER);";
01141 
01142   ps_si->decr_indent (0);
01143   ps_si->nl ();
01144   *ps_si << "}";
01145 
01146   ps_si->nl ();
01147   ps_si->nl ();
01148 
01149   *ps_si << "CORBA::Object *";   ps_si->nl ();
01150   *ps_si << this->interface_name_ << "_var::tao_upcast (void *src)";
01151   ps_si->nl ();
01152 
01153   *ps_si << "{";
01154   ps_si->incr_indent (0);
01155   ps_si->nl ();
01156 
01157   *ps_si << this->interface_name_ << " **tmp =";   ps_si->nl ();
01158   *ps_si << "ACE_static_cast (" << this->interface_name_ << " **, src);";
01159   ps_si->nl ();
01160   *ps_si << "return *tmp;";
01161 
01162   ps_si->decr_indent (0);
01163   ps_si->nl ();
01164   *ps_si << "}";
01165 
01166   ps_si->nl ();
01167   ps_si->nl ();
01168 
01169   *ps_si << "// **********************************************************";
01170   ps_si->nl ();
01171   *ps_si << "// " << this->interface_name_ << "_out";   ps_si->nl ();
01172   *ps_si << "// **********************************************************";
01173 
01174   ps_si->nl ();
01175   ps_si->nl ();
01176 
01177   *ps_si << this->interface_name_ << "_out::"
01178          << this->interface_name_ << "_out ("
01179          << this->interface_name_ << "_ptr &p)";
01180 
01181   ps_si->incr_indent (0);
01182   ps_si->nl ();
01183   *ps_si << ": ptr_ (p)";
01184   ps_si->decr_indent (0);
01185   ps_si->nl ();
01186 
01187   *ps_si << "{";
01188   ps_si->incr_indent (0);
01189   ps_si->nl ();
01190 
01191   *ps_si << "this->ptr_ = ::" << this->interface_name_ << "::_nil ();";
01192 
01193   ps_si->decr_indent (0);
01194   ps_si->nl ();
01195   *ps_si << "}";
01196 
01197   ps_si->nl ();
01198   ps_si->nl ();
01199 
01200   *ps_si << this->interface_name_ << "_out::"
01201          << this->interface_name_ << "_out ("
01202          << this->interface_name_
01203          << "_var &p) // constructor from _var";
01204 
01205   ps_si->decr_indent (0);
01206   ps_si->nl ();
01207   *ps_si << ": ptr_ (p.out ())";
01208   ps_si->decr_indent (0);
01209   ps_si->nl ();
01210 
01211   *ps_si << "{";
01212   ps_si->incr_indent (0);
01213   ps_si->nl ();
01214 
01215   *ps_si << "CORBA::release (this->ptr_);";   ps_si->nl ();
01216   *ps_si << "this->ptr_ = ::" << this->interface_name_ << "::_nil ();";
01217 
01218   ps_si->decr_indent (0);
01219   ps_si->nl ();
01220   *ps_si << "}";
01221 
01222   ps_si->nl ();
01223   ps_si->nl ();
01224 
01225   *ps_si << this->interface_name_ << "_out::"
01226          << this->interface_name_ << "_out (const ::"
01227          << this->interface_name_ << "_out &p) // copy constructor";
01228 
01229   ps_si->decr_indent (0);
01230   ps_si->nl ();
01231   *ps_si << ": ptr_ (ACE_const_cast ("
01232          << this->interface_name_
01233          << "_out &, p).ptr_)";
01234   ps_si->decr_indent (0);
01235   ps_si->nl ();
01236 
01237   *ps_si << "{}";
01238 
01239   ps_si->nl ();
01240   ps_si->nl ();
01241 
01242   *ps_si << "::" << this->interface_name_ << "_out &";   ps_si->nl ();
01243   *ps_si << this->interface_name_ << "_out::operator= (const ::"
01244          << this->interface_name_ << "_out &p)";   ps_si->nl ();
01245 
01246   *ps_si << "{";
01247   ps_si->incr_indent (0);
01248   ps_si->nl ();
01249 
01250   *ps_si << "this->ptr_ = ACE_const_cast ("
01251          << this->interface_name_ << "_out&, p).ptr_;";   ps_si->nl ();
01252   *ps_si << "return *this;";
01253 
01254   ps_si->decr_indent (0);
01255   ps_si->nl ();
01256   *ps_si << "}";
01257 
01258   ps_si->nl ();
01259   ps_si->nl ();
01260 
01261   *ps_si << this->interface_name_ << "_out &";   ps_si->nl ();
01262   *ps_si << this->interface_name_ << "_out::operator= (const ::"
01263          << this->interface_name_ << "_var &p)";   ps_si->nl ();
01264 
01265   *ps_si << "{";
01266   ps_si->incr_indent (0);
01267   ps_si->nl ();
01268 
01269   *ps_si << "this->ptr_ = ::" << this->interface_name_
01270          << "::_duplicate (p.ptr ());";   ps_si->nl ();
01271   *ps_si << "return *this;";
01272 
01273   ps_si->decr_indent (0);
01274   ps_si->nl ();
01275   *ps_si << "}";
01276 
01277   ps_si->nl ();
01278   ps_si->nl ();
01279 
01280   *ps_si << this->interface_name_ << "_out &";   ps_si->nl ();
01281   *ps_si << this->interface_name_ << "_out::operator= ("
01282          << this->interface_name_ << "_ptr p)";   ps_si->nl ();
01283 
01284   *ps_si << "{";
01285   ps_si->incr_indent (0);
01286   ps_si->nl ();
01287 
01288   *ps_si << "this->ptr_ = p;";   ps_si->nl ();
01289   *ps_si << "return *this;";
01290 
01291   ps_si->decr_indent (0);
01292   ps_si->nl ();
01293   *ps_si << "}";
01294 
01295   ps_si->nl ();
01296   ps_si->nl ();
01297 
01298   *ps_si << this->interface_name_ << "_out::operator ::"
01299          << this->interface_name_ << "_ptr &() // cast";   ps_si->nl ();
01300 
01301   *ps_si << "{";
01302   ps_si->incr_indent (0);
01303    ps_si->nl ();
01304 
01305   *ps_si << "return this->ptr_;";
01306 
01307   ps_si->decr_indent (0);
01308   ps_si->nl ();
01309   *ps_si << "}";
01310 
01311   ps_si->nl ();
01312   ps_si->nl ();
01313 
01314   *ps_si << "::" << this->interface_name_ << "_ptr &";   ps_si->nl ();
01315   *ps_si << this->interface_name_ << "_out::ptr (void) // ptr";   ps_si->nl ();
01316 
01317   *ps_si << "{";
01318   ps_si->incr_indent (0);
01319   ps_si->nl ();
01320 
01321   *ps_si << "return this->ptr_;";
01322 
01323   ps_si->decr_indent (0);
01324   ps_si->nl ();
01325   *ps_si << "}";
01326 
01327   ps_si->nl ();
01328   ps_si->nl ();
01329 
01330   *ps_si << "::" << this->interface_name_ << "_ptr";   ps_si->nl ();
01331   *ps_si << this->interface_name_ << "_out::operator-> (void)";   ps_si->nl ();
01332 
01333   *ps_si << "{";
01334   ps_si->incr_indent (0);
01335   ps_si->nl ();
01336 
01337   *ps_si << "return this->ptr_;";
01338 
01339   ps_si->decr_indent (0);
01340   ps_si->nl ();
01341   *ps_si << "}";
01342 
01343   ps_si->nl ();
01344   ps_si->nl ();
01345   ps_si->nl ();
01346 
01347   *ps_si << "#if (TAO_HAS_INTERCEPTORS == 1)";   ps_si->nl ();
01348   *ps_si << "#endif /* TAO_HAS_INTERCEPTORS */";
01349 
01350   ps_si->nl ();
01351   ps_si->nl ();
01352 
01353   *ps_si << "///////////////////////////////////////////////////////////////";   ps_si->nl ();
01354   *ps_si << "//                Base & Remote Proxy  Implementation. ";
01355   ps_si->nl ();
01356   *ps_si << "//";
01357 
01358   ps_si->nl ();
01359   ps_si->nl ();
01360 
01361   *ps_si << "_TAO_" << this->interface_name_ << "_Proxy_Impl::_TAO_"
01362          << this->interface_name_ << "_Proxy_Impl (void)";   ps_si->nl ();
01363   *ps_si << "{}";
01364 
01365   ps_si->nl ();
01366   ps_si->nl ();
01367 
01368   *ps_si << "_TAO_" << this->interface_name_
01369          << "_Remote_Proxy_Impl::_TAO_" << this->interface_name_
01370          << "_Remote_Proxy_Impl (void)";   ps_si->nl ();
01371   *ps_si << "{}";
01372 
01373   ps_si->nl ();
01374   ps_si->nl ();
01375 
01376   *ps_si << "// Remote Implementation of the IDL interface methods";
01377   ps_si->nl ();
01378   ps_si->nl ();
01379 
01380   *ps_si << "//";   ps_si->nl ();
01381   *ps_si << "//            End  Base & Remote  Proxy Implemeentation. ";
01382   ps_si->nl ();
01383 
01384   *ps_si << "///////////////////////////////////////////////////////////////";
01385   ps_si->nl ();
01386   ps_si->nl ();
01387 
01388   *ps_si << "///////////////////////////////////////////////////////////////";   ps_si->nl ();
01389   *ps_si << "//           Remote & Base  Proxy Broker Implementation";
01390   ps_si->nl ();
01391   *ps_si << "//";
01392 
01393   ps_si->nl ();
01394   ps_si->nl ();
01395 
01396   *ps_si << "_TAO_" << this->interface_name_ << "_Proxy_Broker::_TAO_"
01397          << this->interface_name_ << "_Proxy_Broker (void)";   ps_si->nl ();
01398   *ps_si << "{";   ps_si->nl ();
01399   *ps_si << "}";
01400 
01401   ps_si->nl ();
01402   ps_si->nl ();
01403 
01404   *ps_si << "_TAO_" << this->interface_name_ << "_Proxy_Broker::~_TAO_"
01405          << this->interface_name_ << "_Proxy_Broker (void)";   ps_si->nl ();
01406   *ps_si << "{";   ps_si->nl ();
01407   *ps_si << "}";
01408 
01409   ps_si->nl ();
01410   ps_si->nl ();
01411 
01412   *ps_si << "_TAO_" << this->interface_name_
01413          << "_Proxy_Broker * (*_TAO_"
01414          << this->interface_name_
01415          << "_Proxy_Broker_Factory_function_pointer) (";
01416 
01417   ps_si->incr_indent (0);
01418   ps_si->nl ();
01419   *ps_si << "CORBA::Object_ptr obj";
01420 
01421   ps_si->nl ();
01422   *ps_si << ") = 0;";
01423 
01424   ps_si->decr_indent (0);
01425 
01426   ps_si->nl ();
01427   ps_si->nl ();
01428 
01429   *ps_si << "// Factory Member function Implementation.";   ps_si->nl ();
01430   *ps_si << "_TAO_" << this->interface_name_ << "_Remote_Proxy_Broker *";
01431   ps_si->nl ();
01432   *ps_si << "_TAO_" << this->interface_name_
01433          << "_Remote_Proxy_Broker::the_TAO_"
01434          << this->interface_name_
01435          << "_Remote_Proxy_Broker (void)";   ps_si->nl ();
01436 
01437   *ps_si << "{";
01438   ps_si->incr_indent (0);
01439   ps_si->nl ();
01440 
01441   *ps_si << "static ::_TAO_" << this->interface_name_
01442          << "_Remote_Proxy_Broker remote_proxy_broker;";   ps_si->nl ();
01443   *ps_si << "return &remote_proxy_broker;";
01444 
01445   ps_si->decr_indent (0);
01446   ps_si->nl ();
01447   *ps_si << "}";
01448 
01449   ps_si->nl ();
01450   ps_si->nl ();
01451 
01452   *ps_si << "_TAO_" << this->interface_name_
01453          << "_Remote_Proxy_Broker::_TAO_"
01454          << this->interface_name_ << "_Remote_Proxy_Broker (void)";   ps_si->nl ();
01455   *ps_si << "{";   ps_si->nl ();
01456   *ps_si << "}";
01457 
01458   ps_si->nl ();
01459   ps_si->nl ();
01460 
01461   *ps_si << "_TAO_" << this->interface_name_
01462          << "_Remote_Proxy_Broker::~_TAO_"
01463          << this->interface_name_ << "_Remote_Proxy_Broker (void)";   ps_si->nl ();
01464   *ps_si << "{";   ps_si->nl ();
01465   *ps_si << "}";
01466 
01467   ps_si->nl ();
01468   ps_si->nl ();
01469 
01470   *ps_si << "_TAO_" << this->interface_name_ << "_Proxy_Impl&";   ps_si->nl ();
01471   *ps_si << "_TAO_" << this->interface_name_
01472          << "_Remote_Proxy_Broker::select_proxy (";
01473 
01474   ps_si->incr_indent (0);
01475   ps_si->nl ();
01476   *ps_si << "::" << this->interface_name_ << " *";   ps_si->nl ();
01477   *ps_si << "ACE_ENV_ARG_DECL_NOT_USED";   ps_si->nl ();
01478   *ps_si << ")";
01479   ps_si->decr_indent (0);
01480   ps_si->nl ();
01481 
01482   *ps_si << "{";
01483   ps_si->incr_indent (0);
01484   ps_si->nl ();
01485 
01486   *ps_si << "return this->remote_proxy_impl_;";
01487 
01488   ps_si->decr_indent (0);
01489   ps_si->nl ();
01490   *ps_si << "}";
01491 
01492   ps_si->nl ();
01493   ps_si->nl ();
01494   ps_si->nl ();
01495 
01496   *ps_si << "//";   ps_si->nl ();
01497   *ps_si << "//           End Remote & Base Proxy Broker Implementation";   ps_si->nl ();
01498   *ps_si << "///////////////////////////////////////////////////////////////";   ps_si->nl ();
01499   ps_si->nl ();
01500   ps_si->nl ();
01501 
01502   *ps_si << this->interface_name_ << "::"
01503          << this->interface_name_ << " (int collocated)";   ps_si->nl ();
01504 
01505   *ps_si << "{";
01506   ps_si->incr_indent (0);
01507   ps_si->nl ();
01508 
01509   *ps_si << "this->" << this->interface_name_
01510          << "_setup_collocation (collocated);";
01511 
01512   ps_si->decr_indent (0);
01513   ps_si->nl ();
01514   *ps_si << "}";
01515 
01516   ps_si->nl ();
01517   ps_si->nl ();
01518 
01519   *ps_si << this->interface_name_ << "::~"
01520          << this->interface_name_ << " (void)";   ps_si->nl ();
01521   *ps_si << "{}";
01522 
01523   ps_si->nl ();
01524   ps_si->nl ();
01525 
01526   *ps_si << "void";   ps_si->nl ();
01527   *ps_si << this->interface_name_ << "::"
01528          << this->interface_name_
01529          << "_setup_collocation (int collocated)";   ps_si->nl ();
01530 
01531   *ps_si << "{";
01532   ps_si->incr_indent (0);
01533   ps_si->nl ();
01534 
01535   *ps_si << "if (collocated)";
01536   ps_si->incr_indent (0);
01537   ps_si->nl ();
01538 
01539   *ps_si << "this->the_TAO_"
01540          << this->interface_name_ << "_Proxy_Broker_ =";
01541 
01542   ps_si->incr_indent (0);
01543   ps_si->nl ();
01544 
01545   *ps_si << "::_TAO_" << this->interface_name_
01546          << "_Proxy_Broker_Factory_function_pointer (this);";
01547 
01548   ps_si->decr_indent (0);
01549   ps_si->decr_indent (0);
01550   ps_si->nl ();
01551 
01552   *ps_si << "else";
01553   ps_si->incr_indent (0);
01554   ps_si->nl ();
01555   *ps_si << "this->the_TAO_"
01556          << this->interface_name_
01557          << "_Proxy_Broker_ =";
01558 
01559   ps_si->incr_indent (0);
01560   ps_si->nl ();
01561 
01562   *ps_si << "::_TAO_" << this->interface_name_
01563          << "_Remote_Proxy_Broker::the_TAO_"
01564          << this->interface_name_
01565          << "_Remote_Proxy_Broker ();";
01566 
01567   ps_si->decr_indent (0);
01568   ps_si->decr_indent (0);
01569   ps_si->decr_indent (0);
01570   ps_si->decr_indent (0);
01571 
01572   ps_si->nl ();
01573   *ps_si << "}";
01574 
01575   ps_si->nl ();
01576   ps_si->nl ();
01577 
01578   *ps_si << "void " << this->interface_name_
01579          << "::_tao_any_destructor (void *_tao_void_pointer)";   ps_si->nl ();
01580 
01581   *ps_si << "{";
01582   ps_si->incr_indent (0);
01583   ps_si->nl ();
01584 
01585   *ps_si << this->interface_name_
01586          << " *tmp = ACE_static_cast ("
01587          << this->interface_name_ << "*, _tao_void_pointer);";   ps_si->nl ();
01588   *ps_si << "CORBA::release (tmp);";
01589 
01590   ps_si->decr_indent (0);
01591   ps_si->nl ();
01592   *ps_si << "}";
01593 
01594   ps_si->nl ();
01595   ps_si->nl ();
01596 
01597   *ps_si << this->interface_name_ << "_ptr "
01598          << this->interface_name_ << "::_narrow (";
01599 
01600   ps_si->incr_indent (0);
01601   ps_si->nl ();
01602   *ps_si << "CORBA::Object_ptr obj";   ps_si->nl ();
01603   *ps_si << "ACE_ENV_ARG_DECL";
01604 
01605   ps_si->decr_indent (0);
01606   ps_si->nl ();
01607   *ps_si << ")";
01608   ps_si->nl ();
01609 
01610   *ps_si << "{";
01611   ps_si->incr_indent (0);
01612   ps_si->nl ();
01613 
01614   *ps_si << "if (CORBA::is_nil (obj))";
01615   ps_si->incr_indent (0);
01616   ps_si->nl ();
01617 
01618   *ps_si << "return " << this->interface_name_ << "::_nil ();";
01619 
01620   ps_si->decr_indent (0);
01621   ps_si->nl ();
01622   ps_si->nl ();
01623 
01624   *ps_si << "if (! obj->_is_local ())";
01625   ps_si->incr_indent (0);
01626   ps_si->nl ();
01627   *ps_si << "{";
01628   ps_si->incr_indent (0);
01629   ps_si->nl ();
01630 
01631   *ps_si << "CORBA::Boolean is_a = obj->_is_a (\"IDL:"
01632          << this->interface_name_ << ":1.0\" ACE_ENV_ARG_PARAMETER);";
01633   ps_si->nl ();
01634   *ps_si << "ACE_CHECK_RETURN (" << this->interface_name_ << "::_nil ());";   ps_si->nl ();
01635 
01636   *ps_si << "if (is_a == 0)";
01637   ps_si->incr_indent (0);
01638   ps_si->nl ();
01639   *ps_si << "return " << this->interface_name_ << "::_nil ();";
01640 
01641   ps_si->decr_indent (0);
01642   ps_si->decr_indent (0);
01643   ps_si->nl ();
01644   *ps_si << "}";
01645   ps_si->decr_indent (0);
01646   ps_si->nl ();
01647 
01648   *ps_si << "return " << this->interface_name_
01649          << "::_unchecked_narrow (obj ACE_ENV_ARG_PARAMETER);";
01650 
01651   ps_si->decr_indent (0);
01652   ps_si->nl ();
01653   *ps_si << "}";
01654 
01655   ps_si->nl ();
01656   ps_si->nl ();
01657 
01658   *ps_si << this->interface_name_ << "_ptr ";   ps_si->nl ();
01659   *ps_si << this->interface_name_ << "::_unchecked_narrow (";
01660 
01661   ps_si->incr_indent (0);
01662   ps_si->nl ();
01663   *ps_si << "CORBA::Object_ptr obj";   ps_si->nl ();
01664   *ps_si << "ACE_ENV_ARG_DECL_NOT_USED";   ps_si->nl ();
01665   *ps_si << ")";
01666 
01667   ps_si->decr_indent (0);
01668   ps_si->nl ();
01669 
01670   *ps_si << "{";
01671 
01672   ps_si->incr_indent (0);
01673   ps_si->nl ();
01674   *ps_si << "if (CORBA::is_nil (obj))";
01675   ps_si->incr_indent (0);
01676   ps_si->nl ();
01677 
01678   *ps_si << "return " << this->interface_name_ << "::_nil ();";
01679 
01680   ps_si->decr_indent (0);
01681   ps_si->nl ();
01682 
01683   *ps_si << "if (! obj->_is_local ())";   ps_si->nl ();
01684   *ps_si << "{";
01685   ps_si->incr_indent (0);
01686   ps_si->nl ();
01687   *ps_si << "TAO_Stub* stub = obj->_stubobj ();";   ps_si->nl ();
01688 
01689   *ps_si << "if (stub)";
01690   ps_si->incr_indent (0);
01691   ps_si->nl ();
01692 
01693   *ps_si << " stub->_incr_refcnt ();";
01694 
01695   ps_si->decr_indent (0);
01696   ps_si->nl ();
01697 
01698   *ps_si << this->interface_name_ << "_ptr default_proxy = "
01699          << this->interface_name_ << "::_nil ();";   ps_si->nl ();
01700   ps_si->nl ();
01701   *ps_si << "if (";
01702   ps_si->incr_indent (0);
01703   ps_si->nl ();
01704   *ps_si << "!CORBA::is_nil (stub->servant_orb_var ().ptr ()) &&";   ps_si->nl ();
01705   *ps_si << "stub->servant_orb_var ()->orb_core ()->optimize_collocation_objects () &&";   ps_si->nl ();
01706   *ps_si << "obj->_is_collocated () &&";   ps_si->nl ();
01707   *ps_si << "_TAO_" << this->interface_name_
01708          << "_Proxy_Broker_Factory_function_pointer != 0";   ps_si->nl ();
01709   *ps_si << ")";
01710   ps_si->decr_indent (0);
01711   ps_si->nl ();
01712 
01713   *ps_si << " {";
01714   ps_si->incr_indent (0);
01715   ps_si->nl ();
01716 
01717   *ps_si << " ACE_NEW_RETURN (";
01718   ps_si->incr_indent (0);
01719   ps_si->nl ();
01720 
01721   *ps_si << "default_proxy,";   ps_si->nl ();
01722   *ps_si << "::" << this->interface_name_ << " (";
01723   ps_si->incr_indent (0);
01724   ps_si->incr_indent (0);
01725   ps_si->nl ();
01726 
01727   *ps_si << "stub,";   ps_si->nl ();
01728   *ps_si << "1,";   ps_si->nl ();
01729   *ps_si << "obj->_servant ()";   ps_si->nl ();
01730   *ps_si << "),";
01731   ps_si->decr_indent (0);
01732   ps_si->decr_indent (0);
01733   ps_si->nl ();
01734   *ps_si << this->interface_name_ << "::_nil ()";   ps_si->nl ();
01735 
01736   *ps_si << ");";
01737   ps_si->decr_indent (0);
01738   ps_si->decr_indent (0);
01739   ps_si->nl ();
01740   *ps_si << " }";
01741 
01742   ps_si->nl ();
01743   ps_si->nl ();
01744 
01745   *ps_si << "if (CORBA::is_nil (default_proxy))";
01746   ps_si->incr_indent (0);
01747   ps_si->nl ();
01748   *ps_si << "{";
01749 
01750   ps_si->incr_indent (0);
01751   ps_si->nl ();
01752 
01753   *ps_si << "ACE_NEW_RETURN (";
01754   ps_si->incr_indent (0);
01755   ps_si->nl ();
01756 
01757   *ps_si << "default_proxy,";   ps_si->nl ();
01758 
01759   *ps_si << "::" << this->interface_name_ << " (";
01760   ps_si->incr_indent (0);
01761   ps_si->incr_indent (0);
01762   ps_si->nl ();
01763 
01764   *ps_si << "stub,";   ps_si->nl ();
01765   *ps_si << "0,";   ps_si->nl ();
01766   *ps_si << "obj->_servant ()";   ps_si->nl ();
01767   *ps_si << "),";
01768 
01769   ps_si->decr_indent (0);
01770   ps_si->decr_indent (0);
01771   ps_si->nl ();
01772 
01773   *ps_si << this->interface_name_ << "::_nil ()";   ps_si->nl ();
01774   *ps_si << ");";
01775   ps_si->decr_indent (0);
01776   ps_si->nl ();
01777 
01778   *ps_si << " }";
01779   ps_si->decr_indent (0);
01780   ps_si->nl ();
01781 
01782   *ps_si << "return default_proxy;";
01783   ps_si->decr_indent (0);
01784   ps_si->nl ();
01785 
01786   *ps_si << "}";   ps_si->nl ();
01787   *ps_si << "else";
01788   ps_si->incr_indent (0);
01789   ps_si->nl ();
01790   *ps_si << "return";
01791 
01792   ps_si->incr_indent (0);
01793   ps_si->nl ();
01794 
01795   *ps_si << "ACE_reinterpret_cast";   ps_si->nl ();
01796   *ps_si << "(";
01797   ps_si->incr_indent (0);
01798   ps_si->nl ();
01799   *ps_si << this->interface_name_ << "_ptr,";   ps_si->nl ();
01800   *ps_si << "obj->_tao_QueryInterface";   ps_si->nl ();
01801   *ps_si << "(";
01802   ps_si->incr_indent (0);
01803   ps_si->nl ();
01804 
01805   *ps_si << "ACE_reinterpret_cast";   ps_si->nl ();
01806   *ps_si << "(";
01807   ps_si->incr_indent (0);
01808   ps_si->nl ();
01809   *ps_si << "ptrdiff_t,";   ps_si->nl ();
01810   *ps_si << "&" << this->interface_name_ << "::_tao_class_id";
01811   ps_si->nl ();
01812 
01813   *ps_si << ")";
01814   ps_si->decr_indent (0);
01815   ps_si->nl ();
01816 
01817   *ps_si << ")";
01818   ps_si->decr_indent (0);
01819   ps_si->decr_indent (0);
01820   ps_si->nl ();
01821 
01822   *ps_si << " );";
01823   ps_si->decr_indent (0);
01824   ps_si->decr_indent (0);
01825   ps_si->decr_indent (0);
01826   ps_si->decr_indent (0);
01827   ps_si->decr_indent (0);
01828   ps_si->decr_indent (0);
01829   ps_si->nl ();
01830 
01831   *ps_si << "}";
01832 
01833   ps_si->nl ();
01834   ps_si->nl ();
01835 
01836   *ps_si << this->interface_name_ << "_ptr";   ps_si->nl ();
01837   *ps_si << this->interface_name_ << "::_duplicate ("
01838          << this->interface_name_ << "_ptr obj)";   ps_si->nl ();
01839   *ps_si << "{";
01840   ps_si->incr_indent (0);
01841   ps_si->nl ();
01842   *ps_si << "if (!CORBA::is_nil (obj))";
01843   ps_si->incr_indent (0);
01844   ps_si->nl ();
01845   *ps_si << "obj->_add_ref ();";
01846 
01847   ps_si->decr_indent (0);
01848   ps_si->nl ();
01849 
01850   *ps_si << "return obj;";
01851 
01852   ps_si->decr_indent (0);
01853   ps_si->nl ();
01854   *ps_si << "}";
01855 
01856   ps_si->nl ();
01857   ps_si->nl ();
01858 
01859   *ps_si << "CORBA::Boolean " << this->interface_name_
01860          << "::_is_a (const CORBA::Char *value ACE_ENV_ARG_DECL)";   ps_si->nl ();
01861 
01862   *ps_si << "{";
01863   ps_si->incr_indent (0);
01864   ps_si->nl ();
01865 
01866   *ps_si << "if (";
01867   ps_si->incr_indent (0);
01868   ps_si->nl ();
01869 
01870   *ps_si << "(!ACE_OS::strcmp ((char *)value, \"IDL:"
01871          << this->interface_name_ << ":1.0\")) ||";   ps_si->nl ();
01872   *ps_si << "(!ACE_OS::strcmp ((char *)value,"
01873          << "\"IDL:omg.org/CORBA/Object:1.0\")))";   ps_si->nl ();
01874 
01875   *ps_si << "return 1; // success using local knowledge";
01876 
01877   ps_si->decr_indent (0);
01878   ps_si->nl ();
01879   *ps_si << "else";
01880 
01881   ps_si->incr_indent (0);
01882   ps_si->nl ();
01883   *ps_si << "return this->Object::_is_a (value ACE_ENV_ARG_PARAMETER);";
01884   ps_si->decr_indent (0);
01885   ps_si->decr_indent (0);
01886   ps_si->nl ();
01887   *ps_si << "}";
01888 
01889   ps_si->nl ();
01890   ps_si->nl ();
01891 
01892   *ps_si << "void *" << this->interface_name_
01893          << "::_tao_QueryInterface (ptrdiff_t type)";   ps_si->nl ();
01894   *ps_si << "{";
01895   ps_si->incr_indent (0);
01896   ps_si->nl ();
01897   *ps_si << "void *retv = 0;";   ps_si->nl ();
01898   *ps_si << "if (type == ACE_reinterpret_cast";
01899   ps_si->incr_indent (0);
01900   ps_si->nl ();
01901   *ps_si << "(ptrdiff_t,";   ps_si->nl ();
01902   *ps_si << "&" << this->interface_name_ << "::_tao_class_id))";   ps_si->nl ();
01903   *ps_si << "retv = reinterpret_cast<void*> (this);";
01904   ps_si->decr_indent (0);
01905   ps_si->nl ();
01906 
01907   *ps_si << "else if (type == ACE_reinterpret_cast "
01908          << "(ptrdiff_t, &CORBA::Object::_tao_class_id))";
01909 
01910   ps_si->incr_indent (0);
01911   ps_si->nl ();
01912 
01913   *ps_si << "retv = ACE_reinterpret_cast (void *,";
01914   ps_si->incr_indent (0);
01915   ps_si->nl ();
01916   *ps_si << "static_cast<CORBA::Object_ptr> (this));";
01917 
01918   ps_si->decr_indent (0);
01919   ps_si->decr_indent (0);
01920 
01921   ps_si->nl ();
01922   ps_si->nl ();
01923   *ps_si << "if (retv)";
01924   ps_si->incr_indent (0);
01925   ps_si->nl ();
01926   *ps_si << "this->_add_ref ();";
01927 
01928   ps_si->decr_indent (0);
01929   ps_si->nl ();
01930 
01931   *ps_si << "return retv;";
01932 
01933   ps_si->decr_indent (0);
01934   ps_si->nl ();
01935   *ps_si << "}";
01936 
01937   ps_si->nl ();
01938   ps_si->nl ();
01939 
01940   *ps_si << "const char* " << this->interface_name_
01941          << "::_interface_repository_id (void) const";   ps_si->nl ();
01942 
01943   *ps_si << "{";
01944   ps_si->incr_indent (0);
01945   ps_si->nl ();
01946   *ps_si << "return \"IDL:" << this->interface_name_ << ":1.0\";";
01947   ps_si->decr_indent (0);
01948   ps_si->nl ();
01949 
01950   *ps_si << "}";
01951 
01952   ps_si->nl ();
01953   ps_si->nl ();
01954 
01955   *ps_si << "static const CORBA::Long _oc_"
01956          << this->interface_name_ << "[] =";   ps_si->nl ();
01957   *ps_si << "{";   ps_si->nl ();
01958   *ps_si << "// typecode related information goes here";
01959 
01960   ps_si->nl ();
01961   *ps_si << "};";
01962 
01963   ps_si->nl ();
01964   ps_si->nl ();
01965 
01966 
01967   *ps_si << "static CORBA::TypeCode _tc_TAO_tc_"
01968          << this->interface_name_ << " (";
01969 
01970   ps_si->incr_indent (0);
01971   ps_si->incr_indent (0);
01972   ps_si->nl ();
01973 
01974   *ps_si << "CORBA::tk_objref,";   ps_si->nl ();
01975   *ps_si << "sizeof (_oc_" << this->interface_name_ << "),";   ps_si->nl ();
01976   *ps_si << "(char *) &_oc_" << this->interface_name_ << ",";   ps_si->nl ();
01977   *ps_si << "0,";   ps_si->nl ();
01978   *ps_si << "sizeof (" << this->interface_name_ << ")";
01979   ps_si->decr_indent (0);
01980   ps_si->nl ();
01981   *ps_si << ");";
01982 
01983   ps_si->decr_indent (0);
01984   ps_si->nl ();
01985   ps_si->nl ();
01986 
01987   *ps_si << "::CORBA::TypeCode_ptr _tc_" << this->interface_name_ << " =";
01988   ps_si->decr_indent (0);
01989   ps_si->nl ();
01990   *ps_si << "&_tc_TAO_tc_" << this->interface_name_ << ";";
01991   ps_si->decr_indent (0);
01992 
01993   ps_si->nl ();
01994   ps_si->nl ();
01995 
01996   *ps_si << "void operator<<= (";
01997   ps_si->incr_indent (0);
01998   ps_si->incr_indent (0);
01999   ps_si->nl ();
02000 
02001   *ps_si << "CORBA::Any &_tao_any,";   ps_si->nl ();
02002   *ps_si << this->interface_name_ << "_ptr _tao_elem";
02003   ps_si->decr_indent (0);
02004   ps_si->nl ();
02005 
02006   *ps_si << ")";
02007   ps_si->decr_indent (0);
02008   ps_si->nl ();
02009 
02010   *ps_si << "{";
02011   ps_si->incr_indent (0);
02012   ps_si->nl ();
02013 
02014   *ps_si << "TAO_OutputCDR stream;";
02015   ps_si->nl ();
02016   ps_si->nl ();
02017 
02018   *ps_si << "if (stream << _tao_elem)";
02019   ps_si->incr_indent (0);
02020   ps_si->nl ();
02021 
02022   *ps_si << "{";
02023   ps_si->incr_indent (0);
02024   ps_si->nl ();
02025 
02026   *ps_si << "_tao_any._tao_replace (";
02027   ps_si->incr_indent (0);
02028   ps_si->incr_indent (0);
02029   ps_si->nl ();
02030 
02031   *ps_si << "_tc_" << this->interface_name_ << ", ";   ps_si->nl ();
02032   *ps_si << "TAO_ENCAP_BYTE_ORDER,";   ps_si->nl ();
02033   *ps_si << "stream.begin (),";   ps_si->nl ();
02034   *ps_si << "1,";   ps_si->nl ();
02035   *ps_si << this->interface_name_ << "::_duplicate (_tao_elem),";   ps_si->nl ();
02036   *ps_si << this->interface_name_ << "::_tao_any_destructor";
02037   ps_si->decr_indent (0);
02038   ps_si->nl ();
02039   *ps_si << ");";
02040 
02041   ps_si->decr_indent (0);
02042   ps_si->decr_indent (0);
02043   ps_si->nl ();
02044   *ps_si << "}";
02045 
02046   ps_si->decr_indent (0);
02047   ps_si->decr_indent (0);
02048   ps_si->nl ();
02049   *ps_si << "}";
02050 
02051   ps_si->nl ();
02052   ps_si->nl ();
02053 
02054   *ps_si << "void operator<<= (";
02055   ps_si->incr_indent (0);
02056   ps_si->nl ();
02057   *ps_si << "CORBA::Any &_tao_any,";   ps_si->nl ();
02058   *ps_si << this->interface_name_ << "_ptr *_tao_elem";
02059   ps_si->nl ();
02060 
02061   *ps_si << ")";
02062   ps_si->decr_indent (0);
02063   ps_si->nl ();
02064 
02065   *ps_si << "{";
02066   ps_si->incr_indent (0);
02067   ps_si->nl ();
02068 
02069   *ps_si << "TAO_OutputCDR stream;";
02070   ps_si->nl ();
02071   ps_si->nl ();
02072 
02073   *ps_si << "if (stream << *_tao_elem)";
02074   ps_si->incr_indent (0);
02075   ps_si->nl ();
02076 
02077   *ps_si << "{";
02078   ps_si->incr_indent (0);
02079   ps_si->nl ();
02080 
02081   *ps_si << "_tao_any._tao_replace (";
02082   ps_si->incr_indent (0);
02083   ps_si->nl ();
02084   *ps_si << "_tc_" << this->interface_name_ << ", ";   ps_si->nl ();
02085   *ps_si << "TAO_ENCAP_BYTE_ORDER,";   ps_si->nl ();
02086   *ps_si << "stream.begin (),";   ps_si->nl ();
02087   *ps_si << "1,";   ps_si->nl ();
02088   *ps_si << "*_tao_elem,";   ps_si->nl ();
02089   *ps_si << this->interface_name_ << "::_tao_any_destructor";
02090 
02091   ps_si->decr_indent (0);
02092   ps_si->nl ();
02093   *ps_si << ");";
02094 
02095   ps_si->decr_indent (0);
02096   ps_si->nl ();
02097   *ps_si << "}";
02098 
02099   ps_si->decr_indent (0);
02100   ps_si->decr_indent (0);
02101   ps_si->nl ();
02102   *ps_si << "}";
02103 
02104   ps_si->nl ();
02105   ps_si->nl ();
02106 
02107   *ps_si << "CORBA::Boolean operator>>= (";
02108   ps_si->incr_indent (0);
02109   ps_si->incr_indent (0);
02110   ps_si->nl ();
02111   *ps_si << "const CORBA::Any &_tao_any,";   ps_si->nl ();
02112   *ps_si << this->interface_name_ << "_ptr &_tao_elem";
02113 
02114   ps_si->decr_indent (0);
02115   ps_si->nl ();
02116   *ps_si << ")";
02117 
02118   ps_si->decr_indent (0);
02119   ps_si->nl ();
02120 
02121   *ps_si << "{";
02122   ps_si->incr_indent (0);
02123   ps_si->nl ();
02124 
02125   *ps_si << "ACE_TRY_NEW_ENV";   ps_si->nl ();
02126   *ps_si << "{";
02127   ps_si->incr_indent (0);
02128   ps_si->nl ();
02129 
02130   *ps_si << "_tao_elem = " << this->interface_name_ << "::_nil ();";
02131   ps_si->nl ();
02132   *ps_si << "CORBA::TypeCode_var type = _tao_any.type ();";
02133   ps_si->nl ();
02134   ps_si->nl ();
02135 
02136   *ps_si << "CORBA::Boolean result =";
02137   ps_si->incr_indent (0);
02138   ps_si->nl ();
02139 
02140   *ps_si << "type->equivalent (";
02141   ps_si->incr_indent (0);
02142   ps_si->incr_indent (0);
02143   ps_si->nl ();
02144   *ps_si << "_tc_" << this->interface_name_ << "";   ps_si->nl ();
02145   *ps_si << "ACE_ENV_ARG_PARAMETER";
02146 
02147   ps_si->decr_indent (0);
02148   ps_si->nl ();
02149   *ps_si << ");";
02150 
02151   ps_si->decr_indent (0);
02152   ps_si->decr_indent (0);
02153   ps_si->nl ();
02154   *ps_si << "ACE_TRY_CHECK;";
02155 
02156   ps_si->nl ();
02157   ps_si->nl ();
02158 
02159   *ps_si << "if (!result)";
02160   ps_si->incr_indent (0);
02161   ps_si->nl ();
02162 
02163   *ps_si << "{";
02164   ps_si->incr_indent (0);
02165   ps_si->nl ();
02166   *ps_si << "return 0; // not equivalent";
02167 
02168   ps_si->decr_indent (0);
02169   ps_si->nl ();
02170   *ps_si << "}";
02171 
02172   ps_si->decr_indent (0);
02173   ps_si->nl ();
02174   ps_si->nl ();
02175 
02176   *ps_si << "TAO_InputCDR stream (";
02177   ps_si->incr_indent (0);
02178   ps_si->incr_indent (0);
02179   ps_si->nl ();
02180 
02181   *ps_si << "_tao_any._tao_get_cdr (),";
02182   ps_si->nl ();
02183   *ps_si << "_tao_any._tao_byte_order ()";
02184   ps_si->decr_indent (0);
02185   ps_si->nl ();
02186   *ps_si << ");";
02187 
02188   ps_si->decr_indent (0);
02189   ps_si->nl ();
02190   ps_si->nl ();
02191 
02192   *ps_si << "if (stream >> _tao_elem)";
02193   ps_si->incr_indent (0);
02194   ps_si->nl ();
02195 
02196   *ps_si << "{";
02197   ps_si->incr_indent (0);
02198   ps_si->nl ();
02199 
02200   *ps_si << "((CORBA::Any *)&_tao_any)->_tao_replace (";
02201   ps_si->incr_indent (0);
02202   ps_si->incr_indent (0);
02203   ps_si->nl ();
02204 
02205   *ps_si << "_tc_" << this->interface_name_ << ",";   ps_si->nl ();
02206   *ps_si << "1,";   ps_si->nl ();
02207   *ps_si << "_tao_elem,";   ps_si->nl ();
02208   *ps_si << this->interface_name_ << "::_tao_any_destructor";
02209 
02210   ps_si->decr_indent (0);
02211   ps_si->nl ();
02212   *ps_si << ");";
02213 
02214   ps_si->decr_indent (0);
02215   ps_si->nl ();
02216   ps_si->nl ();
02217   *ps_si << "return 1;";
02218 
02219   ps_si->decr_indent (0);
02220   ps_si->nl ();
02221   *ps_si << "}";
02222 
02223   ps_si->decr_indent (0);
02224   ps_si->decr_indent (0);
02225   ps_si->nl ();
02226   *ps_si << "}";
02227   ps_si->nl ();
02228 
02229   *ps_si << "ACE_CATCHANY";
02230   ps_si->incr_indent (0);
02231   ps_si->nl ();
02232   *ps_si << "{";   ps_si->nl ();
02233   *ps_si << "}";
02234   ps_si->decr_indent (0);
02235   ps_si->nl ();
02236   *ps_si << "ACE_ENDTRY;";
02237 
02238   ps_si->nl ();
02239   ps_si->nl ();
02240 
02241   *ps_si << "_tao_elem = " << this->interface_name_ << "::_nil ();";
02242   ps_si->nl ();
02243   *ps_si << "return 0;";
02244 
02245   ps_si->decr_indent (0);
02246   ps_si->nl ();
02247   *ps_si << "}";
02248 
02249   ps_si->nl ();
02250   ps_si->nl ();
02251 
02252   *ps_si << "CORBA::Boolean operator<< (";
02253 
02254   ps_si->incr_indent (0);
02255   ps_si->incr_indent (0);
02256   ps_si->nl ();
02257 
02258   *ps_si << "TAO_OutputCDR &strm,";   ps_si->nl ();
02259   *ps_si << "const " << this->interface_name_ << "_ptr _tao_objref";
02260 
02261   ps_si->decr_indent (0);
02262   ps_si->nl ();
02263   *ps_si << ")";
02264   ps_si->decr_indent (0);
02265   ps_si->nl ();
02266 
02267   *ps_si << "{";
02268   ps_si->incr_indent (0);
02269   ps_si->nl ();
02270 
02271   *ps_si << "CORBA::Object_ptr _tao_corba_obj = _tao_objref;";   ps_si->nl ();
02272   *ps_si << "return (strm << _tao_corba_obj);";
02273 
02274   ps_si->decr_indent (0);
02275   ps_si->nl ();
02276   *ps_si << "}";
02277 
02278   ps_si->nl ();
02279   ps_si->nl ();
02280 
02281   *ps_si << "CORBA::Boolean operator>> (";
02282   ps_si->incr_indent (0);
02283   ps_si->incr_indent (0);
02284   ps_si->nl ();
02285 
02286   *ps_si << "TAO_InputCDR &strm,";   ps_si->nl ();
02287   *ps_si << this->interface_name_ << "_ptr &_tao_objref";
02288 
02289   ps_si->decr_indent (0);
02290   ps_si->nl ();
02291   *ps_si << ")";
02292 
02293   ps_si->decr_indent (0);
02294   ps_si->nl ();
02295 
02296   *ps_si << "{";
02297   ps_si->incr_indent (0);
02298   ps_si->nl ();
02299 
02300   *ps_si << "ACE_TRY_NEW_ENV";   ps_si->nl ();
02301   *ps_si << "{";
02302   ps_si->incr_indent (0);
02303   ps_si->nl ();
02304 
02305   *ps_si << "CORBA::Object_var obj;";   ps_si->nl ();
02306   *ps_si << "if ((strm >> obj.inout ()) == 0)";
02307 
02308   ps_si->incr_indent (0);
02309   ps_si->nl ();
02310   *ps_si << "return 0;";
02311   ps_si->decr_indent (0);
02312   ps_si->nl ();
02313 
02314   *ps_si << "// narrow to the right type";   ps_si->nl ();
02315   *ps_si << "_tao_objref =";
02316   ps_si->incr_indent (0);
02317   ps_si->nl ();
02318   *ps_si << this->interface_name_ << "::_unchecked_narrow (";
02319 
02320   ps_si->incr_indent (0);
02321   ps_si->incr_indent (0);
02322   ps_si->nl ();
02323 
02324   *ps_si << "obj.in ()";   ps_si->nl ();
02325   *ps_si << "ACE_ENV_ARG_PARAMETER";
02326 
02327   ps_si->decr_indent (0);
02328   ps_si->nl ();
02329 
02330   *ps_si << ");";
02331 
02332   ps_si->decr_indent (0);
02333   ps_si->decr_indent (0);
02334   ps_si->nl ();
02335 
02336   *ps_si << "ACE_TRY_CHECK;";   ps_si->nl ();
02337   *ps_si << "return 1;";
02338 
02339   ps_si->decr_indent (0);
02340   ps_si->nl ();
02341   *ps_si << "}";
02342 
02343   ps_si->nl ();
02344   *ps_si << "ACE_CATCHANY";   ps_si->nl ();
02345   *ps_si << "{";
02346 
02347   ps_si->incr_indent (0);
02348   ps_si->nl ();
02349   *ps_si << "// do nothing";
02350 
02351   ps_si->decr_indent (0);ps_si->nl ();
02352   *ps_si << "}";
02353 
02354   ps_si->nl ();
02355   *ps_si << "ACE_ENDTRY;";   ps_si->nl ();
02356   *ps_si << "return 0;";
02357 
02358   ps_si->decr_indent (0);
02359   ps_si->nl ();
02360 
02361   *ps_si << "}";
02362 
02363   ps_si->nl ();
02364   ps_si->nl ();
02365 
02366 }

Generated on Thu Nov 9 14:07:02 2006 for TAO_PSS by doxygen 1.3.6