From: skl Date: Mon, 30 Nov 2020 08:35:00 +0000 (+0300) Subject: 0031481: Data Exchange - provide parser of STEP EXPRESS schema for generation of... X-Git-Url: http://git.dev.opencascade.org/gitweb/?a=commitdiff_plain;h=eecdcbfd7b36bbaffd49f0744b7167bc41cbcda4;p=occt-copy.git 0031481: Data Exchange - provide parser of STEP EXPRESS schema for generation of new STEP entities Changes for correspondence generated files to OCCT Code Rules. --- diff --git a/src/Express/Express_Entity.cxx b/src/Express/Express_Entity.cxx index 30a8e3a999..174f0f6db1 100644 --- a/src/Express/Express_Entity.cxx +++ b/src/Express/Express_Entity.cxx @@ -222,7 +222,7 @@ Standard_Boolean Express_Entity::GenerateClass () const // write start of declaration (inheritance) os << "//! Representation of STEP entity " << Name()->ToCString() << std::endl; os << "class " << CPPname->ToCString() << " : public " << InheritName->ToCString(); - os << std::endl << "{" << std::endl; + os << std::endl << "{" << std::endl << std::endl; os << "public :" << std::endl << std::endl; // write constructor @@ -233,8 +233,8 @@ Standard_Boolean Express_Entity::GenerateClass () const // write Init methods if ( myInherit->Length() > 1 || myFields->Length() > 0 ) { os << " //! Initialize all fields (own and inherited)" << std::endl; - os << " Standard_EXPORT void Init("; - MakeInit ( os, 27, Standard_True, 0 ); + os << " Standard_EXPORT void Init("; + MakeInit ( os, 28, Standard_True, 0 ); os << ");" << std::endl; os << std::endl; } @@ -274,13 +274,13 @@ Standard_Boolean Express_Entity::GenerateClass () const os << std::endl; } - os << "DEFINE_STANDARD_RTTIEXT(" << CPPname->ToCString() << ", " << InheritName->ToCString() << ")" << std::endl; + os << " DEFINE_STANDARD_RTTIEXT(" << CPPname->ToCString() << ", " << InheritName->ToCString() << ")" << std::endl; os << std::endl; // write fields section if ( myInherit->Length() >1 || myFields->Length() >0 ) { - os << "private:" << std::endl; + os << "private:" << std::endl << std::endl; for (Standard_Integer i = 2; i <= myInherit->Length(); i++) { Handle(Express_Entity) it = myInherit->Value(i); @@ -319,7 +319,7 @@ Standard_Boolean Express_Entity::GenerateClass () const } // write end - os << "};" << std::endl; + os << "};" << std::endl << std::endl; os << "#endif // _" << CPPname->ToCString() << "_HeaderFile_" << std::endl; os.close(); @@ -338,75 +338,75 @@ Standard_Boolean Express_Entity::GenerateClass () const os << "IMPLEMENT_STANDARD_RTTIEXT(" << CPPname->ToCString() << ", " << InheritName->ToCString() << ")" << std::endl; // write constructor - Express::WriteMethodStamp ( os, CPPname ); + Express::WriteMethodStamp(os, CPPname); os << CPPname->ToCString() << "::" << CPPname->ToCString() << " ()" << std::endl; os << "{" << std::endl; - for (Standard_Integer i=1; i <= myFields->Length(); i++ ) + for (Standard_Integer i = 1; i <= myFields->Length(); i++) { - Handle(Express_Field) field = myFields->Value ( i ); - if ( field->IsOptional() ) os << " def" << field->Name()->ToCString() << " = Standard_False;" << std::endl; + Handle(Express_Field) field = myFields->Value(i); + if (field->IsOptional()) os << " def" << field->Name()->ToCString() << " = Standard_False;" << std::endl; } os << "}" << std::endl; // write method Init() - if ( myInherit->Length() >1 || myFields->Length() >0 ) + if (myInherit->Length() > 1 || myFields->Length() > 0) { - Express::WriteMethodStamp ( os, new TCollection_HAsciiString ( "Init" ) ); + Express::WriteMethodStamp(os, new TCollection_HAsciiString("Init")); os << "void " << CPPname->ToCString() << "::Init ("; - MakeInit ( os, 13 + CPPname->Length(), Standard_True, 1 ); + MakeInit(os, 13 + CPPname->Length(), Standard_True, 1); os << ")\n{"; - MakeInit ( os, -2, Standard_True, 3 ); + MakeInit(os, -2, Standard_True, 3); os << "\n}" << std::endl; } // write "methods" section - for (Standard_Integer i=2; i <= myInherit->Length(); i++ ) + for (Standard_Integer i = 2; i <= myInherit->Length(); i++) { Handle(Express_Entity) it = myInherit->Value(i); - WriteGetMethod ( os, CPPname, it->Name(), it->CPPName(), Standard_True, Standard_False ); - WriteSetMethod ( os, CPPname, it->Name(), it->CPPName(), Standard_True, Standard_False ); + WriteGetMethod(os, CPPname, it->Name(), it->CPPName(), Standard_True, Standard_False); + WriteSetMethod(os, CPPname, it->Name(), it->CPPName(), Standard_True, Standard_False); } - for (Standard_Integer i=1; i <= myFields->Length(); i++ ) + for (Standard_Integer i = 1; i <= myFields->Length(); i++) { - Handle(Express_Field) field = myFields->Value ( i ); + Handle(Express_Field) field = myFields->Value(i); Handle(Express_Type) type = field->Type(); - WriteGetMethod ( os, CPPname, field->Name(), type->CPPName(), type->IsHandle(), type->IsSimple() ); - WriteSetMethod ( os, CPPname, field->Name(), type->CPPName(), type->IsHandle(), type->IsSimple() ); + WriteGetMethod(os, CPPname, field->Name(), type->CPPName(), type->IsHandle(), type->IsSimple()); + WriteSetMethod(os, CPPname, field->Name(), type->CPPName(), type->IsHandle(), type->IsSimple()); if (!field->IsOptional()) { continue; } - Handle(TCollection_HAsciiString) method = new TCollection_HAsciiString ( "Has" ); - method->AssignCat ( field->Name() ); - Express::WriteMethodStamp ( os, method ); + Handle(TCollection_HAsciiString) method = new TCollection_HAsciiString("Has"); + method->AssignCat(field->Name()); + Express::WriteMethodStamp(os, method); os << "Standard_Boolean " << CPPname->ToCString() << "::" << method->ToCString() << " () const" << std::endl; os << "{" << std::endl << " return def" << field->Name()->ToCString() << ";\n}" << std::endl; } - + // close os.close(); - if(AbstractFlag()) return Standard_True; + if (AbstractFlag()) return Standard_True; //=============================== // Step 3: generating HXX for Reader/Writer class - + // Open HXX file - Handle(TCollection_HAsciiString) RWCPPName = new TCollection_HAsciiString ( "RW" ); - RWCPPName->AssignCat ( GetPackageName() ); - RWCPPName->AssignCat ( "_RW" ); - RWCPPName->AssignCat ( Name() ); + Handle(TCollection_HAsciiString) RWCPPName = new TCollection_HAsciiString("RW"); + RWCPPName->AssignCat(GetPackageName()); + RWCPPName->AssignCat("_RW"); + RWCPPName->AssignCat(Name()); pack = "RW"; pack += GetPackageName()->String(); - OSD_Path rwpath ( pack ); - OSD_Directory rwdir ( rwpath ); - rwdir.Build ( prot ); + OSD_Path rwpath(pack); + OSD_Directory rwdir(rwpath); + rwdir.Build(prot); pack += "/"; pack += RWCPPName->String(); - - os.open ( pack.Cat ( ".hxx" ).ToCString() ); + + os.open(pack.Cat(".hxx").ToCString()); // write header - Express::WriteFileStamp ( os ); + Express::WriteFileStamp(os); os << "#ifndef _" << RWCPPName->ToCString() << "_HeaderFile_" << std::endl; os << "#define _" << RWCPPName->ToCString() << "_HeaderFile_" << std::endl; @@ -427,7 +427,7 @@ Standard_Boolean Express_Entity::GenerateClass () const // write start of declaration (inheritance) os << "//! Read & Write tool for " << Name()->ToCString() << std::endl; os << "class " << RWCPPName->ToCString() << std::endl; - os << "{" << std::endl; + os << "{" << std::endl << std::endl; os << "public:" << std::endl; os << std::endl << " DEFINE_STANDARD_ALLOC" << std::endl << std::endl; @@ -435,20 +435,23 @@ Standard_Boolean Express_Entity::GenerateClass () const os << " Standard_EXPORT " << RWCPPName->ToCString() << "();" << std::endl << std::endl; // read step - os << " Standard_EXPORT void ReadStep(const Handle(StepData_StepReaderData)& data," << - " const Standard_Integer num, Handle(Interface_Check)& ach, const Handle(" << - CPPName()->ToCString() << ")& ent) const;" << std::endl << std::endl; + os << " Standard_EXPORT void ReadStep(const Handle(StepData_StepReaderData)& data," << std::endl; + os << " const Standard_Integer num," << std::endl; + os << " Handle(Interface_Check)& ach," << std::endl; + os << " const Handle(" << CPPName()->ToCString() << ")& ent) const;" + << std::endl << std::endl; // write step - os << " Standard_EXPORT void WriteStep(StepData_StepWriter& SW, const Handle(" << - CPPName()->ToCString() << ")& ent) const;" << std::endl << std::endl; + os << " Standard_EXPORT void WriteStep(StepData_StepWriter& SW," << std::endl; + os << " const Handle(" << CPPName()->ToCString() << ")& ent) const;" + << std::endl << std::endl; // share - os << " Standard_EXPORT void Share(const Handle(" << - CPPName()->ToCString() << ")& ent, Interface_EntityIterator& iter) const;" << std::endl << std::endl; + os << " Standard_EXPORT void Share(const Handle(" << CPPName()->ToCString() << ")& ent," << std::endl; + os << " Interface_EntityIterator& iter) const;" << std::endl << std::endl; // write end - os << "};" << std::endl; + os << "};" << std::endl << std::endl; os << "#endif // _" << RWCPPName->ToCString() << "_HeaderFile_" << std::endl; os.close(); @@ -476,19 +479,33 @@ Standard_Boolean Express_Entity::GenerateClass () const // write method ReadStep Express::WriteMethodStamp(os, new TCollection_HAsciiString("ReadStep")); - os << "void " << RWCPPName->ToCString() << "::ReadStep (const Handle(StepData_StepReaderData)& data," << std::endl; - WriteSpaces ( os, 17 + RWCPPName->Length() ); - os << "const Standard_Integer num," << std::endl; - WriteSpaces ( os, 17 + RWCPPName->Length() ); - os << "Handle(Interface_Check)& ach," << std::endl; - WriteSpaces ( os, 17 + RWCPPName->Length() ); - os << "const Handle(" << CPPname->ToCString() << ")& ent) const" << std::endl; + if (RWCPPName->Length() < 40) + { + os << "void " << RWCPPName->ToCString() << "::ReadStep (const Handle(StepData_StepReaderData)& data," << std::endl; + WriteSpaces(os, 17 + RWCPPName->Length()); + os << "const Standard_Integer num," << std::endl; + WriteSpaces(os, 17 + RWCPPName->Length()); + os << "Handle(Interface_Check)& ach," << std::endl; + WriteSpaces(os, 17 + RWCPPName->Length()); + os << "const Handle(" << CPPname->ToCString() << ")& ent) const" << std::endl; + } + else + { + os << "void " << RWCPPName->ToCString() << "::ReadStep(" << std::endl; + os << " const Handle(StepData_StepReaderData)& data," << std::endl; + os << " const Standard_Integer num," << std::endl; + os << " Handle(Interface_Check)& ach," << std::endl; + os << " const Handle(" << CPPname->ToCString() << ")& ent) const" << std::endl; + } os << "{" << std::endl; Standard_Integer nbFld = NbFields ( Standard_True ); os << " // Check number of parameters" << std::endl; - os << " if ( ! data->CheckNbParams(num," << nbFld << ",ach,\"" << - Express::ToStepName(Name())->ToCString() << "\") ) return;" << std::endl; + os << " if (!data->CheckNbParams(num, " << nbFld << ", ach, \"" << + Express::ToStepName(Name())->ToCString() << "\"))" << std::endl; + os << " {" << std::endl; + os << " return;" << std::endl; + os << " }" << std::endl; WriteRWReadCode(os, 1, Standard_True); // write code for reading inherited and own fields os << std::endl; os << " // Initialize entity" << std::endl; @@ -498,9 +515,18 @@ Standard_Boolean Express_Entity::GenerateClass () const // write method WriteStep Express::WriteMethodStamp ( os, new TCollection_HAsciiString ( "WriteStep" ) ); - os << "void " << RWCPPName->ToCString() << "::WriteStep (StepData_StepWriter& SW," << std::endl; - WriteSpaces ( os, 18 + RWCPPName->Length() ); - os << "const Handle(" << CPPname->ToCString() << ")& ent) const" << std::endl; + if (RWCPPName->Length() < 40) + { + os << "void " << RWCPPName->ToCString() << "::WriteStep (StepData_StepWriter& SW," << std::endl; + WriteSpaces(os, 18 + RWCPPName->Length()); + os << "const Handle(" << CPPname->ToCString() << ")& ent) const" << std::endl; + } + else + { + os << "void " << RWCPPName->ToCString() << "::WriteStep(" << std::endl; + os << " StepData_StepWriter& SW," << std::endl; + os << " const Handle(" << CPPname->ToCString() << ")& ent) const" << std::endl; + } os << "{" << std::endl; WriteRWWriteCode(os, 0, Standard_True); // write code for writing inherited and own fields @@ -508,9 +534,18 @@ Standard_Boolean Express_Entity::GenerateClass () const // write method Share Express::WriteMethodStamp ( os, new TCollection_HAsciiString ( "Share" ) ); - os << "void " << RWCPPName->ToCString() << "::Share (const Handle(" << CPPname->ToCString() << ")& ent," << std::endl; - WriteSpaces ( os, 14 + RWCPPName->Length() ); - os << "Interface_EntityIterator& iter) const" << std::endl; + if (RWCPPName->Length() < 40) + { + os << "void " << RWCPPName->ToCString() << "::Share (const Handle(" << CPPname->ToCString() << ")& ent," << std::endl; + WriteSpaces(os, 14 + RWCPPName->Length()); + os << "Interface_EntityIterator& iter) const" << std::endl; + } + else + { + os << "void " << RWCPPName->ToCString() << "::Share(" << std::endl; + os << " const Handle(" << CPPname->ToCString() << ")& ent," << std::endl; + os << " Interface_EntityIterator& iter) const" << std::endl; + } os << "{" << std::endl; WriteRWShareCode ( os, 1, Standard_True ); // write code for filling graph of references os << "}" << std::endl; @@ -799,7 +834,8 @@ static void WriteRWReadField( if (optional) { os << shift << "Standard_Boolean has" << varname << " = Standard_True;" << std::endl; - os << shift << "if ( data->IsParamDefined (" << param << "," << index << ") ) {" << std::endl; + os << shift << "if (data->IsParamDefined(" << param << ", " << index << "))" << std::endl; + os << shift << "{" << std::endl; shift += " "; level++; } @@ -810,19 +846,19 @@ static void WriteRWReadField( Handle(Express_NamedType) named = Handle(Express_NamedType)::DownCast(type); if (named->Item()->IsKind(STANDARD_TYPE(Express_Entity))) { - os << shift << "data->ReadEntity (" << param << ", " << index << ", \"" << STEPName << - "\", ach, STANDARD_TYPE(" << named->CPPName()->ToCString() << "), a" << - varname << ");" << std::endl; + os << shift << "data->ReadEntity(" << param << ", " << index << ", \"" << STEPName << "\", ach," << std::endl; + os << shift << " STANDARD_TYPE(" << named->CPPName()->ToCString() << "), a" << varname << ");" << std::endl; } else if (named->Item()->IsKind(STANDARD_TYPE(Express_Select))) { - os << shift << "data->ReadEntity (" << param << ", " << index << ", \"" << STEPName << + os << shift << "data->ReadEntity(" << param << ", " << index << ", \"" << STEPName << "\", ach, a" << varname << ");" << std::endl; } else if (named->Item()->IsKind(STANDARD_TYPE(Express_Enum))) { - os << shift << "if (data->ParamType (" << param << ", " << - index << ") == Interface_ParamEnum) {" << std::endl; + os << shift << "if (data->ParamType(" << param << ", " << + index << ") == Interface_ParamEnum)" << std::endl; + os << shift << "{" << std::endl; os << shift << " Standard_CString text = data->ParamCValue(" << param << ", " << index << ");" << std::endl; Handle(Express_Enum) en = Handle(Express_Enum)::DownCast(named->Item()); @@ -838,11 +874,17 @@ static void WriteRWReadField( varname << " = " << enpack.ToCString() << "_" << prefix->ToCString() << names->Value(i)->ToCString() << ";" << std::endl; } - os << shift << " else ach->AddFail(\"Parameter #" << index << " (" << - STEPName << ") has not allowed value\");" << std::endl; + os << shift << " else" << std::endl; + os << shift << " {" << std::endl; + os << shift << " ach->AddFail(\"Parameter #" << index << " (" << STEPName + << ") has not allowed value\");" << std::endl; + os << shift << " }" << std::endl; + os << shift << "}" << std::endl; + os << shift << "else" << std::endl; + os << shift << "{" << std::endl; + os << shift << " ach->AddFail(\"Parameter #" << index << " (" << STEPName + << ") is not enumeration\");" << std::endl; os << shift << "}" << std::endl; - os << shift << "else ach->AddFail(\"Parameter #" << index << " (" << - STEPName << ") is not enumeration\");" << std::endl; //os << "!!! READING/WRITING ENUM NOT IMPLEMENTED !!!" << std::endl; //std::cout << "Warning: Reading/Writing ENUMERATION not yet implemented (" << //STEPName << ", " << varname << ", " << type->CPPName()->ToCString() << ")" << std::endl; @@ -852,8 +894,9 @@ static void WriteRWReadField( { Handle(Express_ComplexType) complex = Handle(Express_ComplexType)::DownCast(type); os << shift << "Standard_Integer sub" << index << " = 0;" << std::endl; - os << shift << "if ( data->ReadSubList (" << param << ", " << index << ", \"" << - STEPName << "\", ach, sub" << index << ") ) {" << std::endl; + os << shift << "if (data->ReadSubList(" << param << ", " << index << ", \"" << + STEPName << "\", ach, sub" << index << "))" << std::endl; + os << shift << "{" << std::endl; os << shift << " Standard_Integer nb" << lev << " = data->NbParams(sub" << index << ");" << std::endl; TCollection_AsciiString iter = lev; iter.Prepend("i"); @@ -867,15 +910,17 @@ static void WriteRWReadField( os << shift << " Standard_Integer nbj" << lev << " = data->NbParams(data->ParamNumber(sub" << index << ",1));" << std::endl; os << shift << " a" << varname << " = new " << type->CPPName()->ToCString() << - " (1, nb" << lev << ", 1, nbj" << lev << ");" << std::endl; - os << shift << " for ( Standard_Integer " << iter << "=1; " << iter << " <= nb" << lev << - "; " << iter << "++ ) {" << std::endl; + "(1, nb" << lev << ", 1, nbj" << lev << ");" << std::endl; + os << shift << " for (Standard_Integer " << iter << " = 1; " << iter << " <= nb" + << lev << "; " << iter << "++)" << std::endl; + os << shift << " {" << std::endl; os << shift << " Standard_Integer subj" << index << " = 0;" << std::endl; os << shift << " if ( data->ReadSubList (sub" << index << ", " << iter << ", \"sub-part(" << STEPName << ")\", ach, subj" << index << ") ) {" << std::endl; os << shift << " Standard_Integer num" << level + 2 << " = subj" << index << ";" << std::endl; - os << shift << " for ( Standard_Integer " << jter << "=1; " << jter << " <= nbj" << lev << - "; " << jter << "++ ) {" << std::endl; + os << shift << " for (Standard_Integer " << jter << " = 1; " << jter << " <= nbj" << lev << + "; " << jter << "++)" << std::endl; + os << shift << " {" << std::endl; Handle(TCollection_HAsciiString) subName = typeToSTEPName(complex2->Type()); WriteRWReadField(os, jter.ToCString(), subName->ToCString(), var.ToCString(), complex2->Type(), level + 2, Standard_False); @@ -887,10 +932,11 @@ static void WriteRWReadField( else { // simple array os << shift << " a" << varname << " = new " << type->CPPName()->ToCString() << - " (1, nb" << lev << ");" << std::endl; + "(1, nb" << lev << ");" << std::endl; os << shift << " Standard_Integer num" << level << " = sub" << index << ";" << std::endl; - os << shift << " for ( Standard_Integer " << iter << "=1; " << iter << " <= nb" << lev << - "; " << iter << "++ ) {" << std::endl; + os << shift << " for (Standard_Integer " << iter << " = 1; " << iter << " <= nb" << lev << + "; " << iter << "++)" << std::endl; + os << shift << " {" << std::endl; Handle(TCollection_HAsciiString) subName = typeToSTEPName(complex->Type()); WriteRWReadField(os, iter.ToCString(), subName->ToCString(), var.ToCString(), complex->Type(), level, Standard_False); @@ -901,27 +947,35 @@ static void WriteRWReadField( } else if (type->IsKind(STANDARD_TYPE(Express_String))) { - os << shift << "data->ReadString (" << param << ", " << index << ", \"" << STEPName << - "\", ach, a" << varname << ");" << std::endl; + if (strlen(STEPName) + strlen(varname) < 70) + { + os << shift << "data->ReadString(" << param << ", " << index << ", \"" << STEPName << + "\", ach, a" << varname << ");" << std::endl; + } + else + { + os << shift << "data->ReadString(" << param << ", " << index << ", \"" << STEPName << "\", ach," << std::endl; + os << shift << " a" << varname << ");" << std::endl; + } } else if (type->IsKind(STANDARD_TYPE(Express_Logical))) { - os << shift << "data->ReadLogical (" << param << ", " << index << ", \"" << STEPName << + os << shift << "data->ReadLogical(" << param << ", " << index << ", \"" << STEPName << "\", ach, a" << varname << ");" << std::endl; } else if (type->IsKind(STANDARD_TYPE(Express_Boolean))) { - os << shift << "data->ReadBoolean (" << param << ", " << index << ", \"" << STEPName << + os << shift << "data->ReadBoolean(" << param << ", " << index << ", \"" << STEPName << "\", ach, a" << varname << ");" << std::endl; } else if (type->IsKind(STANDARD_TYPE(Express_Number)) || type->IsKind(STANDARD_TYPE(Express_Integer))) { - os << shift << "data->ReadInteger (" << param << ", " << index << ", \"" << STEPName << + os << shift << "data->ReadInteger(" << param << ", " << index << ", \"" << STEPName << "\", ach, a" << varname << ");" << std::endl; } else if (type->IsKind(STANDARD_TYPE(Express_Real))) { - os << shift << "data->ReadReal (" << param << ", " << index << ", \"" << STEPName << + os << shift << "data->ReadReal(" << param << ", " << index << ", \"" << STEPName << "\", ach, a" << varname << ");" << std::endl; } @@ -929,7 +983,8 @@ static void WriteRWReadField( { shift.Remove(1, 2); os << shift << "}" << std::endl; - os << shift << "else {" << std::endl; + os << shift << "else" << std::endl; + os << shift << "{" << std::endl; os << shift << " has" << varname << " = Standard_False;" << std::endl; os << shift << " a" << varname; if (type->IsHandle()) @@ -1036,16 +1091,18 @@ static void WriteRWWriteField( TCollection_AsciiString var(lev); var.Prepend("Var"); os << shift << "SW.OpenSub();" << std::endl; - os << shift << "for (Standard_Integer i" << index << "=1; i" << index << " <= "; + os << shift << "for (Standard_Integer i" << index << " = 1; i" << index << " <= "; if (type->IsKind(STANDARD_TYPE(Express_ComplexType))) { // array 2 Handle(Express_ComplexType) complex2 = Handle(Express_ComplexType)::DownCast(type); type = complex2->Type(); - os << varname << "->RowLength(); i" << index << "++ ) {" << std::endl; + os << varname << "->RowLength(); i" << index << "++)" << std::endl; + os << shift << "{" << std::endl; os << shift << " SW.NewLine(Standard_False);" << std::endl; os << shift << " SW.OpenSub();" << std::endl; - os << shift << " for (Standard_Integer j" << index << "=1; j" << index << " <= " << - varname << "->ColLength(); j" << index << "++ ) {" << std::endl; + os << shift << " for (Standard_Integer j" << index << " = 1; j" << index << " <= " << + varname << "->ColLength(); j" << index << "++)" << std::endl; + os << shift << " {" << std::endl; os << shift << " " << (type->IsHandle() ? " Handle(" : " ") << type->CPPName()->ToCString() << (type->IsHandle() ? ") " : " ") << var.ToCString() << " = " << varname << "->Value(i" << index << ",j" << index << ");" << std::endl; @@ -1055,7 +1112,8 @@ static void WriteRWWriteField( } else { // simple array - os << varname << "->Length(); i" << index << "++ ) {" << std::endl; + os << varname << "->Length(); i" << index << "++)" << std::endl; + os << shift << "{" << std::endl; os << shift << (type->IsHandle() ? " Handle(" : " ") << type->CPPName()->ToCString() << (type->IsHandle() ? ") " : " ") << var.ToCString() << " = " << varname << "->Value(i" << index << ");" << std::endl; @@ -1066,11 +1124,11 @@ static void WriteRWWriteField( } else if (type->IsKind(STANDARD_TYPE(Express_Boolean))) { - os << shift << "SW.SendBoolean (" << varname << ");" << std::endl; + os << shift << "SW.SendBoolean(" << varname << ");" << std::endl; } else if (type->IsKind(STANDARD_TYPE(Express_Logical))) { - os << shift << "SW.SendLogical (" << varname << ");" << std::endl; + os << shift << "SW.SendLogical(" << varname << ");" << std::endl; } else { @@ -1081,20 +1139,21 @@ static void WriteRWWriteField( Handle(TCollection_HAsciiString) prefix = Express::EnumPrefix(en->Name()); Handle(TColStd_HSequenceOfHAsciiString) names = en->Names(); TCollection_AsciiString enpack = en->GetPackageName()->String(); - os << shift << "switch (" << varname << ") {" << std::endl; + os << shift << "switch (" << varname << ")" << std::endl; + os << shift << "{" << std::endl; for (Standard_Integer i = 1; i <= names->Length(); i++) { Handle(TCollection_HAsciiString) ename = Express::ToStepName(names->Value(i)); ename->UpperCase(); os << shift << " case " << enpack.ToCString() << "_" << prefix->ToCString() << - names->Value(i)->ToCString() << ": SW.SendEnum (\"." << + names->Value(i)->ToCString() << ": SW.SendEnum(\"." << ename->ToCString() << ".\"); break;" << std::endl; } os << shift << "}" << std::endl; } else { - os << shift << "SW.Send (" << varname; + os << shift << "SW.Send(" << varname; if (!named.IsNull() && named->Item()->IsKind(STANDARD_TYPE(Express_Select))) { os << ".Value()"; @@ -1129,7 +1188,7 @@ Standard_Integer Express_Entity::WriteRWWriteCode( os << " // " << ( own == 1 ? "Own" : "Inherited" ) << " fields of " << Name()->ToCString() << std::endl; } - for (Standard_Integer i=1; i <= myFields->Length(); i++ ) + for (Standard_Integer i = 1; i <= myFields->Length(); i++) { Handle(Express_Field) field = myFields->Value(i); TCollection_AsciiString varName ( field->Name()->String() ); @@ -1147,7 +1206,7 @@ Standard_Integer Express_Entity::WriteRWWriteCode( if (field->IsOptional()) { - os << " if ( ent->"; + os << " if (ent->"; if (!own) { os << CPPName()->ToCString() << "::"; @@ -1156,12 +1215,17 @@ Standard_Integer Express_Entity::WriteRWWriteCode( { os << Name()->ToCString() << "()->"; } - os << "Has" << field->Name()->ToCString() << "() ) {" << std::endl; + os << "Has" << field->Name()->ToCString() << "())" << std::endl; + os << " {" << std::endl; } WriteRWWriteField(os, varName.ToCString(), field->Type(), num, (field->IsOptional() ? 1 : 0)); if (field->IsOptional()) { - os << " }\n else SW.SendUndef();" << std::endl; + os << " }" << std::endl; + os << " else" << std::endl; + os << " {" << std::endl; + os << " SW.SendUndef();" << std::endl; + os << " }" << std::endl; } num++; } @@ -1215,8 +1279,9 @@ static Standard_Boolean WriteRWShareField( { return Standard_False; } - os << shift << "for (Standard_Integer i" << index << "=1; i" << index << " <= " << - varname << "->Length(); i" << index << "++ ) {" << std::endl; + os << shift << "for (Standard_Integer i" << index << " = 1; i" << index << " <= " << + varname << "->Length(); i" << index << "++)" << std::endl; + os << shift << "{" << std::endl; os << shift << (type->IsHandle() ? " Handle(" : " ") << type->CPPName()->ToCString() << (type->IsHandle() ? ") " : " ") << var.ToCString() << " = " << varname << "->Value(i" << index << ");" << std::endl; @@ -1230,12 +1295,12 @@ static Standard_Boolean WriteRWShareField( Handle(Express_NamedType) named = Handle(Express_NamedType)::DownCast(type); if (named->Item()->IsKind(STANDARD_TYPE(Express_Entity))) { - os << shift << "iter.AddItem (" << varname << ");" << std::endl; + os << shift << "iter.AddItem(" << varname << ");" << std::endl; return Standard_True; } if (named->Item()->IsKind(STANDARD_TYPE(Express_Select))) { - os << shift << "iter.AddItem (" << varname << ".Value());" << std::endl; + os << shift << "iter.AddItem(" << varname << ".Value());" << std::endl; return Standard_True; } } @@ -1267,21 +1332,21 @@ Standard_Integer Express_Entity::WriteRWShareCode( os << " // " << ( own == 1 ? "Own" : "Inherited" ) << " fields of " << Name()->ToCString() << std::endl; } - for (Standard_Integer i=1; i <= myFields->Length(); i++ ) + for (Standard_Integer i = 1; i <= myFields->Length(); i++) { Handle(Express_Field) field = myFields->Value(i); - TCollection_AsciiString varName ( field->Name()->String() ); + TCollection_AsciiString varName(field->Name()->String()); if (!own) { varName.Prepend(CPPName()->Cat("::")->String()); } - else if ( own ==-1 ) + else if (own == -1) { // inherited base class implemented as field - varName.Prepend ( Name()->Cat ( "()->" )->String() ); + varName.Prepend(Name()->Cat("()->")->String()); } - varName.Prepend ( "ent->" ); - varName.AssignCat ( "()" ); - + varName.Prepend("ent->"); + varName.AssignCat("()"); + std::ostringstream oos; if (!WriteRWShareField(oos, varName.ToCString(), field->Type(), num, (field->IsOptional() ? 1 : 0))) { @@ -1291,10 +1356,11 @@ Standard_Integer Express_Entity::WriteRWShareCode( os << std::endl; if (field->IsOptional()) { - os << " if ( ent->"; - if ( ! own ) os << CPPName()->ToCString() << "::"; - else if ( own ==-1 ) os << Name()->ToCString() << "()->"; - os << "Has" << field->Name()->ToCString() << "() ) {" << std::endl; + os << " if (ent->"; + if (!own) os << CPPName()->ToCString() << "::"; + else if (own == -1) os << Name()->ToCString() << "()->"; + os << "Has" << field->Name()->ToCString() << "())" << std::endl; + os << " {" << std::endl; } os << oos.str(); @@ -1365,7 +1431,15 @@ Standard_Integer Express_Entity::MakeInit (Standard_OStream &os, Standard_Character delim = (mode == 0 ? ',' : (mode == 3 ? '\n' : ',')); if (sh < 0) { - os << delim << "\n" << space; + if (i == 1 && myInherit->Length() == 0 && mode == 3) + { + os << delim << space; + + } + else + { + os << delim << "\n" << space; + } } else { @@ -1408,12 +1482,13 @@ Standard_Integer Express_Entity::MakeInit (Standard_OStream &os, if (field->IsOptional()) { os << "def" << field->Name()->ToCString() << " = has" << varName->ToCString() << ";" << std::endl; - os << " if (def" << field->Name()->ToCString() << ") {\n "; - } - os << "my" << field->Name()->ToCString() << " = the" << varName->ToCString() << ";"; - if (field->IsOptional()) - { - os << "\n }\n else my" << field->Name()->ToCString(); + os << " if (def" << field->Name()->ToCString() << ")" << std::endl; + os << " {" << std::endl; + os << " my" << field->Name()->ToCString() << " = the" << varName->ToCString() << ";"; + os << "\n }" << std::endl; + os << " else" << std::endl; + os << " {" << std::endl; + os << " my" << field->Name()->ToCString(); if (field->Type()->IsHandle()) { os << ".Nullify();"; @@ -1426,6 +1501,11 @@ Standard_Integer Express_Entity::MakeInit (Standard_OStream &os, { os << " = " << field->Type()->CPPName()->ToCString() << "();"; } + os << "\n }"; + } + else + { + os << "my" << field->Name()->ToCString() << " = the" << varName->ToCString() << ";"; } } if (sh > 0) diff --git a/src/Express/Express_Enum.cxx b/src/Express/Express_Enum.cxx index 73d831c1f2..456ba9f1b2 100644 --- a/src/Express/Express_Enum.cxx +++ b/src/Express/Express_Enum.cxx @@ -85,7 +85,7 @@ Standard_Boolean Express_Enum::GenerateClass () const << myNames->Value(i)->ToCString(); } - os << std::endl << "};" << std::endl; + os << std::endl << "};" << std::endl << std::endl; os << "#endif // _" << CPPName()->ToCString() << "_HeaderFile" << std::endl; os.close();