/* * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. * Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ using System; using System.Collections.Generic; using System.IO; namespace QuantConnect.ToolBox { /// /// Defines how to open/close a source file /// public interface IStreamProvider : IDisposable { /// /// Opens the specified source as read to be consumed stream /// /// The source file to be opened /// The stream representing the specified source IEnumerable Open(string source); /// /// Closes the specified source file stream /// /// The source file to be closed void Close(string source); } /// /// Provides factor method for creating an from a file name /// public static class StreamProvider { /// /// Creates a new capable of reading a file with the specified extenson /// /// The file extension /// A new stream provider capable of reading files with the specified extension public static IStreamProvider ForExtension(string extension) { var ext = Path.GetExtension(extension); if (ext == ".zip") { return new ZipStreamProvider(); } if (ext == ".bz2") { return new Bz2StreamProvider(); } if (ext == ".gz") { return new GzipStreamProvider(); } return new FileStreamProvider(); } } }