Maps.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 / wpf / src / Shared / MS / Utility / Maps.cs / 1305600 / Maps.cs

                            /****************************************************************************\ 
*
* File: Maps.cs
*
* Description: 
* Contains specialized data structures for mapping a key to data.
* 
* Copyright (C) 2002 by Microsoft Corporation.  All rights reserved. 
*
\***************************************************************************/ 

using System;
using System.Collections;
using System.Windows; 

namespace MS.Utility 
{ 
    /***************************************************************************\
    ***************************************************************************** 
    *
    * DTypeMap (DType --> Object)
    *
    * Maps the first N used DependencyObject-derived types via an array 
    * (low constant time lookup) for mapping. After which falls back on a
    * hash table. 
    * 
    * - Fastest gets and sets (normally single array access).
    * - Large memory footprint. 
    *
    * Starting mapping is all map to null
    *
    ***************************************************************************** 
    \***************************************************************************/
 
    using MS.Internal.PresentationCore; 

    [FriendAccessAllowed] // Built into Core, also used by Framework. 
    internal class DTypeMap
    {

        public DTypeMap(int entryCount) 
        {
            // Constant Time Lookup entries (array size) 
            _entryCount = entryCount; 
            _entries = new object[_entryCount];
            _activeDTypes = new ItemStructList(128); 
        }

        public object this[DependencyObjectType dType]
        { 
            get
            { 
                if (dType.Id < _entryCount) 
                {
                    return _entries[dType.Id]; 
                }
                else
                {
                    if (_overFlow != null) 
                    {
                        return _overFlow[dType]; 
                    } 

                    return null; 
                }
            }

            set 
            {
                if (dType.Id < _entryCount) 
                { 
                    _entries[dType.Id] = value;
                } 
                else
                {
                    if (_overFlow == null)
                    { 
                        _overFlow = new Hashtable();
                    } 
 
                    _overFlow[dType] = value;
                } 

                _activeDTypes.Add(dType);
            }
        } 

        // Return list of non-null DType mappings 
        public ItemStructList ActiveDTypes 
        {
            get { return _activeDTypes; } 
        }

        // Clear the data-structures to be able to start over
        public void Clear() 
        {
            for (int i=0; i<_entryCount; i++) 
            { 
                _entries[i] = null;
            } 

            for (int i=0; i<_activeDTypes.Count; i++)
            {
                _activeDTypes.List[i] = null; 
            }
 
            if (_overFlow != null) 
            {
                _overFlow.Clear(); 
            }
        }

        private int _entryCount; 
        private object[] _entries;
        private Hashtable _overFlow; 
        private ItemStructList _activeDTypes; 
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
                        

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