Added a flag suppressing node content conversion when saving to XML.
This helps improve the extremely poor performance of XML saving if you have, for example, hex data that does not need conversion. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65764 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
6ffb5e91ea
commit
30f6914ba1
@ -104,7 +104,7 @@ class WXDLLIMPEXP_XML wxXmlNode
|
||||
public:
|
||||
wxXmlNode()
|
||||
: m_attrs(NULL), m_parent(NULL), m_children(NULL), m_next(NULL),
|
||||
m_lineNo(-1)
|
||||
m_lineNo(-1), m_noConversion(false)
|
||||
{
|
||||
}
|
||||
|
||||
@ -171,6 +171,10 @@ public:
|
||||
void SetAttributes(wxXmlAttribute *attr) { m_attrs = attr; }
|
||||
virtual void AddAttribute(wxXmlAttribute *attr);
|
||||
|
||||
// If true, don't do encoding conversion to improve efficiency - node content is ACII text
|
||||
bool GetNoConversion() const { return m_noConversion; }
|
||||
void SetNoConversion(bool noconversion) { m_noConversion = noconversion; }
|
||||
|
||||
#if WXWIN_COMPATIBILITY_2_8
|
||||
wxDEPRECATED( inline wxXmlAttribute *GetProperties() const );
|
||||
wxDEPRECATED( inline bool GetPropVal(const wxString& propName,
|
||||
@ -210,6 +214,7 @@ private:
|
||||
wxXmlAttribute *m_attrs;
|
||||
wxXmlNode *m_parent, *m_children, *m_next;
|
||||
int m_lineNo; // line number in original file, or -1
|
||||
bool m_noConversion; // don't do encoding conversion - node is plain text
|
||||
|
||||
void DoCopy(const wxXmlNode& node);
|
||||
};
|
||||
|
@ -183,6 +183,13 @@ public:
|
||||
*/
|
||||
int GetDepth(wxXmlNode* grandparent = NULL) const;
|
||||
|
||||
/**
|
||||
Returns a flag indicating whether encoding conversion is necessary when saving. The default is @false.
|
||||
|
||||
You can improve saving efficiency considerably by setting this value.
|
||||
*/
|
||||
bool GetNoConversion() const;
|
||||
|
||||
/**
|
||||
Returns line number of the node in the input XML file or @c -1 if it is unknown.
|
||||
*/
|
||||
@ -301,7 +308,7 @@ public:
|
||||
/**
|
||||
Sets as first attribute the given wxXmlAttribute object.
|
||||
|
||||
The caller is responsible to delete any previously present attributes
|
||||
The caller is responsible for deleting any previously present attributes
|
||||
attached to this node.
|
||||
*/
|
||||
void SetAttributes(wxXmlAttribute* attr);
|
||||
@ -309,7 +316,7 @@ public:
|
||||
/**
|
||||
Sets as first child the given node.
|
||||
|
||||
The caller is responsible to delete any previously present children node.
|
||||
The caller is responsible for deleting any previously present children node.
|
||||
*/
|
||||
void SetChildren(wxXmlNode* child);
|
||||
|
||||
@ -326,14 +333,21 @@ public:
|
||||
/**
|
||||
Sets as sibling the given node.
|
||||
|
||||
The caller is responsible to delete any previously present sibling node.
|
||||
The caller is responsible for deleting any previously present sibling node.
|
||||
*/
|
||||
void SetNext(wxXmlNode* next);
|
||||
|
||||
/**
|
||||
Sets a flag to indicate whether encoding conversion is necessary when saving. The default is @false.
|
||||
|
||||
You can improve saving efficiency considerably by setting this value.
|
||||
*/
|
||||
void SetNoConversion(bool noconversion);
|
||||
|
||||
/**
|
||||
Sets as parent the given node.
|
||||
|
||||
The caller is responsible to delete any previously present parent node.
|
||||
The caller is responsible for deleting any previously present parent node.
|
||||
*/
|
||||
void SetParent(wxXmlNode* parent);
|
||||
|
||||
|
@ -54,7 +54,8 @@ wxXmlNode::wxXmlNode(wxXmlNode *parent,wxXmlNodeType type,
|
||||
: m_type(type), m_name(name), m_content(content),
|
||||
m_attrs(attrs), m_parent(parent),
|
||||
m_children(NULL), m_next(next),
|
||||
m_lineNo(lineNo)
|
||||
m_lineNo(lineNo),
|
||||
m_noConversion(false)
|
||||
{
|
||||
if (m_parent)
|
||||
{
|
||||
@ -74,7 +75,7 @@ wxXmlNode::wxXmlNode(wxXmlNodeType type, const wxString& name,
|
||||
: m_type(type), m_name(name), m_content(content),
|
||||
m_attrs(NULL), m_parent(NULL),
|
||||
m_children(NULL), m_next(NULL),
|
||||
m_lineNo(lineNo)
|
||||
m_lineNo(lineNo), m_noConversion(false)
|
||||
{}
|
||||
|
||||
wxXmlNode::wxXmlNode(const wxXmlNode& node)
|
||||
@ -115,6 +116,7 @@ void wxXmlNode::DoCopy(const wxXmlNode& node)
|
||||
m_name = node.m_name;
|
||||
m_content = node.m_content;
|
||||
m_lineNo = node.m_lineNo;
|
||||
m_noConversion = node.m_noConversion;
|
||||
m_children = NULL;
|
||||
|
||||
wxXmlNode *n = node.m_children;
|
||||
@ -796,7 +798,14 @@ bool OutputString(wxOutputStream& stream,
|
||||
wxUnusedVar(convMem);
|
||||
if ( !convFile )
|
||||
convFile = &wxConvUTF8;
|
||||
|
||||
#if 1
|
||||
// JACS test
|
||||
const wxWX2MBbuf buf(str.mb_str(*convFile));
|
||||
if (!buf.length())
|
||||
return false;
|
||||
|
||||
stream.Write((const char*)buf, strlen((const char*)buf));
|
||||
#else
|
||||
const wxScopedCharBuffer buf(str.mb_str(*convFile));
|
||||
if ( !buf.length() )
|
||||
{
|
||||
@ -806,6 +815,8 @@ bool OutputString(wxOutputStream& stream,
|
||||
}
|
||||
|
||||
stream.Write(buf, buf.length());
|
||||
#endif
|
||||
|
||||
#else // !wxUSE_UNICODE
|
||||
if ( convFile && convMem )
|
||||
{
|
||||
@ -913,7 +924,13 @@ bool OutputNode(wxOutputStream& stream,
|
||||
break;
|
||||
|
||||
case wxXML_TEXT_NODE:
|
||||
rc = OutputEscapedString(stream, node->GetContent(),
|
||||
if (node->GetNoConversion())
|
||||
{
|
||||
stream.Write(node->GetContent().c_str(), node->GetContent().Length());
|
||||
rc = true;
|
||||
}
|
||||
else
|
||||
rc = OutputEscapedString(stream, node->GetContent(),
|
||||
convMem, convFile,
|
||||
Escape_Text);
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user