Handle(TCollection_HAsciiString) method = new TCollection_HAsciiString("Set");
method->AssignCat(field);
Express::WriteMethodStamp(os, method);
- os << "void " << name->ToCString() << "::" << method->ToCString() << " (const " <<
+ os << "void " << name->ToCString() << "::" << method->ToCString() << "(const " <<
(isHandle ? "Handle(" : "") << type->ToCString() << (isHandle ? ")" : "") <<
(isSimple ? "" : "&") << " the" << field->ToCString() << ")" << std::endl;
os << "{" << std::endl << " my" << field->ToCString() << " = the" << field->ToCString() << ";\n}" << std::endl;
os << " Standard_EXPORT " << field->Type()->CPPName()->ToCString() << " "
<< field->Name()->ToCString() << "() const;" << std::endl;
}
+ os << std::endl;
os << " //! Sets field " << field->Name()->ToCString() << std::endl;
if (field->Type()->IsHandle())
{
}
if (field->IsOptional())
{
+ os << std::endl;
os << " //! Returns True if optional field " << field->Name()->ToCString() << " is defined" << std::endl;
os << " Standard_EXPORT Standard_Boolean Has" << field->Name()->ToCString() << "() const;" << std::endl;
}
os << std::endl;
+
+ // prepare additional methods for HArray1 field (NbField() and <field_elem> FieldValue(int num))
+ TCollection_AsciiString aTName = field->Type()->CPPName()->String();
+ Standard_Integer ns = aTName.Search("_HArray");
+ if (ns > -1)
+ {
+ TCollection_AsciiString namePack = aTName.SubString(1, ns);
+ TCollection_AsciiString nameClass("");
+ if (namePack.IsEqual("TColStd_"))
+ {
+ Standard_Integer ns2 = aTName.Search("Integer");
+ if (ns2 > -1)
+ {
+ nameClass = "Standard_Integer";
+ }
+ else
+ {
+ ns2 = aTName.Search("Real");
+ if (ns2 > -1)
+ {
+ nameClass = "Standard_Real";
+ }
+ else
+ {
+ nameClass = "Standard_Boolean";
+ }
+ }
+ }
+ else
+ {
+ if (namePack.IsEqual("Interface_"))
+ {
+ nameClass = "Handle(TCollection_HAsciiString)";
+ }
+ else
+ {
+ //nameClass = namePack;
+ nameClass = "Handle(";
+ nameClass.AssignCat(namePack);
+ nameClass.AssignCat(aTName.SubString(ns + 10, aTName.Length()));
+ nameClass.AssignCat(")");
+ }
+ }
+ os << " //! Returns number of " << field->Name()->ToCString() << std::endl;
+ os << " Standard_EXPORT Standard_Integer Nb" << field->Name()->ToCString() << "() const;" << std::endl;
+ os << std::endl;
+ os << " //! Returns value of " << field->Name()->ToCString() << " by its num" << std::endl;
+ os << " Standard_EXPORT "<< nameClass.ToCString() << " "<< field->Name()->ToCString()
+ << "Value(const Standard_Integer theNum) const;" << std::endl;
+ os << std::endl;
+ }
+
}
os << " DEFINE_STANDARD_RTTIEXT(" << CPPname->ToCString() << ", " << InheritName->ToCString() << ")" << std::endl;
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());
- if (!field->IsOptional())
+ if (field->IsOptional())
{
- continue;
+ 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 myHas" << field->Name()->ToCString() << ";\n}" << std::endl;
}
- 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 myHas" << field->Name()->ToCString() << ";\n}" << std::endl;
+
+ // prepare additional methods for HArray1 field
+ TCollection_AsciiString aTName = field->Type()->CPPName()->String();
+ Standard_Integer ns = aTName.Search("_HArray1");
+ if (ns > -1)
+ {
+ TCollection_AsciiString namePack = aTName.SubString(1, ns);
+ TCollection_AsciiString nameClass("");
+ if (namePack.IsEqual("TColStd_"))
+ {
+ Standard_Integer ns2 = aTName.Search("Integer");
+ if (ns2 > -1)
+ {
+ nameClass = "Standard_Integer";
+ }
+ else
+ {
+ ns2 = aTName.Search("Real");
+ if (ns2 > -1)
+ {
+ nameClass = "Standard_Real";
+ }
+ else
+ {
+ nameClass = "Standard_Boolean";
+ }
+ }
+ }
+ else
+ {
+ if (namePack.IsEqual("Interface_"))
+ {
+ nameClass = "Handle(TCollection_HAsciiString)";
+ }
+ else
+ {
+ //nameClass = namePack;
+ nameClass = "Handle(";
+ nameClass.AssignCat(namePack);
+ nameClass.AssignCat(aTName.SubString(ns + 10, aTName.Length()));
+ nameClass.AssignCat(")");
+ }
+ }
+ // write method ::NbField()
+ os << std::endl;
+ Handle(TCollection_HAsciiString) aMethodName = new TCollection_HAsciiString("Nb");
+ aMethodName->AssignCat(field->Name());
+ Express::WriteMethodStamp(os, aMethodName);
+ os << "Standard_Integer " << CPPname->ToCString() << "::Nb" << field->Name()->ToCString()
+ << "() const;" << std::endl;
+ os << "{" << std::endl;
+ os << " if (my" << field->Name()->ToCString() << ".IsNull())" << std::endl;
+ os << " {" << std::endl;
+ os << " return 0;" << std::endl;
+ os << " }" << std::endl;
+ os << " return my" << field->Name()->ToCString() << "->Length();" << std::endl;
+ os << "}" << std::endl;
+ // write method ::FieldValue(num)
+ os << std::endl;
+ aMethodName = new TCollection_HAsciiString(field->Name());
+ aMethodName->AssignCat("Value");
+ Express::WriteMethodStamp(os, aMethodName);
+ os << nameClass.ToCString() << " " << CPPname->ToCString() << "::" << field->Name()->ToCString()
+ << "Value(const Standard_Integer theNum) const;" << std::endl;
+ os << "{" << std::endl;
+ os << " return my" << field->Name()->ToCString() << "->Value(theNum);" << std::endl;
+ os << "}" << std::endl;
+ }
+
}
// close
continue;
}
theOs << "#include <" << type->CPPName()->ToCString() << ".hxx>" << std::endl;
+ // check that last include is for array
+ TCollection_AsciiString namePack = GetPackageName()->String();
+ TCollection_AsciiString aStrForSearch = namePack;
+ aStrForSearch.AssignCat("_HArray");
+ Standard_Integer ns = type->CPPName()->Search(aStrForSearch.ToCString());
+ if (ns > -1)
+ {
+ // create hxx files for Array1 and HArray1
+ // prepare file names
+ ns = namePack.Length();
+ TCollection_AsciiString nameHA = type->CPPName()->String();
+ TCollection_AsciiString nameA = nameHA.SubString(1, ns + 1);
+ nameA.AssignCat(nameHA.SubString(ns + 3, nameHA.Length()));
+ TCollection_AsciiString nameClass = nameHA.SubString(ns + 11, nameHA.Length());
+ // Open HXX file
+ TCollection_AsciiString fnameA = namePack;
+ fnameA.AssignCat("/");
+ fnameA.AssignCat(nameA);
+ std::ofstream osa(fnameA.Cat(".hxx").ToCString());
+ // write header
+ Express::WriteFileStamp(osa);
+ osa << std::endl;
+ osa << "#ifndef " << nameA.ToCString() << "_HeaderFile" << std::endl;
+ osa << "#define " << nameA.ToCString() << "_HeaderFile" << std::endl;
+ osa << std::endl;
+ osa << "#include <" << namePack.ToCString() << "_" << nameClass.ToCString() << ".hxx>" << std::endl;
+ osa << "#include <NCollection_" << nameHA.SubString(ns + 3, ns + 8) << ".hxx>" << std::endl;
+ osa << std::endl;
+ osa << "typedef NCollection_" << nameHA.SubString(ns + 3, ns + 8) << "<Handle("
+ << namePack.ToCString() << "_" << nameClass.ToCString() << ")> " << nameA.ToCString() << ";" << std::endl;
+ osa << std::endl;
+ osa << "#endif" << std::endl;
+ osa.close();
+ // Open HXX file
+ TCollection_AsciiString fnameHA = namePack;
+ fnameHA.AssignCat("/");
+ fnameHA.AssignCat(nameHA);
+ std::ofstream osha(fnameHA.Cat(".hxx").ToCString());
+ // write header
+ Express::WriteFileStamp(osha);
+ osha << std::endl;
+ osha << "#ifndef " << nameHA.ToCString() << "_HeaderFile" << std::endl;
+ osha << "#define " << nameHA.ToCString() << "_HeaderFile" << std::endl;
+ osha << std::endl;
+ osha << "#include <" << nameA << ".hxx>" << std::endl;
+ osha << "#include <NCollection_" << nameHA.SubString(ns + 2, ns + 8) << ".hxx>" << std::endl;
+ osha << std::endl;
+ osha << "DEFINE_HARRAY"<< nameHA.SubString(ns + 8, ns + 8) <<"(" << nameHA.ToCString()
+ << ", " << nameA.ToCString() << ");" << std::endl;
+ osha << std::endl;
+ osha << "#endif" << std::endl;
+ osha.close();
+ }
+
}
return Standard_True;
}