Document StreamRWops

This commit is contained in:
Dmitry Marakasov 2015-01-11 00:16:27 +03:00
parent 4db7a4e0db
commit 488063c3a5

View File

@ -30,6 +30,22 @@
namespace SDL2pp { namespace SDL2pp {
////////////////////////////////////////////////////////////
/// \brief RWops adaptor which works with STL streams
///
/// \ingroup io
///
/// \headerfile SDL2pp/StreamRWops.hh
///
/// This class extends functionality of RWops concept onto STL
/// streams. With ContainerRWops, you may read from / write to a
/// streams with SDL functions.
///
/// This template supports both input and output streams, but not
/// at the same time, as separate input and output pointers of
/// streams are not compatible with RWops.
///
////////////////////////////////////////////////////////////
template <class S> template <class S>
class StreamRWops : public CustomRWops { class StreamRWops : public CustomRWops {
// since STL streams have different pointers for reading and writing, // since STL streams have different pointers for reading and writing,
@ -37,7 +53,7 @@ class StreamRWops : public CustomRWops {
static_assert(!(std::is_base_of<std::istream, S>::value && std::is_base_of<std::ostream, S>::value), "StreamRWops does not support reading and writing at the same time"); static_assert(!(std::is_base_of<std::istream, S>::value && std::is_base_of<std::ostream, S>::value), "StreamRWops does not support reading and writing at the same time");
protected: protected:
S& stream_; S& stream_; ///< Reference to stream
private: private:
template <class SS> template <class SS>
@ -116,9 +132,28 @@ private:
} }
public: public:
////////////////////////////////////////////////////////////
/// \brief Construct StreamRWops for specificed stream
///
/// \param stream Stream to use
///
////////////////////////////////////////////////////////////
StreamRWops(S& stream) : stream_(stream) { StreamRWops(S& stream) : stream_(stream) {
} }
////////////////////////////////////////////////////////////
/// \brief Seek within the stream
///
/// \param offset Offset in bytes, relative to whence location; can
/// be negative
/// \param whence Any of RW_SEEK_SET, RW_SEEK_CUR, RW_SEEK_END
///
/// \returns Final offset in the stream after the seek or -1 on error
///
/// \see SDL2pp::RWops::Seek
/// \see http://wiki.libsdl.org/SDL_RWseek
///
////////////////////////////////////////////////////////////
virtual Sint64 Seek(Sint64 offset, int whence) override { virtual Sint64 Seek(Sint64 offset, int whence) override {
switch (whence) { switch (whence) {
case RW_SEEK_SET: case RW_SEEK_SET:
@ -136,14 +171,49 @@ public:
return TellHelper<S>(); return TellHelper<S>();
} }
////////////////////////////////////////////////////////////
/// \brief Read from a stream
///
/// \param ptr Pointer to a buffer to read data into
/// \param size Size of each object to read, in bytes
/// \param maxnum Maximum number of objects to be read
///
/// \returns Number of objects read, or 0 at error or end of file
///
/// \see SDL2pp::RWops::Read
/// \see http://wiki.libsdl.org/SDL_RWread
///
////////////////////////////////////////////////////////////
virtual size_t Read(void* ptr, size_t size, size_t maxnum) override { virtual size_t Read(void* ptr, size_t size, size_t maxnum) override {
return ReadHelper<S>(ptr, size, maxnum); return ReadHelper<S>(ptr, size, maxnum);
} }
////////////////////////////////////////////////////////////
/// \brief Write to a stream
///
/// \param ptr Pointer to a buffer containing data to write
/// \param size Size of each object to write, in bytes
/// \param num Number of objects to be write
///
/// \returns Number of objects written
///
/// \see SDL2pp::RWops::Write
/// \see http://wiki.libsdl.org/SDL_RWwrite
///
////////////////////////////////////////////////////////////
virtual size_t Write(const void* ptr, size_t size, size_t num) override { virtual size_t Write(const void* ptr, size_t size, size_t num) override {
return WriteHelper<S>(ptr, size, num); return WriteHelper<S>(ptr, size, num);
} }
////////////////////////////////////////////////////////////
/// \brief Close strem
///
/// \returns 0 on success or a negative error code on failure
///
/// \see SDL2pp::RWops::Close
/// \see http://wiki.libsdl.org/SDL_RWclose
///
////////////////////////////////////////////////////////////
virtual int Close() override { virtual int Close() override {
return CloseHelper<S>(); return CloseHelper<S>();
} }