/// <summary>
        /// Gets the result item list.
        /// </summary>
        /// <param name="cacheIndexInternal">The cache index internal.</param>
        /// <param name="itemPositionList">The item position list.</param>
        /// <returns>List of ResultItems</returns>
        internal static List<ResultItem> GetResultItemList(CacheIndexInternal cacheIndexInternal, IEnumerable<int> itemPositionList)
        {
            List<ResultItem> resultItemList = new List<ResultItem>();

            foreach (int itemPosition in itemPositionList)
            {
                resultItemList.Add(new ResultItem(cacheIndexInternal.InDeserializationContext.IndexId,
                    cacheIndexInternal.GetItem(itemPosition).ItemId,
                    null,
                    InternalItemAdapter.ConvertToTagDictionary(cacheIndexInternal.GetItem(itemPosition).TagList, cacheIndexInternal.InDeserializationContext)));
            }

            return resultItemList;
        }
        /// <summary>
        /// Gets the index data item list.
        /// </summary>
        /// <param name="cacheIndexInternal">The cache index internal.</param>
        /// <param name="offset">The offset.</param>
        /// <param name="itemNum">If 0 gets all items.</param>
        /// <returns>List of IndexDataItems</returns>
        internal static List<IndexDataItem> GetIndexDataItemList(CacheIndexInternal cacheIndexInternal, int offset, int itemNum)
        {
            if (itemNum == Int32.MaxValue)
            {
                itemNum = cacheIndexInternal.Count;
            }

            List<IndexDataItem> resultItemList = new List<IndexDataItem>(itemNum);

            if (cacheIndexInternal.Count >= offset)
            {
                for (int i = offset - 1; i < cacheIndexInternal.Count && resultItemList.Count < itemNum; i++)
                {
                    resultItemList.Add(new IndexDataItem(cacheIndexInternal.GetItem(i).ItemId,
                        InternalItemAdapter.ConvertToTagDictionary(cacheIndexInternal.GetItem(i).TagList, cacheIndexInternal.InDeserializationContext)));
                }
            }
            return resultItemList;
        }
        /// <summary>
        /// Gets the result item list.
        /// </summary>
        /// <param name="cacheIndexInternal">The cache index internal.</param>
        /// <param name="itemPositionList">The item position list.</param>
        /// <returns>List of ResultItems</returns>
        internal static List <ResultItem> GetResultItemList(CacheIndexInternal cacheIndexInternal, IEnumerable <int> itemPositionList)
        {
            List <ResultItem> resultItemList = new List <ResultItem>();

            foreach (int itemPosition in itemPositionList)
            {
                resultItemList.Add(new ResultItem(cacheIndexInternal.InDeserializationContext.IndexId,
                                                  cacheIndexInternal.GetItem(itemPosition).ItemId,
                                                  null,
                                                  InternalItemAdapter.ConvertToTagDictionary(cacheIndexInternal.GetItem(itemPosition).TagList, cacheIndexInternal.InDeserializationContext)));
            }

            return(resultItemList);
        }
        /// <summary>
        /// Gets the index data item list.
        /// </summary>
        /// <param name="cacheIndexInternal">The cache index internal.</param>
        /// <param name="offset">The offset.</param>
        /// <param name="itemNum">If 0 gets all items.</param>
        /// <returns>List of IndexDataItems</returns>
        internal static List <IndexDataItem> GetIndexDataItemList(CacheIndexInternal cacheIndexInternal, int offset, int itemNum)
        {
            if (itemNum == Int32.MaxValue)
            {
                itemNum = cacheIndexInternal.Count;
            }

            List <IndexDataItem> resultItemList = new List <IndexDataItem>(itemNum);

            if (cacheIndexInternal.Count >= offset)
            {
                for (int i = offset - 1; i < cacheIndexInternal.Count && resultItemList.Count < itemNum; i++)
                {
                    resultItemList.Add(new IndexDataItem(cacheIndexInternal.GetItem(i).ItemId,
                                                         InternalItemAdapter.ConvertToTagDictionary(cacheIndexInternal.GetItem(i).TagList, cacheIndexInternal.InDeserializationContext)));
                }
            }
            return(resultItemList);
        }
        /// <summary>
        /// Gets the tags.
        /// </summary>
        /// <param name="cacheIndexInternal">The cache index internal.</param>
        /// <param name="searchItem">The search item.</param>
        /// <param name="resultItem">The result item.</param>
        internal static void GetTags(CacheIndexInternal cacheIndexInternal, IndexItem searchItem, IndexItem resultItem)
        {
            int searchIndex = cacheIndexInternal.Search(searchItem);
            if (searchIndex > -1)
            {
                IndexItem tempIndexItem = InternalItemAdapter.ConvertToIndexItem(cacheIndexInternal.GetItem(searchIndex), cacheIndexInternal.InDeserializationContext);

                foreach (KeyValuePair<string, byte[]> kvp in tempIndexItem.Tags)
                {
                    if (!resultItem.Tags.ContainsKey(kvp.Key))
                    {
                        resultItem.Tags.Add(kvp.Key, kvp.Value);
                    }
                }
            }
        }