// This file is part of libZelda. // // libZelda is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // libZelda is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with libZelda. If not, see #ifndef __TEXTSTREAM_HPP__ #define __TEXTSTREAM_HPP__ #include "Stream.hpp" #include #include namespace zelda { namespace io { // TODO (Phil#1#): Need to actually use AccessMode /*! \class TextStream * \brief A Class for reading or writing Text data. * * TextStream is a class for reading/writing TextData.
* It is currently incomplete, but usable, so use with caution.
* Since it's incomplete it may not behave exactly as expected. */ class TextStream : public Stream { public: /*! \enum TextMode * \brief Specifies how the file is opened. */ enum TextMode { Open, //!< The file is opened if it exists. Create, //!< Create the file if it does not exist. OpenOrCreate = Open|Create, //!< If the file does not exist when opening the file it is created Truncate, //!< All the data currently that is in the file is erased. Append //!< After opening the file the current line is set to the end of the buffer }; /*! \enum AccessMode * \brief Specifies how the Stream can be interacted with. */ enum AccessMode { ReadOnly, //!< The Stream can only be read from. WriteOnly,//!< The Stream can only be written to. ReadWrite //!< The Stream can be read from or written to. }; /*! \brief This constructor opens the file and loads all the lines. */ TextStream(const std::string& filename, TextMode fileMode = Open, AccessMode accessMode = ReadWrite); /*! \brief Creates a new buffer and saves all lines to the specified file. * \param filename The file, including path to save to. */ void save(const std::string& filename = ""); /*! \brief Reads the line at the current address. * * \return std::string The line read. */ std::string readLine(); /*! \brief Writes a line to the buffer * * \param str The string to write. */ void writeLine(const std::string& str); /*! \brief Reads a given amount of lines relative to the current address * * \param numLines The amount of lines to read. * \return std::vector The lines read. */ std::vector readLines(Uint32 numLines); /*! \brief Reads a given list of lines relative to the current address * * \param lines The lines to write. */ void writeLines(std::vector lines); /*! \brief Reads all the lines in the current buffer. * * \return The lines read. */ std::vector readAllLines(); /*! \brief Reads a line at the given address. * * \param line The line to read. * \return std::string The lines read. */ std::string readLineAt(Uint32 line); /*! \brief Writes a line at the given address. * * \param line The address to write to. * \param str The string to write. */ void writeLineAt(Uint32 line, const std::string& str); /*! \brief Sets the current line in the Stream. * * \param line The line to seek to. */ void setCurrentLine(Uint32 line); /*! \brief Returns the current line in the stream. * * \return Uint32 The current line in the stream. */ Uint32 currentLine() const; /*! \brief Sets the AccessMode of the Stream. * * \param mode The mode to set. */ void setAccessMode(AccessMode mode); /*! \brief Returns the AccessMode of the Stream. * * \return AccessModeThe mode to set. */ AccessMode accessMode() const; /*! \brief Sets the Textmode of the Stream. * * \param mode The mode to set. */ void setTextMode(TextMode mode); /*! \brief Returns the TextMode of the Stream. * * \return TextMode The mode to set. */ TextMode textMode() const; bool isOpenForReading() const; bool isOpenForWriting() const; private: void loadLines(); std::string m_filename; TextMode m_textmode; AccessMode m_accessmode; std::vector m_lines; Uint32 m_currentLine; Uint32 m_startLength; }; } // io } // zelda #endif