Panda3D
|
This class provides a locking wrapper around an arbitrary ostream pointer. More...
#include "streamWrapper.h"
Public Member Functions | |
OStreamWrapper (ostream *stream, bool owns_pointer) | |
OStreamWrapper (ostream &stream) | |
void | acquire () |
Acquires the internal lock. | |
ostream * | get_ostream () const |
Returns the ostream this object is wrapping. | |
bool | put (char c) |
Atomically writes a single character to the stream. | |
void | release () |
Releases the internal lock. | |
void | seek_write (streamsize pos, const char *buffer, streamsize num_bytes, bool &fail) |
Atomically seeks to a particular offset from the beginning of the file, and writes a number of bytes to the stream. | |
void | write (const char *buffer, streamsize num_bytes) |
Atomically writes a number of bytes to the stream, without error detection. | |
void | write (const char *buffer, streamsize num_bytes, bool &fail) |
Atomically writes a number of bytes to the stream. |
This class provides a locking wrapper around an arbitrary ostream pointer.
A thread may use this class to perform an atomic seek/write operation.
Definition at line 81 of file streamWrapper.h.
void StreamWrapperBase::acquire | ( | ) | [inline, inherited] |
Acquires the internal lock.
User code should call this to take temporary possession of the stream and perform direct I/O operations on it, for instance to make several sequential atomic reads. You may not call any of the StreamWrapper methods while the lock is held, other than release().
Use with extreme caution! This is a very low-level, non-recursive lock. You must call acquire() only once, and you must later call release() exactly once. Failing to do so may result in a hard deadlock with no available debugging features.
Definition at line 47 of file streamWrapper.I.
Referenced by Multifile::flush(), IStreamWrapper::get(), put(), IStreamWrapper::read(), IStreamWrapper::seek_gpos_eof(), IStreamWrapper::seek_read(), seek_write(), and write().
ostream * OStreamWrapper::get_ostream | ( | ) | const [inline] |
Returns the ostream this object is wrapping.
Definition at line 152 of file streamWrapper.I.
bool OStreamWrapper::put | ( | char | c | ) | [inline] |
Atomically writes a single character to the stream.
Returns true on success, false on failure.
Definition at line 163 of file streamWrapper.I.
References StreamWrapperBase::acquire(), and StreamWrapperBase::release().
void StreamWrapperBase::release | ( | ) | [inline, inherited] |
Releases the internal lock.
Must be called exactly once following a call to acquire(). See the cautions with acquire().
Definition at line 65 of file streamWrapper.I.
Referenced by Multifile::flush(), IStreamWrapper::get(), put(), IStreamWrapper::read(), IStreamWrapper::seek_gpos_eof(), IStreamWrapper::seek_read(), seek_write(), and write().
void OStreamWrapper::seek_write | ( | streamsize | pos, |
const char * | buffer, | ||
streamsize | num_bytes, | ||
bool & | fail | ||
) |
Atomically seeks to a particular offset from the beginning of the file, and writes a number of bytes to the stream.
Returns whether a failure condition was detected by the operation.
Definition at line 209 of file streamWrapper.cxx.
References StreamWrapperBase::acquire(), and StreamWrapperBase::release().
void OStreamWrapper::write | ( | const char * | buffer, |
streamsize | num_bytes, | ||
bool & | fail | ||
) |
Atomically writes a number of bytes to the stream.
Returns whether a failure condition was detected by the operation.
Definition at line 192 of file streamWrapper.cxx.
References StreamWrapperBase::acquire(), and StreamWrapperBase::release().
void OStreamWrapper::write | ( | const char * | buffer, |
streamsize | num_bytes | ||
) |
Atomically writes a number of bytes to the stream, without error detection.
Definition at line 178 of file streamWrapper.cxx.
References StreamWrapperBase::acquire(), and StreamWrapperBase::release().