File: System\Data\Common\QueryCache\QueryCacheKey.cs
Project: ndp\fx\src\DataEntity\System.Data.Entity.csproj (System.Data.Entity)
//------------------------------------------------------------------------------
// <copyright file="QueryCacheKey.cs" company="Microsoft">
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>
//
// @owner  Microsoft
// @backupOwner Microsoft
//------------------------------------------------------------------------------
 
namespace System.Data.Common.QueryCache
{
    using System;
    using System.Collections.Generic;
    using System.Text;
 
 
    /// <summary>
    /// represents an abstract cache key
    /// </summary>
    internal abstract class QueryCacheKey
    {
        #region Constants
        protected const int EstimatedParameterStringSize = 20;
        #endregion
 
        #region Fields
        /// <summary>
        /// entry hit counter
        /// </summary>
        private uint _hitCount;
 
        /// <summary>
        /// aging index
        /// </summary>
        private int _agingIndex;
 
        /// <summary>
        /// default string comparison kind - Ordinal
        /// </summary>
        protected static StringComparison _stringComparison = StringComparison.Ordinal;
        #endregion
 
        #region Constructor
        protected QueryCacheKey()
        {
            _hitCount = 1;
        }
        #endregion
 
        #region Abstract Methods
        /// <summary>
        /// Determines whether two instances of QueryCacheContext are equal. 
        /// Equality is value based.
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public abstract override bool Equals( object obj );
 
        /// <summary>
        /// Returns QueryCacheContext instance HashCode
        /// </summary>
        /// <returns></returns>
        public abstract override int GetHashCode();
        #endregion
 
        #region Internal API
        /// <summary>
        /// Cache entry hit count
        /// </summary>
        internal uint HitCount
        {
            get 
            { 
                return _hitCount; 
            }
            
            set 
            { 
                _hitCount = value; 
            }
        }
 
        /// <summary>
        /// Gets/Sets Aging index for cache entry
        /// </summary>
        internal int AgingIndex
        {
            get 
            { 
                return _agingIndex; 
            }
            
            set 
            { 
                _agingIndex = value; 
            }
        }
 
        /// <summary>
        /// Updates hit count
        /// </summary>
        internal void UpdateHit()
        {
            if (uint.MaxValue != _hitCount)
            {
                unchecked { _hitCount++; }
            }
        }
 
        /// <summary>
        /// default string comparer
        /// </summary>
        /// <param name="s"></param>
        /// <param name="t"></param>
        /// <returns></returns>
        protected virtual bool Equals( string s, string t )
        {
            return String.Equals(s, t, _stringComparison);
        }
        #endregion
    }
}