mirror of https://github.com/OpenMW/openmw.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
31 lines
828 B
C++
31 lines
828 B
C++
3 years ago
|
#ifndef OPENMW_CONSTRAINEDFILESTREAMBUF_H
|
||
|
#define OPENMW_CONSTRAINEDFILESTREAMBUF_H
|
||
|
|
||
|
#include "lowlevelfile.hpp"
|
||
|
|
||
|
#include <streambuf>
|
||
|
|
||
|
namespace Files
|
||
|
{
|
||
|
/// A file streambuf constrained to a specific region in the file, specified by the 'start' and 'length' parameters.
|
||
|
class ConstrainedFileStreamBuf final : public std::streambuf
|
||
|
{
|
||
|
public:
|
||
|
ConstrainedFileStreamBuf(const std::string& fname, std::size_t start, std::size_t length);
|
||
|
|
||
|
int_type underflow() final;
|
||
|
|
||
|
pos_type seekoff(off_type offset, std::ios_base::seekdir whence, std::ios_base::openmode mode) final;
|
||
|
|
||
|
pos_type seekpos(pos_type pos, std::ios_base::openmode mode) final;
|
||
|
|
||
|
private:
|
||
|
std::size_t mOrigin;
|
||
|
std::size_t mSize;
|
||
|
LowLevelFile mFile;
|
||
|
char mBuffer[8192]{0};
|
||
|
};
|
||
|
}
|
||
|
|
||
|
#endif
|