92 lines
2.7 KiB
C++
92 lines
2.7 KiB
C++
/**
|
|
* 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.h
|
|
* @author drose
|
|
* @date 2002-08-02
|
|
*/
|
|
|
|
#ifndef SUBSTREAM_H
|
|
#define SUBSTREAM_H
|
|
|
|
#include "pandabase.h"
|
|
#include "subStreamBuf.h"
|
|
#include "streamWrapper.h"
|
|
|
|
/**
|
|
* An istream object that presents a subwindow into another istream. The
|
|
* first character read from this stream will be the "start" character from
|
|
* the source istream; just before the file pointer reaches the "end"
|
|
* character, eof is returned.
|
|
*
|
|
* The source stream must be one that we can randomly seek within. The
|
|
* resulting ISubStream will also support arbitrary seeks.
|
|
*/
|
|
class EXPCL_PANDA_EXPRESS ISubStream : public std::istream {
|
|
PUBLISHED:
|
|
INLINE ISubStream();
|
|
INLINE explicit ISubStream(IStreamWrapper *source, std::streampos start, std::streampos end);
|
|
|
|
#if _MSC_VER >= 1800
|
|
INLINE ISubStream(const ISubStream ©) = delete;
|
|
#endif
|
|
|
|
INLINE ISubStream &open(IStreamWrapper *source, std::streampos start, std::streampos end);
|
|
INLINE ISubStream &close();
|
|
|
|
private:
|
|
SubStreamBuf _buf;
|
|
};
|
|
|
|
/**
|
|
* An ostream object that presents a subwindow into another ostream. The
|
|
* first character written to this stream will be the "start" character in the
|
|
* dest istream; no characters may be written to character "end" or later
|
|
* (unless end is zero).
|
|
*
|
|
* The dest stream must be one that we can randomly seek within. The
|
|
* resulting OSubStream will also support arbitrary seeks.
|
|
*/
|
|
class EXPCL_PANDA_EXPRESS OSubStream : public std::ostream {
|
|
PUBLISHED:
|
|
INLINE OSubStream();
|
|
INLINE explicit OSubStream(OStreamWrapper *dest, std::streampos start, std::streampos end, bool append = false);
|
|
|
|
#if _MSC_VER >= 1800
|
|
INLINE OSubStream(const OSubStream ©) = delete;
|
|
#endif
|
|
|
|
INLINE OSubStream &open(OStreamWrapper *dest, std::streampos start, std::streampos end, bool append = false);
|
|
INLINE OSubStream &close();
|
|
|
|
private:
|
|
SubStreamBuf _buf;
|
|
};
|
|
|
|
/**
|
|
* Combined ISubStream and OSubStream for bidirectional I/O.
|
|
*/
|
|
class EXPCL_PANDA_EXPRESS SubStream : public std::iostream {
|
|
PUBLISHED:
|
|
INLINE SubStream();
|
|
INLINE explicit SubStream(StreamWrapper *nested, std::streampos start, std::streampos end, bool append = false);
|
|
|
|
#if _MSC_VER >= 1800
|
|
INLINE SubStream(const SubStream ©) = delete;
|
|
#endif
|
|
|
|
INLINE SubStream &open(StreamWrapper *nested, std::streampos start, std::streampos end, bool append = false);
|
|
INLINE SubStream &close();
|
|
|
|
private:
|
|
SubStreamBuf _buf;
|
|
};
|
|
|
|
#include "subStream.I"
|
|
|
|
#endif
|