historical/toontown-classic.git/panda/include/subStream.I
2024-01-16 11:20:27 -06:00

134 lines
3.2 KiB
Text

/**
* PANDA 3D SOFTWARE
* Copyright (c) Carnegie Mellon University. All rights reserved.
*
* All use of this software is subject to the terms of the revised BSD
* license. You should have received a copy of this license along
* with this source code in a file named "LICENSE."
*
* @file subStream.I
* @author drose
* @date 2002-08-02
*/
/**
*
*/
INLINE ISubStream::
ISubStream() : std::istream(&_buf) {
}
/**
*
*/
INLINE ISubStream::
ISubStream(IStreamWrapper *source, std::streampos start, std::streampos end) : std::istream(&_buf) {
open(source, start, end);
}
/**
* Starts the SubStream reading from the indicated source, with the first
* character being the character at position "start" within the source, for
* end - start total characters. The character at "end" within the source
* will never be read; this will appear to be EOF.
*
* If end is zero, it indicates that the ISubStream will continue until the
* end of the source stream.
*/
INLINE ISubStream &ISubStream::
open(IStreamWrapper *source, std::streampos start, std::streampos end) {
clear((ios_iostate)0);
_buf.open(source, nullptr, start, end, false);
return *this;
}
/**
* Resets the SubStream to empty, but does not actually close the source
* istream.
*/
INLINE ISubStream &ISubStream::
close() {
_buf.close();
return *this;
}
/**
*
*/
INLINE OSubStream::
OSubStream() : std::ostream(&_buf) {
}
/**
*
*/
INLINE OSubStream::
OSubStream(OStreamWrapper *dest, std::streampos start, std::streampos end, bool append) : std::ostream(&_buf) {
open(dest, start, end, append);
}
/**
* Starts the SubStream reading from the indicated dest, with the first
* character being the character at position "start" within the dest, for end
* - start total characters. The character at "end" within the dest will
* never be read; this will appear to be EOF.
*
* If end is zero, it indicates that the OSubStream will continue until the
* end of the dest stream.
*/
INLINE OSubStream &OSubStream::
open(OStreamWrapper *dest, std::streampos start, std::streampos end, bool append) {
clear((ios_iostate)0);
_buf.open(nullptr, dest, start, end, append);
return *this;
}
/**
* Resets the SubStream to empty, but does not actually close the dest
* ostream.
*/
INLINE OSubStream &OSubStream::
close() {
_buf.close();
return *this;
}
/**
*
*/
INLINE SubStream::
SubStream() : std::iostream(&_buf) {
}
/**
*
*/
INLINE SubStream::
SubStream(StreamWrapper *nested, std::streampos start, std::streampos end, bool append) : std::iostream(&_buf) {
open(nested, start, end, append);
}
/**
* Starts the SubStream reading and writing from the indicated nested stream,
* within the indicated range. "end" is the first character outside of the
* range.
*
* If end is zero, it indicates that the SubStream will continue until the end
* of the nested stream.
*/
INLINE SubStream &SubStream::
open(StreamWrapper *nested, std::streampos start, std::streampos end, bool append) {
clear((ios_iostate)0);
_buf.open(nested, nested, start, end, append);
return *this;
}
/**
* Resets the SubStream to empty, but does not actually close the nested
* ostream.
*/
INLINE SubStream &SubStream::
close() {
_buf.close();
return *this;
}