OutputStream.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_OUTPUT_STREAM_H_
  21. #define _OSL_OUTPUT_STREAM_H_
  22. #include "../Object.h"
  23. #include "IOException.h"
  24. namespace OSL {
  25. /**
  26.  * An abstract base class for all output stream classes.
  27.  *
  28.  * An output stream is a stream to which data can be written. Where
  29.  * the data will eventually end up depends on the concrete subclass.
  30.  *
  31.  * @note
  32.  *    This abstract class does not guarantee thread-safety. Thread-safety
  33.  *    dependent on the concrete subclass. Though you can use
  34.  *    createThreadSafe() to create a thread-safe wrapper around the
  35.  *    current class.
  36.  *
  37.  * @class OutputStream OSL/IO/OutputStream.h
  38.  * @ingroup IO
  39.  */
  40. class OutputStream: public Object {
  41. public:
  42. /**
  43.  * Flush and close this stream. If the stream has already
  44.  * been closed, then this method does nothing.
  45.  */
  46. virtual void close() = 0;
  47. /**
  48.  * Flush this stream and force any buffered data
  49.  * to be written to the underlying device.
  50.  *
  51.  * @throws IOException
  52.  */
  53. virtual void flush() throw(IOException) = 0;
  54. /**
  55.  * Write data into the stream.
  56.  *
  57.  * This data may not be immediately written to the underlying
  58.  * device, as it may be buffered. Calling flush() will ensure
  59.  * that the data is written to the underlying device.
  60.  *
  61.  * @param data The data to write.
  62.  * @param size The number of bytes in data.
  63.  * @return  The number of bytes written.
  64.  * @pre data != NULL
  65.  * @pre size > 0
  66.  * @throws  IOException
  67.  */
  68. virtual unsigned int write(const char *data, unsigned int size) throw(IOException) = 0;
  69. /**
  70.  * Create a thread-safe wrapper around this OutputStream.
  71.  *
  72.  * @post
  73.  *     The current OutputStream's reference will be increased by 1,
  74.  *     and the return value will have a reference count of 1.
  75.  * @post
  76.  *     result != NULL
  77.  *
  78.  * @note
  79.  *     The return value holds a reference to the current OutputStream.
  80.  *     When the return value is deleted, the current OutputStream will be
  81.  *     dereferenced. So make sure the current OutputStream is not deleted
  82.  *     manually before the return value is deleted. It's recommended that
  83.  *     you use Object::ref() and Object::unref() instead of @c new and
  84.  *     @c delete.
  85.  */
  86. virtual OutputStream *createThreadSafe() throw();
  87. };
  88. }
  89. #endif /* _OSL_OUTPUT_STREAM_H_ */