135 lines
3.2 KiB
Text
135 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;
|
||
|
}
|