You've already forked linux-packaging-mono
Imported Upstream version 4.0.0~alpha1
Former-commit-id: 806294f5ded97629b74c85c09952f2a74fe182d9
This commit is contained in:
122
external/referencesource/System.Runtime.Serialization/System/Xml/XmlDictionary.cs
vendored
Normal file
122
external/referencesource/System.Runtime.Serialization/System/Xml/XmlDictionary.cs
vendored
Normal file
@ -0,0 +1,122 @@
|
||||
//------------------------------------------------------------
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
//------------------------------------------------------------
|
||||
namespace System.Xml
|
||||
{
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Xml;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Text;
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
public class XmlDictionary : IXmlDictionary
|
||||
{
|
||||
static IXmlDictionary empty;
|
||||
Dictionary<string, XmlDictionaryString> lookup;
|
||||
XmlDictionaryString[] strings;
|
||||
int nextId;
|
||||
|
||||
static public IXmlDictionary Empty
|
||||
{
|
||||
get
|
||||
{
|
||||
if (empty == null)
|
||||
empty = new EmptyDictionary();
|
||||
return empty;
|
||||
}
|
||||
}
|
||||
|
||||
public XmlDictionary()
|
||||
{
|
||||
this.lookup = new Dictionary<string, XmlDictionaryString>();
|
||||
this.strings = null;
|
||||
this.nextId = 0;
|
||||
}
|
||||
|
||||
public XmlDictionary(int capacity)
|
||||
{
|
||||
this.lookup = new Dictionary<string, XmlDictionaryString>(capacity);
|
||||
this.strings = new XmlDictionaryString[capacity];
|
||||
this.nextId = 0;
|
||||
}
|
||||
|
||||
public virtual XmlDictionaryString Add(string value)
|
||||
{
|
||||
XmlDictionaryString str;
|
||||
if (!this.lookup.TryGetValue(value, out str))
|
||||
{
|
||||
if (this.strings == null)
|
||||
{
|
||||
this.strings = new XmlDictionaryString[4];
|
||||
}
|
||||
else if (this.nextId == this.strings.Length)
|
||||
{
|
||||
int newSize = this.nextId * 2;
|
||||
if (newSize == 0)
|
||||
newSize = 4;
|
||||
Array.Resize(ref this.strings, newSize);
|
||||
}
|
||||
str = new XmlDictionaryString(this, value, this.nextId);
|
||||
this.strings[this.nextId] = str;
|
||||
this.lookup.Add(value, str);
|
||||
this.nextId++;
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
public virtual bool TryLookup(string value, out XmlDictionaryString result)
|
||||
{
|
||||
return this.lookup.TryGetValue(value, out result);
|
||||
}
|
||||
|
||||
public virtual bool TryLookup(int key, out XmlDictionaryString result)
|
||||
{
|
||||
if (key < 0 || key >= this.nextId)
|
||||
{
|
||||
result = null;
|
||||
return false;
|
||||
}
|
||||
result = this.strings[key];
|
||||
return true;
|
||||
}
|
||||
|
||||
public virtual bool TryLookup(XmlDictionaryString value, out XmlDictionaryString result)
|
||||
{
|
||||
if (value == null)
|
||||
throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("value"));
|
||||
if (value.Dictionary != this)
|
||||
{
|
||||
result = null;
|
||||
return false;
|
||||
}
|
||||
result = value;
|
||||
return true;
|
||||
}
|
||||
|
||||
class EmptyDictionary : IXmlDictionary
|
||||
{
|
||||
public bool TryLookup(string value, out XmlDictionaryString result)
|
||||
{
|
||||
result = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool TryLookup(int key, out XmlDictionaryString result)
|
||||
{
|
||||
result = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool TryLookup(XmlDictionaryString value, out XmlDictionaryString result)
|
||||
{
|
||||
result = null;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user