#ifndef GCRYPTCLI_DATAINGESTIONLAYER_H #define GCRYPTCLI_DATAINGESTIONLAYER_H #include #include #include using namespace Leonetienne::GCrypt; namespace IO { // This class is used to read in data. class DataIngestionLayer { public: //! Will initialize the ingestion static void Init(); //! Will attempt to read a data block. //! Requires Init() to have been called static void ReadBlock(); //! Have we read in all available blocks? static bool ReachedEOF(); //! Will return true if there is at least one block to be GetBlock()'ed static bool IsBlockReady(); //! Will return the next block in the queue static Block GetNextBlock(); private: static std::istream* in; // We have to hold on to a reference to a filestream, // even if we're always just reading from in. // We still have to CLOSE the file handle afterwards! static std::ifstream ifs; static std::istringstream iss; // Indicates whether EOF has been reached static bool reachedEof; // Indicates whether this class is initialized static bool initialized; // All read blocks, that haven't been given out yet static std::queue blocks; // No instanciation! >:( DataIngestionLayer(); }; } #endif