public int Check(string[] keys) { if (keys == null) { return(-1); } Lock(); try { IBindingCacheLevel cacheLevel = root; // follow the branch for (int i = 0; i < keys.Length - 1; i++) { object level = cacheLevel[keys[i]]; // does the branch exist? if (level == null) { return(i); } // next level cacheLevel = (IBindingCacheLevel)level; } return(keys.Length); } finally { Unlock(); } }
private IBindingCacheLevel CreateCacheLevel(int level) { if ((level < 0) || (level >= cacheLevels.Count)) { throw new ArgumentException("Cache level doesn't fit the configuration!"); } // get the class and create an instance Type levelType = cacheLevels[level]; IBindingCacheLevel cacheLevel = null; try { cacheLevel = (IBindingCacheLevel)Activator.CreateInstance(levelType); } catch (Exception e) { throw new ArgumentException("Cache level problem?!", e); } // initialize it cacheLevel.Initialize(cacheLevelParameters[level]); return(cacheLevel); }
public void Initialize(string[] cacheLevelConfig) { lock (cacheLock) { if (cacheLevels != null) { throw new InvalidOperationException("Cache already initialize!"); } if (cacheLevelConfig == null || cacheLevelConfig.Length == 0) { throw new ArgumentException("Cache config must not be empty!", nameof(cacheLevelConfig)); } cacheLevels = new List <Type>(); cacheLevelParameters = new List <IDictionary <string, string> >(); // build level lists foreach (string config in cacheLevelConfig) { int x = config.IndexOf(' '); if (x == -1) { AddLevel(config, null); } else { AddLevel(config.Substring(0, x), config.Substring(x + 1)); } } root = CreateCacheLevel(0); } }
public void Remove(string[] keys) { if (keys == null) { return; } lock (cacheLock) { IBindingCacheLevel cacheLevel = root; // follow the branch for (int i = 0; i < keys.Length - 1; i++) { object level = cacheLevel[keys[i]]; // does the branch exist? if (level == null) { return; } // next level cacheLevel = (IBindingCacheLevel)level; } cacheLevel.Remove(keys[keys.Length - 1]); if (Logger.IsDebugEnabled) { Logger.Debug("Binding Cache: " + name + ": removed [" + GetFormattedKeys(keys) + "]"); } } }
public void Put(string[] keys, object value) { if (keys == null) { return; } if (keys.Length != cacheLevels.Count) { throw new ArgumentException("Wrong number of keys!"); } Lock(); try { IBindingCacheLevel cacheLevel = root; // follow the branch for (int i = 0; i < keys.Length - 1; i++) { object level = cacheLevel[keys[i]]; // does the branch exist? if (level == null) { level = CreateCacheLevel(i + 1); cacheLevel[keys[i]] = level; } // next level cacheLevel = (IBindingCacheLevel)level; } cacheLevel[keys[keys.Length - 1]] = value; if (DotCMISDebug.DotCMISSwitch.TraceVerbose) { Trace.WriteLine(name + ": put [" + GetFormattedKeys(keys) + "] = " + value); } } finally { Unlock(); } }
public object Get(string[] keys) { if (keys == null) { return(null); } if (keys.Length != cacheLevels.Count) { throw new ArgumentException("Wrong number of keys!"); } object result = null; Lock(); try { IBindingCacheLevel cacheLevel = root; // follow the branch for (int i = 0; i < keys.Length - 1; i++) { object level = cacheLevel[keys[i]]; // does the branch exist? if (level == null) { return(null); } // next level cacheLevel = (IBindingCacheLevel)level; } // get the value result = cacheLevel[keys[keys.Length - 1]]; } finally { Unlock(); } return(result); }
public void Put(string[] keys, object value) { if (keys == null) { return; } if (keys.Length != cacheLevels.Count) { throw new ArgumentException("Wrong number of keys!", nameof(keys)); } lock (cacheLock) { IBindingCacheLevel cacheLevel = root; // follow the branch for (int i = 0; i < keys.Length - 1; i++) { object level = cacheLevel[keys[i]]; // does the branch exist? if (level == null) { level = CreateCacheLevel(i + 1); cacheLevel[keys[i]] = level; } // next level cacheLevel = (IBindingCacheLevel)level; } cacheLevel[keys[keys.Length - 1]] = value; if (Logger.IsDebugEnabled) { Logger.Debug("Binding Cache: " + name + ": put [" + GetFormattedKeys(keys) + "] = " + value); } } }
public void Remove(string[] keys) { if (keys == null) { return; } Lock(); try { IBindingCacheLevel cacheLevel = root; // follow the branch for (int i = 0; i < keys.Length - 1; i++) { object level = cacheLevel[keys[i]]; // does the branch exist? if (level == null) { return; } // next level cacheLevel = (IBindingCacheLevel)level; } cacheLevel.Remove(keys[keys.Length - 1]); if (DotCMISDebug.DotCMISSwitch.TraceVerbose) { Trace.WriteLine(name + ": removed [" + GetFormattedKeys(keys) + "]"); } } finally { Unlock(); } }
public void Initialize(string[] cacheLevelConfig) { if (cacheLevels != null) { throw new ApplicationException("Cache already initialize!"); } if ((cacheLevelConfig == null) || (cacheLevelConfig.Length == 0)) { throw new ArgumentException("Cache config must not be empty!"); } Lock(); try { cacheLevels = new List<Type>(); cacheLevelParameters = new List<IDictionary<string, string>>(); // build level lists foreach (string config in cacheLevelConfig) { int x = config.IndexOf(' '); if (x == -1) { AddLevel(config, null); } else { AddLevel(config.Substring(0, x), config.Substring(x + 1)); } } root = CreateCacheLevel(0); } finally { Unlock(); } }