Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAtsushi Eno <atsushieno@gmail.com>2006-01-28 21:37:11 +0300
committerAtsushi Eno <atsushieno@gmail.com>2006-01-28 21:37:11 +0300
commit4455f8563deaba3bd05090ed89c3ad6ae41d6e0a (patch)
tree832244d4d552feccc630b6224cfefe4e74c8c7c3 /mcs/class/System.XML/System.Xml/XmlTextWriter.cs
parent2b419d3520f3d98903811c2363e86d2b8d73ba42 (diff)
2006-01-28 Atsushi Enomoto <atsushi@ximian.com>
* XmlTextWriter.cs : avoid case-insensitive String.Compare(). Use array for openElements rather than ArrayList. svn path=/trunk/mcs/; revision=56210
Diffstat (limited to 'mcs/class/System.XML/System.Xml/XmlTextWriter.cs')
-rw-r--r--mcs/class/System.XML/System.Xml/XmlTextWriter.cs49
1 files changed, 30 insertions, 19 deletions
diff --git a/mcs/class/System.XML/System.Xml/XmlTextWriter.cs b/mcs/class/System.XML/System.Xml/XmlTextWriter.cs
index 6b9d3163e68..5746b164ad4 100644
--- a/mcs/class/System.XML/System.Xml/XmlTextWriter.cs
+++ b/mcs/class/System.XML/System.Xml/XmlTextWriter.cs
@@ -51,7 +51,8 @@ namespace System.Xml
bool namespaces = true;
bool openAttribute = false;
bool attributeWrittenForElement = false;
- ArrayList openElements = new ArrayList ();
+ XmlTextWriterOpenElement [] openElements =
+ new XmlTextWriterOpenElement [20];
int openElementCount;
Formatting formatting = Formatting.None;
int indentation = 2;
@@ -141,12 +142,11 @@ namespace System.Xml
if (openElementCount == 0)
return false;
else
- return ((XmlTextWriterOpenElement)
-openElements [openElementCount - 1]).IndentingOverriden;
+ return openElements [openElementCount - 1].IndentingOverriden;
}
set {
if (openElementCount > 0)
- ((XmlTextWriterOpenElement) openElements [openElementCount - 1]).IndentingOverriden = value;
+ openElements [openElementCount - 1].IndentingOverriden = value;
}
}
@@ -154,7 +154,7 @@ openElements [openElementCount - 1]).IndentingOverriden;
get {
if (openElementCount < 2)
return false;
- return ((XmlTextWriterOpenElement) openElements [openElementCount - 2]).IndentingOverriden;
+ return openElements [openElementCount - 2].IndentingOverriden;
}
}
@@ -251,7 +251,7 @@ openElements [openElementCount - 1]).IndentingOverriden;
int i;
for (i = openElementCount - 1; i >= 0; i--) {
- xmlLang = ((XmlTextWriterOpenElement) openElements [i]).XmlLang;
+ xmlLang = openElements [i].XmlLang;
if (xmlLang != null)
break;
}
@@ -266,7 +266,7 @@ openElements [openElementCount - 1]).IndentingOverriden;
int i;
for (i = openElementCount - 1; i >= 0; i--) {
- xmlSpace = ((XmlTextWriterOpenElement)openElements [i]).XmlSpace;
+ xmlSpace = openElements [i].XmlSpace;
if (xmlSpace != XmlSpace.None)
break;
}
@@ -354,7 +354,7 @@ openElements [openElementCount - 1]).IndentingOverriden;
{
#if NET_2_0
if (ws == WriteState.Error)
- throw new InvalidOperationException ("Writing at state Error would result in a wrong result.");
+ throw new InvalidOperationException ("Writing at state Error would result in wrong output.");
#endif
if (!openWriter) {
throw new InvalidOperationException ("The Writer is closed.");
@@ -565,7 +565,7 @@ openElements [openElementCount - 1]).IndentingOverriden;
w.Write (xmlLang);
openXmlLang = false;
if (openElementCount > 0)
- ((XmlTextWriterOpenElement) openElements [openElementCount - 1]).XmlLang = xmlLang;
+ openElements [openElementCount - 1].XmlLang = xmlLang;
}
if (openXmlSpace)
@@ -576,7 +576,7 @@ openElements [openElementCount - 1]).IndentingOverriden;
w.Write ("default");
openXmlSpace = false;
if (openElementCount > 0)
- ((XmlTextWriterOpenElement) openElements [openElementCount - 1]).XmlSpace = xmlSpace;
+ openElements [openElementCount - 1].XmlSpace = xmlSpace;
}
w.Write (quoteChar);
@@ -642,7 +642,7 @@ openElements [openElementCount - 1]).IndentingOverriden;
if (!ParentIndentingOverriden)
WriteIndent ();
w.Write ("</");
- XmlTextWriterOpenElement el = (XmlTextWriterOpenElement) openElements [openElementCount - 1];
+ XmlTextWriterOpenElement el = openElements [openElementCount - 1];
if (el.Prefix != String.Empty) {
w.Write (el.Prefix);
w.Write (':');
@@ -657,7 +657,7 @@ openElements [openElementCount - 1]).IndentingOverriden;
} else {
WriteIndent ();
w.Write ("</");
- XmlTextWriterOpenElement el = (XmlTextWriterOpenElement) openElements [openElementCount - 1];
+ XmlTextWriterOpenElement el = openElements [openElementCount - 1];
openElementCount--;
if (el.Prefix != String.Empty) {
w.Write (el.Prefix);
@@ -760,15 +760,15 @@ openElements [openElementCount - 1]).IndentingOverriden;
public override void WriteStartAttribute (string prefix, string localName, string ns)
{
- if (prefix == "xml") {
+ if (prefix == null)
+ prefix = String.Empty;
+ else if (prefix == "xml") {
ns = XmlNamespaceManager.XmlnsXml;
if (localName == "lang")
openXmlLang = true;
else if (localName == "space")
openXmlSpace = true;
}
- if (prefix == null)
- prefix = String.Empty;
if (prefix.Length > 0 && (ns == null || ns.Length == 0))
if (prefix != "xmlns")
@@ -937,7 +937,10 @@ openElements [openElementCount - 1]).IndentingOverriden;
// is kind of silly implementation. See bug #77094.
if (Namespaces &&
ns != XmlNamespaceManager.XmlnsXml &&
- String.Compare (prefix, "xml", true) == 0)
+ prefix != null && prefix.Length == 3 &&
+ (prefix [0] == 'x' || prefix [0] == 'X') &&
+ (prefix [1] == 'm' || prefix [1] == 'M') &&
+ (prefix [2] == 'l' || prefix [2] == 'L'))
throw new ArgumentException ("A prefix cannot be equivalent to \"xml\" in case-insensitive match.");
// ignore non-namespaced node's prefix.
@@ -970,10 +973,18 @@ openElements [openElementCount - 1]).IndentingOverriden;
}
w.Write (localName);
- if (openElements.Count == openElementCount)
- openElements.Add (new XmlTextWriterOpenElement (prefix, localName));
+ if (openElements.Length == openElementCount) {
+ XmlTextWriterOpenElement [] tmp =
+ new XmlTextWriterOpenElement [openElementCount * 2];
+ Array.Copy (openElements, tmp, openElementCount);
+ openElements = tmp;
+ }
+ if (openElements [openElementCount] == null)
+ openElements [openElementCount] =
+ new XmlTextWriterOpenElement (prefix, localName);
else
- ((XmlTextWriterOpenElement) openElements [openElementCount]).Reset (prefix, localName);
+ openElements [openElementCount].Reset (prefix, localName);
+
openElementCount++;
ws = WriteState.Element;
openStartElement = true;