DeviceFilterDictionary.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 / fx / src / MIT / System / Web / Mobile / DeviceFilterDictionary.cs / 1305376 / DeviceFilterDictionary.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

namespace System.Web.Mobile 
{ 
    using System.Web;
    using System.Collections; 
    using System.Reflection;
    using System.Diagnostics;
    using System.ComponentModel;
 
    [Obsolete("The System.Web.Mobile.dll assembly has been deprecated and should no longer be used. For information about how to develop ASP.NET mobile applications, see http://go.microsoft.com/fwlink/?LinkId=157231.")]
    internal class DeviceFilterDictionary 
    { 
        internal class ComparisonEvaluator
        { 
            internal readonly String capabilityName;
            internal readonly String capabilityArgument;

            internal ComparisonEvaluator(String name, String argument) 
            {
                Debug.Assert(name != null); 
 
                capabilityName = name;
                capabilityArgument = argument; 
            }
        }

        private Hashtable _comparisonEvaluators = null; 
        private Hashtable _delegateEvaluators = null;
 
 
        internal DeviceFilterDictionary()
        { 
            _comparisonEvaluators = new Hashtable();
            _delegateEvaluators = new Hashtable();
        }
 

        internal DeviceFilterDictionary(DeviceFilterDictionary original) 
        { 
            _comparisonEvaluators = (Hashtable)original._comparisonEvaluators.Clone();
            _delegateEvaluators = (Hashtable)original._delegateEvaluators.Clone(); 
        }


        internal void AddCapabilityDelegate(String delegateName, 
            MobileCapabilities.EvaluateCapabilitiesDelegate evaluator)
        { 
            _delegateEvaluators[delegateName] = evaluator; 
        }
 

        private void CheckForComparisonDelegateLoops(String delegateName)
        {
            String nextDelegateName = delegateName; 
            Hashtable alreadyReferencedDelegates = new Hashtable();
 
            while(true) 
            {
                ComparisonEvaluator nextComparisonEvaluator = 
                    (ComparisonEvaluator)_comparisonEvaluators[nextDelegateName];
                if(nextComparisonEvaluator == null)
                {
                    break; 
                }
 
                if(alreadyReferencedDelegates.Contains(nextDelegateName)) 
                {
                    String msg = SR.GetString(SR.DevFiltDict_FoundLoop, 
                                              nextComparisonEvaluator.capabilityName,
                                              delegateName);
                    throw new Exception(msg);
                } 

                alreadyReferencedDelegates[nextDelegateName] = null; 
                nextDelegateName = nextComparisonEvaluator.capabilityName; 
            }
        } 


        internal void AddComparisonDelegate(String delegateName, String comparisonName,
            String argument) 
        {
            _comparisonEvaluators[delegateName] = new ComparisonEvaluator(comparisonName, 
                argument); 

            CheckForComparisonDelegateLoops(delegateName); 
        }


        internal bool FindComparisonEvaluator(String evaluatorName, out String capabilityName, 
            out String capabilityArgument)
        { 
            capabilityName = null; 
            capabilityArgument = null;
 
            ComparisonEvaluator evaluator = (ComparisonEvaluator)_comparisonEvaluators[evaluatorName];
            if(evaluator == null)
            {
                return false; 
            }
 
            capabilityName = evaluator.capabilityName; 
            capabilityArgument = evaluator.capabilityArgument;
 
            return true;
        }

 
        internal bool FindDelegateEvaluator(String evaluatorName,
            out MobileCapabilities.EvaluateCapabilitiesDelegate evaluatorDelegate) 
        { 
            evaluatorDelegate = null;
 
            MobileCapabilities.EvaluateCapabilitiesDelegate evaluator;
            evaluator = (MobileCapabilities.EvaluateCapabilitiesDelegate)
                            _delegateEvaluators[evaluatorName];
            if(evaluator == null) 
            {
                return false; 
            } 

            evaluatorDelegate = evaluator; 

            return true;
        }
 

        internal bool IsComparisonEvaluator(String evaluatorName) 
        { 
            return _comparisonEvaluators.Contains(evaluatorName);
        } 

        internal bool IsDelegateEvaluator(String evaluatorName)
        {
            return _delegateEvaluators.Contains(evaluatorName); 
        }
    } 
} 


// 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