#region Apache Notice
/*****************************************************************************
* $Header: $
* $Revision$
* $Date$
*
* iBATIS.NET Data Mapper
* Copyright (C) 2004 - Gilles Bayon
*
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
********************************************************************************/
#endregion
#region Imports
using System;
using System.Collections;
using IBatisNet.DataMapper.Configuration.Cache;
using IBatisNet.DataMapper.Exceptions;
#endregion
namespace IBatisNet.DataMapper.Configuration.Cache.Memory
{
///
/// Summary description for MemoryCacheLevel.
///
public class MemoryCacheLevel
{
#region Fields
private static Hashtable _cacheLevelMap = new Hashtable();
///
/// Constant for weak caching
/// This cache model is probably the best choice in most cases. It will increase
/// performance for popular results, but it will absolutely release the memory to
/// be used in allocating other objects, assuming that the results are not currently
/// in use.
/// References an object while still allowing it to be garbage collected.
///
public static MemoryCacheLevel Weak;
///
/// Constant for strong caching.
/// This cache model will guarantee that the results stay in memory until the cache
/// is explicitly flushed. This is ideal for results that are:
///
/// - very small
/// - absolutely static
/// - used very often
///
/// The advantage is that performance will be very good for this particular query.
/// The disadvantage is that if the memory used by these results is needed, then it
/// will not be released to make room for other objects (possibly more important
/// objects).
///
public static MemoryCacheLevel Strong;
private string _referenceType;
#endregion
#region Constructor (s) / Destructor
///
///
///
static MemoryCacheLevel()
{
Weak = new MemoryCacheLevel("WEAK");
Strong = new MemoryCacheLevel("STRONG");
_cacheLevelMap[Weak.ReferenceType] = Weak;
_cacheLevelMap[Strong.ReferenceType] = Strong;
}
#endregion
#region Methods
///
/// Creates a new instance of CacheLevel
///
/// The type of the CacheLevel.
private MemoryCacheLevel(string type)
{
_referenceType = type;
}
///
///
///
public string ReferenceType
{
get
{
return _referenceType;
}
}
///
///
///
///
///
public static MemoryCacheLevel GetByRefenceType(string referenceType)
{
MemoryCacheLevel cacheLevel = (MemoryCacheLevel)_cacheLevelMap[referenceType];
if (cacheLevel == null)
{
throw new DataMapperException("Error getting CacheLevel (reference type) for name: '" +referenceType+ "'.");
}
return cacheLevel;
}
#endregion
}
}