void be_root::Generate (be_ClientImplementation & source) { ostream & os = source.Stream (); TList<be_CodeGenerator*>::iterator iit; TList<be_Type*>::iterator bit; for (iit = implementations.begin(); iit != implementations.end(); iit++) { (*iit)->Generate(source); } os << nl; be_CodeGenerator::Generate (source); os << nl; if (BE_Globals::lite) { DDS_StdString BaseFilename; BaseFilename = StripExtension(source.Filename()); os << "#include \"" << BaseFilename << "-lite.c" << "\"" << nl; } os << nl; source.Close(); }
void be_exception::GenerateAssignmentOperator (be_ClientImplementation& source) { ostream & os = source.Stream (); DDS_StdString that (""); be_Type * btype; if (nmembers ()) { that = " that"; } os << ScopedName () << " & " << ScopedName () << "::operator = (const " << LocalName () << " &" << that << ")" << nl; os << "{" << nl; UTL_Scope * s = (UTL_Scope*)narrow((long) & UTL_Scope::type_id); assert (s); UTL_ScopeActiveIterator *it; // Iterate through decls for ( it = new UTL_ScopeActiveIterator (s, UTL_Scope::IK_decls); ! it->is_done (); it->next () ) { AST_Decl * adecl = it->item (); assert (adecl); be_field *bfield = (be_field *) adecl->narrow ((long) & be_field::type_id); if (bfield) { btype = bfield->get_be_type (); if (btype && btype->IsArrayType ()) { // Need to copy array elements os << " " << (char*) BE_Globals::RelativeScope (ScopedName (), bfield->StructMemberTypeName ()) << "_copy (" << bfield->get_local_name () << ", that." << bfield->get_local_name () << ");" << nl; } else { os << " " << bfield->get_local_name () << " = that." << bfield->get_local_name() << ";" << nl; } } } delete it; os << " return *this;" << nl; os << "}" << nl << nl; }
void be_exception::GenerateCopyConstructor (be_ClientImplementation & source) { ostream & os = source.Stream (); os << ScopedName () << "::" << LocalName () << " (const " << LocalName () << " & that)" << nl << " : DDS::UserException (that)" << nl << "{" << nl << " *this = that;" << nl << "}" << nl << nl; }
void be_exception::Generate (be_ClientImplementation& source) { ostream & os = source.Stream(); be_Tab tab (source); UTL_String * repID = get_decl_pragmas().get_repositoryID(); const DDS_StdString corbaException = "DDS::Exception"; // convenience constructor if (nmembers()) { GenerateConvenienceConstructor(source); } // copy constructor GenerateCopyConstructor (source); // assignment operator GenerateAssignmentOperator (source); be_CodeGenerator::Generate (source); // name and id assert (repID); os << "const char * " << ScopedName () << "::m_name = \"" << LocalName () << "\";" << nl << nl; os << "const char * " << ScopedName () << "::m_id = \"" << repID->get_string () << "\";" << nl << nl; // downcast os << tab << ScopedName () << " * "; os << ScopedName () << "::"; os << "_downcast (DDS::Exception * e)" << nl; os << tab << "{" << nl; tab.indent (); os << tab << "if (e && (e->_rep_id () == m_id))" << nl; os << tab << "{" << nl; tab.indent (); os << tab << "return static_cast < " << LocalName () << "*> (e);" << nl; tab.outdent (); os << tab << "}" << nl; os << tab << "return 0;" << nl; tab.outdent (); os << tab << "}" << nl << nl; // const downcast os << tab << "const " << ScopedName() << " * "; os << ScopedName () << "::"; os << "_downcast (const DDS::Exception * e)" << nl; os << tab << "{" << nl; tab.indent (); os << tab << "if (e && (e->_rep_id () == m_id))" << nl; os << tab << "{" << nl; tab.indent (); os << tab << "return static_cast < " << LocalName () << "*> ((" << LocalName () << "*) e);" << nl; tab.outdent (); os << tab << "}" << nl; os << tab << "return 0;" << nl; tab.outdent (); os << tab << "}" << nl << nl; // _clone os << tab << corbaException << " * " << ScopedName (); os << "::_clone () const" << nl; os << tab << "{" << nl; tab.indent (); os << tab << "return (" << corbaException << "*) new "; os << ScopedName () << " (*this);" << nl; tab.outdent (); os << tab << "}" << nl << nl; // raise os << tab << "void " << ScopedName () << "::_raise (" << XBE_Ev::arg (XBE_ENV_ARG1) << ") const" << nl; os << tab << "{" << nl; tab.indent (); os << tab; XBE_Ev::throwex (os, "*this"); os << nl; tab.outdent (); os << tab << "}" << nl << nl; // factory os << tab << "DDS::Exception * " << ScopedName() << "::factory ()" << nl; os << tab << "{" << nl; tab.indent (); os << tab << "return new " << ScopedName () << ";" << nl; tab.outdent (); os << tab << "}" << nl << nl; // initilaizer os << "DDS::ExceptionInitializer " << ScopedName() << "::m_initializer ("; os << "\"" << repID->get_string () << "\""; os << ", " << ScopedName () << "::factory);" << nl; }
void be_exception::GenerateConvenienceConstructor (be_ClientImplementation & source) { ostream & os = source.Stream (); const char * argPrefix = "_"; pbbool first = pbtrue; be_Tab tab (source); be_Type * btype; os << ScopedName () << "::" << LocalName () << " ("; UTL_Scope * s = (UTL_Scope*)narrow ((long) & UTL_Scope::type_id); assert (s); // Iterate through decls UTL_ScopeActiveIterator * it; for ( it = new UTL_ScopeActiveIterator (s, UTL_Scope::IK_decls); !it->is_done (); it->next () ) { AST_Decl * adecl = it->item (); assert (adecl); be_field *bfield = (be_field *)adecl->narrow ((long) & be_field::type_id); if (bfield) { btype = bfield->get_be_type (); if (!first) { os << ", "; } first = pbfalse; if (btype && btype->IsStringType ()) { // Strings are special case os << (char*) BE_Globals::RelativeScope (ScopedName (), bfield->InTypeName ()); } else { os << (char*) BE_Globals::RelativeScope (ScopedName (), bfield->StructMemberTypeName ()); } os << " " << argPrefix << (char*) bfield->get_local_name (); } } delete it; os << ")" << nl; // Iterate thru members initializing if (nmembers ()) { source.Indent (); first = pbtrue; for ( it = new UTL_ScopeActiveIterator (s, UTL_Scope::IK_decls); !it->is_done (); it->next () ) { AST_Decl * adecl = it->item (); assert (adecl); be_field *bfield = (be_field *)adecl->narrow ((long) & be_field::type_id); if (bfield) { btype = bfield->get_be_type (); // Array members are assigned in body of method if (btype && ! btype->IsArrayType ()) { if (first) { first = pbfalse; os << " : " << nl; } else { os << "," << nl; } os << " " << (char*) bfield->get_local_name () << "(" << argPrefix << (char*) bfield->get_local_name () << ")"; } } } delete it; source.Outdent (); } os << nl; os << tab << "{" << nl; for ( it = new UTL_ScopeActiveIterator (s, UTL_Scope::IK_decls); ! it->is_done (); it->next () ) { AST_Decl * adecl = it->item (); assert (adecl); be_field *bfield = (be_field *) adecl->narrow ((long) & be_field::type_id); if (bfield) { btype = bfield->get_be_type (); if (btype && btype->IsArrayType ()) { // Need to copy array elements os << " " << (char*) BE_Globals::RelativeScope (ScopedName (), bfield->StructMemberTypeName ()) << "_copy (" << argPrefix << bfield->get_local_name () << ", " << bfield->get_local_name () << ");" << nl; } } } delete it; os << "}" << nl << nl; }
void be_sequence::GenerateSequence (be_ClientImplementation & source) { ostream & os = source.Stream (); be_Tab tab (source); DDS_StdString elemName; elemName = baseType->ScopedName(); DDS_StdString FileClassname; DDS_StdString charFileClassname; DDS_StdString boolFileClassname; FileClassname = elemName; charFileClassname = DDS_StdString("DDSChar"); boolFileClassname = DDS_StdString("DDSBoolean"); os << "#if DDS_USE_EXPLICIT_TEMPLATES" << nl; if (IsBounded()) { // Bounded sequence types if (baseType->IsFixedLength()) { be_predefined_type * pdt = be_predefined_type::_narrow(base_type()); os << tab << "template class DDS_DCPSBFLSeq < " << elemName << ", " << FileClassname << ", " << maxSize << ">;" << nl; } else if (isInterfaceSeq) { os << tab << "template class DDS_DCPSBObjSeq < " << elemName << ", struct " << localName << "_uniq_, " << maxSize << ">;" << nl; } else if (isValueSeq) { os << tab << "template class DDS_DCPSBValSeq < " << elemName << ", " << maxSize << ">;" << nl; } else { os << tab << "template class DDS_DCPSBVLSeq < " << elemName << ", " << maxSize << ">;" << nl; } } else { // Unbounded sequence types if (baseType->IsFixedLength ()) { os << tab << "template class DDS_DCPSUFLSeq < " << elemName << ", struct " << localName << "_uniq_>;" << nl; } else if (isInterfaceSeq) { os << tab << "template class DDS_DCPSUObjSeq < " << elemName << ", struct " << localName << "_uniq_>;" << nl; } else if (isValueSeq) { os << tab << "template class DDS_DCPSUValSeq < " << elemName << ">;" << nl; } else { os << tab << "template class DDS_DCPSUVLSeq < " << elemName << ", struct " << localName << "_uniq_>;" << nl; } } os << "#endif" << nl; }