// Copyright (C) 2012-2015 ChaosForge Ltd // http://chaosforge.org/ // // This file is part of Nova libraries. // For conditions of distribution and use, see copying.txt file in root folder. /** * @file c_stream.hh * @author Kornel Kisielewicz epyon@chaosforge.org * @brief stream implementation via c f* functions */ #ifndef NV_IO_C_STREAM_HH #define NV_IO_C_STREAM_HH #include #include #include namespace nv { class c_file_system; class c_stream : public stream { friend class c_file_system; protected: c_stream(); // TODO: const char* is prone to deletion - don't store it, or store differently! c_stream( void* pfile, const char* filename ); public: virtual ~c_stream(); virtual size_t read( void* buffer, size_t size, size_t count ); virtual size_t write( const void* buffer, size_t size, size_t count ); virtual bool gets( char* buffer, size_t max_count ); virtual bool seek( long offset, origin orig ); virtual bool eof(); virtual size_t tell(); virtual size_t size(); virtual void flush(); private: void* m_file; //!< FILE* structure, masked const_string m_file_name; //!< File name size_t m_file_size; //!< Cached file size }; } // namespace nv #endif // NV_IO_C_STREAM_HH