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; }
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; }