/// <summary> /// 更新数据 /// </summary> /// <param name="value">更新后的数据</param> /// <param name="oldValue">更新前的数据</param> protected void onUpdated(valueType cacheValue, valueType value, valueType oldValue, fastCSharp.code.memberMap <modelType> memberMap) { int index = getIndex(value), oldIndex = getIndex(oldValue); if (index == oldIndex) { sortType sortKey = getSort(value), oldSortKey = getSort(oldValue); if (!sortKey.Equals(oldSortKey)) { fastCSharp.searchTree <sortType, valueType> tree = array[index].Value; if (tree != null) { ++array[index].Version; try { if (tree.Remove(oldSortKey)) { tree.Add(sortKey, cacheValue); return; } } finally { ++array[index].Version; } } log.Error.Add(typeof(valueType).FullName + " 缓存同步错误", null, true); } } else { onInserted(cacheValue, index); onDeleted(oldValue, oldIndex); } }
/// <summary> /// 添加数据 /// </summary> /// <param name="value">数据对象</param> /// <param name="key">数据对象的关键字</param> protected void onInserted(valueType value, keyType key) { fastCSharp.searchTree <sortType, valueType> tree; if (!groups.TryGetValue(key, out tree)) { groups.Add(key, tree = new fastCSharp.searchTree <sortType, valueType>()); } tree.Add(getSort(value), value); }
/// <summary> /// 重新加载数据 /// </summary> protected virtual void reset() { fastCSharp.searchTree <sortType, valueType> newTree = new fastCSharp.searchTree <sortType, valueType>(); foreach (valueType value in cache.Values) { newTree.Add(getSort(value), value); } tree = newTree; }
/// <summary> /// 重新加载数据 /// </summary> protected override void reset() { fastCSharp.searchTree <sortType, valueType> newTree = new fastCSharp.searchTree <sortType, valueType>(); foreach (valueType value in cache.Values) { if (isValue(value)) { newTree.Add(getSort(value), value); } } tree = newTree; }
/// <summary> /// 获取数据集合 /// </summary> /// <param name="index"></param> /// <param name="isValue">数据匹配委托</param> /// <returns>数据集合</returns> public subArray <valueType> GetFind(int index, Func <valueType, bool> isValue) { fastCSharp.searchTree <sortType, valueType> tree = array[index].Value; if (tree != null) { Monitor.Enter(cache.SqlTool.Lock); try { return(tree.GetFind(isValue)); } finally { Monitor.Exit(cache.SqlTool.Lock); } } return(default(subArray <valueType>)); }
/// <summary> /// 获取数据集合 /// </summary> /// <param name="index"></param> /// <returns>数据集合</returns> public valueType[] GetArray(int index) { fastCSharp.searchTree <sortType, valueType> tree = array[index].Value; if (tree != null) { Monitor.Enter(cache.SqlTool.Lock); try { return(tree.GetArray()); } finally { Monitor.Exit(cache.SqlTool.Lock); } } return(nullValue <valueType> .Array); }
/// <summary> /// 添加数据 /// </summary> /// <param name="value">数据对象</param> /// <param name="index"></param> protected void onInserted(valueType value, int index) { fastCSharp.searchTree <sortType, valueType> tree = array[index].Value; if (tree == null) { (tree = new fastCSharp.searchTree <sortType, valueType>()).Add(getSort(value), value); array[index].SetVersion(tree); } else { ++array[index].Version; tree.Add(getSort(value), value); ++array[index].Version; } }
/// <summary> /// 重新加载数据 /// </summary> protected virtual void reset() { Dictionary <randomKey <keyType>, fastCSharp.searchTree <sortType, valueType> > newValues = dictionary <randomKey <keyType> > .Create <fastCSharp.searchTree <sortType, valueType> >(); fastCSharp.searchTree <sortType, valueType> tree; foreach (valueType value in cache.Values) { keyType key = getKey(value); if (!newValues.TryGetValue(key, out tree)) { newValues.Add(key, tree = new fastCSharp.searchTree <sortType, valueType>()); } tree.Add(getSort(value), value); } groups = newValues; }
/// <summary> /// 获取逆序分页数据集合 /// </summary> /// <typeparam name="arrarType"></typeparam> /// <param name="index"></param> /// <param name="getValue"></param> /// <param name="pageSize">分页大小</param> /// <param name="currentPage">分页页号</param> /// <param name="count">数据总数</param> /// <returns>逆序分页数据集合</returns> public arrarType[] GetPageDesc <arrarType>(int index, Func <valueType, arrarType> getValue, int pageSize, int currentPage, out int count) { arrarType[] values = null; count = 0; fastCSharp.searchTree <sortType, valueType> tree = array[index].Value; if (tree != null) { Monitor.Enter(cache.SqlTool.Lock); try { array.page page = new array.page(count = tree.Count, pageSize, currentPage); values = tree.GetRange(count - page.SkipCount - page.CurrentPageSize, page.CurrentPageSize, getValue); } finally { Monitor.Exit(cache.SqlTool.Lock); } } return(values.reverse()); }
/// <summary> /// 删除数据 /// </summary> /// <param name="value">被删除的数据</param> /// <param name="index"></param> protected void onDeleted(valueType value, int index) { fastCSharp.searchTree <sortType, valueType> tree = array[index].Value; if (tree != null) { sortType sortKey = getSort(value); ++array[index].Version; try { if (tree.Remove(sortKey)) { return; } } finally { ++array[index].Version; } } log.Error.Add(typeof(valueType).FullName + " 缓存同步错误", null, true); }
/// <summary> /// 重新加载数据 /// </summary> protected virtual void reset() { fastCSharp.searchTree <sortType, valueType>[] trees = new fastCSharp.searchTree <sortType, valueType> [array.Length]; int index; foreach (valueType value in cache.Values) { index = getIndex(value); fastCSharp.searchTree <sortType, valueType> tree = trees[index]; if (tree == null) { trees[index] = tree = new fastCSharp.searchTree <sortType, valueType>(); } tree.Add(getSort(value), value); } index = 0; foreach (fastCSharp.searchTree <sortType, valueType> tree in trees) { array[index++].SetVersion(tree); } }
public int CountThan(int index, sortType key) { fastCSharp.searchTree <sortType, valueType> tree = array[index].Value; return(tree != null?tree.CountThan(key) : 0); }
public int GetCount(int index) { fastCSharp.searchTree <sortType, valueType> tree = array[index].Value; return(tree != null ? tree.Count : 0); }