Improved performance
This commit is contained in:
parent
07d775377d
commit
0e3bfd65e5
|
@ -26,6 +26,9 @@
|
||||||
#include <xercesc/dom/DOMNamedNodeMap.hpp>
|
#include <xercesc/dom/DOMNamedNodeMap.hpp>
|
||||||
#include <xercesc/dom/DOMAttr.hpp>
|
#include <xercesc/dom/DOMAttr.hpp>
|
||||||
|
|
||||||
|
const static size_t maxReservedSchemaBuffer = 1024 * 1024;
|
||||||
|
const static size_t maxElementSchemaBuffer = 1024;
|
||||||
|
|
||||||
XmlSchemaGenerator::XmlSchemaGenerator ( bool inlineSimpleType /*= true*/)
|
XmlSchemaGenerator::XmlSchemaGenerator ( bool inlineSimpleType /*= true*/)
|
||||||
: mInlineSimpleType ( inlineSimpleType )
|
: mInlineSimpleType ( inlineSimpleType )
|
||||||
, mGrammarType ( Grammar::SchemaGrammarType )
|
, mGrammarType ( Grammar::SchemaGrammarType )
|
||||||
|
@ -68,6 +71,10 @@ const wxString &XmlSchemaGenerator::generate ( Grammar::GrammarType grammarType,
|
||||||
return mSchema;
|
return mSchema;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t size = len / 3;
|
||||||
|
if ( size > maxReservedSchemaBuffer ) size = maxReservedSchemaBuffer;
|
||||||
|
mSchema.Alloc ( size );
|
||||||
|
|
||||||
mSchema << _T("<?xml version=\"1.0\" encoding=\"UTF-8\"?>") << getEOL();
|
mSchema << _T("<?xml version=\"1.0\" encoding=\"UTF-8\"?>") << getEOL();
|
||||||
if ( mGrammarType == Grammar::SchemaGrammarType )
|
if ( mGrammarType == Grammar::SchemaGrammarType )
|
||||||
mSchema << _T("<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" elementFormDefault=\"qualified\">")
|
mSchema << _T("<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" elementFormDefault=\"qualified\">")
|
||||||
|
@ -85,6 +92,8 @@ const wxString &XmlSchemaGenerator::generate ( Grammar::GrammarType grammarType,
|
||||||
if ( mGrammarType == Grammar::SchemaGrammarType )
|
if ( mGrammarType == Grammar::SchemaGrammarType )
|
||||||
mSchema << _T("</xs:schema>") << getEOL();
|
mSchema << _T("</xs:schema>") << getEOL();
|
||||||
|
|
||||||
|
mSchema.Shrink();
|
||||||
|
|
||||||
return mSchema;
|
return mSchema;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -251,6 +260,9 @@ void XmlSchemaGenerator::generateSchema ( ElmtData &data, size_t nIndent )
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
schema.Alloc ( maxElementSchemaBuffer );
|
||||||
|
|
||||||
addIndent ( schema, nIndent++ );
|
addIndent ( schema, nIndent++ );
|
||||||
schema << _T("<xs:element name=\"") << data.name << _T("\">") << getEOL();
|
schema << _T("<xs:element name=\"") << data.name << _T("\">") << getEOL();
|
||||||
if ( data.children.size() > 0 )
|
if ( data.children.size() > 0 )
|
||||||
|
@ -353,11 +365,14 @@ void XmlSchemaGenerator::generateSchema ( ElmtData &data, size_t nIndent )
|
||||||
schema << _T("</xs:complexType>") << getEOL();
|
schema << _T("</xs:complexType>") << getEOL();
|
||||||
addIndent ( schema, --nIndent );
|
addIndent ( schema, --nIndent );
|
||||||
schema << _T("</xs:element>") << getEOL();
|
schema << _T("</xs:element>") << getEOL();
|
||||||
|
|
||||||
|
schema.Shrink();
|
||||||
}
|
}
|
||||||
|
|
||||||
void XmlSchemaGenerator::generateDTD ( ElmtData &data, size_t WXUNUSED ( nIndent ) )
|
void XmlSchemaGenerator::generateDTD ( ElmtData &data, size_t WXUNUSED ( nIndent ) )
|
||||||
{
|
{
|
||||||
wxString &schema = data.schema;
|
wxString &schema = data.schema;
|
||||||
|
schema.Alloc ( maxElementSchemaBuffer );
|
||||||
|
|
||||||
schema << _T("<!ELEMENT ") << data.name;
|
schema << _T("<!ELEMENT ") << data.name;
|
||||||
if (data.sequence.empty())
|
if (data.sequence.empty())
|
||||||
|
@ -417,6 +432,7 @@ void XmlSchemaGenerator::generateDTD ( ElmtData &data, size_t WXUNUSED ( nIndent
|
||||||
}
|
}
|
||||||
schema << _T(">") << getEOL();
|
schema << _T(">") << getEOL();
|
||||||
}
|
}
|
||||||
|
schema.Shrink();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool XmlSchemaGenerator::getSequence ( std::vector<wxString> &sequence,
|
bool XmlSchemaGenerator::getSequence ( std::vector<wxString> &sequence,
|
||||||
|
|
Loading…
Reference in New Issue