#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; #endregion namespace IBatisNet.DataMapper.Configuration.Cache.Fifo { /// /// Summary description for FifoCacheController. /// public class FifoCacheController : ICacheController { #region Fields private int _cacheSize = 0; private Hashtable _cache = null; private IList _keyList = null; #endregion #region Constructor (s) / Destructor /// /// /// public FifoCacheController() { _cacheSize = 100; _cache = Hashtable.Synchronized( new Hashtable() ); _keyList = ArrayList.Synchronized( new ArrayList() ); } #endregion #region ICacheController Members /// /// Remove an object from a cache model /// /// the key to the object /// the removed object(?) public object Remove(object key) { object o = this[key]; _keyList.Remove(key); _cache.Remove(key); return o; } /// /// Clears all elements from the cache. /// public void Flush() { _cache.Clear(); _keyList.Clear(); } /// /// Adds an item with the specified key and value into cached data. /// Gets a cached object with the specified key. /// /// The cached object or null public object this [object key] { get { return _cache[key]; } set { _cache[key] = value; _keyList.Add(key); if (_keyList.Count > _cacheSize) { object oldestKey = _keyList[0]; _keyList.Remove(0); _cache.Remove(oldestKey); } } } /// /// Configures the cache /// public void Configure(IDictionary properties) { string size = (string)properties["CacheSize"];; if (size != null) { _cacheSize = Convert.ToInt32(size); } } #endregion } }