Ejemplo n.º 1
0
        internal EnumerationDataChunk GetNextChunk(EnumerationPointer pointer)
        {
            EnumerationDataChunk nextChunk = null;
            IEnumerationProvider provider  = GetProvider(pointer);

            if (pointer.isDisposable && provider != null)
            {
                provider.Dispose();
                if (_index.ContainsKey(pointer))
                {
                    _index.Remove(pointer);
                }
                nextChunk         = new EnumerationDataChunk();
                nextChunk.Pointer = pointer;
            }
            else if (provider != null)
            {
                nextChunk = provider.GetNextChunk(pointer);
                //Dispose the provider if this is the last chunk for it
                if (nextChunk.IsLastChunk)
                {
                    provider.Dispose();
                    if (_index.ContainsKey(pointer))
                    {
                        _index.Remove(pointer);
                    }
                }
            }

            return(nextChunk);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Recupera o próximo pedaço.
        /// </summary>
        /// <param name="pointer">Ponteiro para o pedaço.</param>
        /// <returns></returns>
        internal EnumerationDataChunk GetNextChunk(EnumerationPointer pointer)
        {
            EnumerationDataChunk nextChunk = null;
            IEnumerationProvider provider  = this.GetProvider(pointer);

            if (pointer.IsDisposable && (provider != null))
            {
                provider.Dispose();
                if (_index.ContainsKey(pointer))
                {
                    _index.Remove(pointer);
                }
                nextChunk         = new EnumerationDataChunk();
                nextChunk.Pointer = pointer;
                return(nextChunk);
            }
            if (provider != null)
            {
                nextChunk = provider.GetNextChunk(pointer);
                if (nextChunk.IsLastChunk)
                {
                    provider.Dispose();
                    if (_index.ContainsKey(pointer))
                    {
                        _index.Remove(pointer);
                    }
                }
            }
            return(nextChunk);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Recupera o provedor de enumeração.
        /// </summary>
        /// <param name="pointer"></param>
        /// <returns></returns>
        private IEnumerationProvider GetProvider(EnumerationPointer pointer)
        {
            if (_index == null)
            {
                _index = new Dictionary <EnumerationPointer, IEnumerationProvider>();
            }
            IEnumerationProvider provider = null;

            if (_index.ContainsKey(pointer))
            {
                return(_index[pointer]);
            }
            return(provider);
        }
Ejemplo n.º 4
0
        private IEnumerationProvider GetProvider(EnumerationPointer pointer)
        {
            if (_index == null)
            {
                _index = new Dictionary <EnumerationPointer, IEnumerationProvider>();
            }

            IEnumerationProvider provider = null;

            if (_index.ContainsKey(pointer))
            {
                provider = _index[pointer];
            }
            else if (pointer.ChunkId == -1 && !pointer.IsSocketServerDispose && !pointer.isDisposable)
            {
                provider = new SnapshotEnumerationProvider();
                provider.Initialize(pointer, _cache);
                _index.Add(pointer, provider);
            }

            return(provider);
        }
Ejemplo n.º 5
0
 public Program(IEnumerationProvider<Action> enumerationProvider)
 {
     this.enumerationProvider = enumerationProvider;
 }