InputStream.h
上传用户:market2
上传日期:2018-11-18
资源大小:18786k
文件大小:3k
源码类别:

外挂编程

开发平台:

Windows_Unix

  1. /*
  2.  *  OpenKore C++ Standard Library
  3.  *  Copyright (C) 2006  VCL
  4.  *
  5.  *  This library is free software; you can redistribute it and/or
  6.  *  modify it under the terms of the GNU Lesser General Public
  7.  *  License as published by the Free Software Foundation; either
  8.  *  version 2.1 of the License, or (at your option) any later version.
  9.  *
  10.  *  This library is distributed in the hope that it will be useful,
  11.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.  *  Lesser General Public License for more details.
  14.  *
  15.  *  You should have received a copy of the GNU Lesser General Public
  16.  *  License along with this library; if not, write to the Free Software
  17.  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  18.  *  MA  02110-1301  USA
  19.  */
  20. #ifndef _OSL_INPUT_STREAM_H_
  21. #define _OSL_INPUT_STREAM_H_
  22. #include "../Object.h"
  23. #include "IOException.h"
  24. namespace OSL {
  25. /**
  26.  * An abstract class for all input stream classes.
  27.  *
  28.  * An input stream is a stream from which data can be read. Where
  29.  * the data originally came from depends on the concrete subclass.
  30.  *
  31.  * @note
  32.  *    This abstract class does not guarantee thread-safety. Thread-safety
  33.  *    depends on the concrete subclass. Though you can use
  34.  *    createThreadSafe() to create a thread-safe wrapper around this class.
  35.  *
  36.  * @class InputStream OSL/IO/InputStream.h
  37.  * @ingroup IO
  38.  */
  39. class InputStream: public Object {
  40. public:
  41. /**
  42.  * Flush and close this stream. If the stream is already
  43.  * closed, then this function does nothing.
  44.  */
  45. virtual void close() = 0;
  46. /**
  47.  * Check whether the end of the stream has been reached.
  48.  *
  49.  * @throws IOException
  50.  */
  51. virtual bool eof() const throw(IOException) = 0;
  52. /**
  53.  * Read up to size bytes of data from this stream.
  54.  *
  55.  * @param buffer The buffer to receive the read data.
  56.  * @param size   The maximum size of buffer.
  57.  * @return The number of bytes read, which may be smaller than size, and may even be 0.
  58.  *         Returns -1 if the end of the stream has been reached.
  59.  * @pre  buffer != NULL
  60.  * @pre  size > 0
  61.  * @post if eof(): result == -1
  62.  * @throws IOException
  63.  */
  64. virtual int read(char *buffer, unsigned int size) throw(IOException) = 0;
  65. /**
  66.  * Create a thread-safe wrapper around this InputStream.
  67.  *
  68.  * @post
  69.  *     The current InputStream's reference will be increased by 1,
  70.  *     and the return value will have a reference count of 1.
  71.  * @post
  72.  *     result != NULL
  73.  *
  74.  * @note
  75.  *     The return value holds a reference to the current InputStream.
  76.  *     When the return value is deleted, the current InputStream will be
  77.  *     dereferenced. So make sure the current InputStream is not deleted
  78.  *     manually before the return value is deleted. It's recommended that
  79.  *     you use Object::ref() and Object::unref() instead of @c new and
  80.  *     @c delete.
  81.  */
  82. virtual InputStream *createThreadSafe() throw();
  83. };
  84. }
  85. #endif /* _OSL_INPUT_STREAM_H_ */