MyGUI  3.2.1
MyGUI_DataStream.cpp
Go to the documentation of this file.
00001 /*
00002  * This source file is part of MyGUI. For the latest info, see http://mygui.info/
00003  * Distributed under the MIT License
00004  * (See accompanying file COPYING.MIT or copy at http://opensource.org/licenses/MIT)
00005  */
00006 
00007 #include "MyGUI_Precompiled.h"
00008 #include "MyGUI_DataStream.h"
00009 
00010 namespace MyGUI
00011 {
00012 
00013     DataStream::DataStream() :
00014         mStream(nullptr),
00015         mSize((size_t) - 1)
00016     {
00017     }
00018 
00019     DataStream::DataStream(std::istream* _stream) :
00020         mStream(_stream),
00021         mSize((size_t) - 1)
00022     {
00023     }
00024 
00025     DataStream::~DataStream()
00026     {
00027     }
00028 
00029     size_t DataStream::size()
00030     {
00031         if (mStream == nullptr) return 0;
00032         if (mSize == (size_t) - 1)
00033         {
00034             mStream->seekg (0, std::ios::end);
00035             mSize = (size_t)mStream->tellg();
00036             mStream->seekg (0, std::ios::beg);
00037         }
00038         return mSize;
00039     }
00040 
00041     bool DataStream::eof()
00042     {
00043         return mStream == nullptr ? true : mStream->eof();
00044     }
00045 
00046     void DataStream::readline(std::string& _source, Char _delim)
00047     {
00048         if (mStream == nullptr) return;
00049         std::getline(*mStream, _source, (char)_delim);
00050     }
00051 
00052     size_t DataStream::read(void* _buf, size_t _count)
00053     {
00054         if (mStream == nullptr) return 0;
00055         size_t count = std::min(size(), _count);
00056         mStream->read((char*)_buf, count);
00057         return count;
00058     }
00059 
00060 } // namespace MyGUI