Pchp.Library.Streams.PhpStream.AddFilter C# (CSharp) Method

AddFilter() public method

Adds a filter to one of the read or write filter chains.
public AddFilter ( IFilter filter, FilterChainOptions where ) : void
filter IFilter The filter.
where FilterChainOptions The position in the chain.
return void
        public void AddFilter(IFilter filter, FilterChainOptions where)
        {
            Debug.Assert((where & FilterChainOptions.ReadWrite) != FilterChainOptions.ReadWrite);
            List<IFilter> list = null;

            // Which chain.
            if ((where & FilterChainOptions.Read) > 0)
            {
                if (readFilters == null) readFilters = new List<IFilter>();
                list = readFilters;
            }
            else
            {
                if (writeFilters == null) writeFilters = new List<IFilter>();
                list = writeFilters;
            }

            // Position in the chain.
            if ((where & FilterChainOptions.Tail) > 0)
            {
                list.Add(filter);
                if ((list == readFilters) && (ReadBufferLength > 0))
                {
                    // Process all the data in the read buffers.
                    var q = new Queue<TextElement>();
                    foreach (var o in readBuffers)
                    {
                        q.Enqueue(filter.Filter(_ctx, o, false));
                    }

                    readBuffers = q;
                }
            }
            else
            {
                list.Insert(0, filter);
            }
        }