/// <summary>
        /// Returns a collection of device indexes for each of the relevent
        /// HTTP headers provided. Those headers which are unrelated to device
        /// detection are ignored.
        /// </summary>
        /// <param name="headers">Collection of HTTP headers and values</param>
        /// <returns>Collection of headers and device indexes for each one</returns>
        public IDictionary <string, int> GetDeviceIndexes(NameValueCollection headers)
        {
            IDictionary <string, int> indexes = new SortedDictionary <string, int>();

            if (headers != null)
            {
                var reader = _pool.GetReader();
                try
                {
                    foreach (string header in headers.Keys)
                    {
                        if (HttpHeaders.BinarySearch(header) >= 0)
                        {
                            indexes.Add(header, GetDeviceIndex(headers[header]));
                        }
                    }
                }
                finally
                {
                    _pool.Release(reader);
                }
            }
            return(indexes);
        }