Ejemplo n.º 1
0
        /// <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);
            }
        }
Ejemplo n.º 2
0
 /// <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);
 }
Ejemplo n.º 3
0
 /// <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;
 }
Ejemplo n.º 4
0
 /// <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;
 }
Ejemplo n.º 5
0
 /// <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>));
 }
Ejemplo n.º 6
0
 /// <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);
 }
Ejemplo n.º 7
0
 /// <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;
     }
 }
Ejemplo n.º 8
0
        /// <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;
        }
Ejemplo n.º 9
0
 /// <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());
 }
Ejemplo n.º 10
0
 /// <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);
 }
Ejemplo n.º 11
0
        /// <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);
            }
        }
Ejemplo n.º 12
0
 public int CountThan(int index, sortType key)
 {
     fastCSharp.searchTree <sortType, valueType> tree = array[index].Value;
     return(tree != null?tree.CountThan(key) : 0);
 }
Ejemplo n.º 13
0
 public int GetCount(int index)
 {
     fastCSharp.searchTree <sortType, valueType> tree = array[index].Value;
     return(tree != null ? tree.Count : 0);
 }