예제 #1
0
        internal int[] Find(string objectFullName, ObjectFindOptions options, ObjectIndex[] indexes)
        {
            int[] returnValue = null;

            if (null != _cache)
            {
                var parameters = new object[3 + ((null == indexes) ? 0 : indexes.Length)];
                parameters[0] = objectFullName;
                parameters[1] = options;
                parameters[2] = "F";
                if (null != indexes)
                {
                    for (int i = 0; indexes.Length > i; i++)
                    {
                        parameters[i + 3] = indexes[i];
                    }
                }
                returnValue = _cache.Get(parameters);
                if (null == returnValue)
                {
                    var order = options.Order;
                    if (null != order && null != order.Indexes)
                    {
                        if (!_ValidateIndexNames(null, order.Indexes))
                        {
                            throw new ArgumentException("Invalid index name supplied in OrderOptions.");
                        }
                    }

                    returnValue = _indexer.Find(objectFullName, options, indexes);
                    _cache.Set(returnValue, parameters);
                }
            }
            else
            {
                returnValue = _indexer.Find(objectFullName, options, indexes);
            }
            return returnValue;
        }
예제 #2
0
        public int Count(string objectFullName, ObjectFindOptions options, ObjectIndex[] indexes)
        {
            int returnValue = 0;

            if (null != _cache)
            {
                var parameters = new object[3 + ((null == indexes) ? 0 : indexes.Length)];
                parameters[0] = objectFullName;
                parameters[1] = options;
                parameters[2] = "C";
                if (null != indexes)
                {
                    for (int i = 0; indexes.Length > i; i++)
                    {
                        parameters[i + 3] = indexes[i];
                    }
                }
                int[] cacheValue = _cache.Get(parameters);
                if (cacheValue != null && cacheValue.Length == 1)
                {
                    returnValue = cacheValue[0];
                }
                else
                {
                    returnValue = _indexer.Count(objectFullName, options, indexes);
                    _cache.Set(new int[] { returnValue }, parameters);
                }
            }
            else
            {
                returnValue = _indexer.Count(objectFullName, options, indexes);
            }
            return returnValue;
        }