XmlDictionary.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / Serialization / System / Xml / XmlDictionary.cs / 1305376 / XmlDictionary.cs

                            //------------------------------------------------------------ 
// 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 lookup;
        XmlDictionaryString[] strings; 
        int nextId;

        static public IXmlDictionary Empty
        { 
            get
            { 
                if (empty == null) 
                    empty = new EmptyDictionary();
                return empty; 
            }
        }

        public XmlDictionary() 
        {
            this.lookup = new Dictionary(); 
            this.strings = null; 
            this.nextId = 0;
        } 

        public XmlDictionary(int capacity)
        {
            this.lookup = new Dictionary(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; 
            }
        } 
    }
}

 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK