1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
#pragma once
#include "Stream.h"
namespace storm {
STORM_PKG(core.io);
/**
* A stream that meters the number of bytes written to it, so that it is possible to store
* offsets to data structures in the file.
*/
class MeterOStream : public OStream {
STORM_CLASS;
public:
// Create.
STORM_CTOR MeterOStream(OStream *to);
// Write.
virtual Nat STORM_FN write(Buffer buf, Nat start);
// Flush the stream.
virtual Bool STORM_FN flush();
// Close.
virtual void STORM_FN close();
// Get error.
virtual sys::ErrorCode STORM_FN error() const;
// Get the current position.
Word STORM_FN tell();
// Reset the current position.
void STORM_FN reset();
private:
// Output to.
OStream *to;
// Position.
Word pos;
};
// TODO: Eventually, we might want a MeterIStream for completeness. However, that is not as
// useful since we have RIStream, which provides proper seeking and telling.
}
|