diff options
author | Kenneth Heafield <github@kheafield.com> | 2012-10-30 23:33:22 +0400 |
---|---|---|
committer | Kenneth Heafield <github@kheafield.com> | 2012-10-30 23:33:22 +0400 |
commit | 4b98b0937cfcf8932b8cad2822dc01f9562353fd (patch) | |
tree | 6afb9273399ef2cdbe6a93e17a54036cb5426826 /util/read_compressed.hh | |
parent | 06126ae6e259fc619073f09a9d1de9d0b8f109fd (diff) |
Add bzip and xz input for FilePiece KenLM 06f78db2
Diffstat (limited to 'util/read_compressed.hh')
-rw-r--r-- | util/read_compressed.hh | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/util/read_compressed.hh b/util/read_compressed.hh new file mode 100644 index 000000000..83ca9fb22 --- /dev/null +++ b/util/read_compressed.hh @@ -0,0 +1,74 @@ +#ifndef UTIL_READ_COMPRESSED__ +#define UTIL_READ_COMPRESSED__ + +#include "util/exception.hh" +#include "util/scoped.hh" + +#include <cstddef> + +#include <stdint.h> + +namespace util { + +class CompressedException : public Exception { + public: + CompressedException() throw(); + virtual ~CompressedException() throw(); +}; + +class GZException : public CompressedException { + public: + GZException() throw(); + ~GZException() throw(); +}; + +class BZException : public CompressedException { + public: + BZException() throw(); + ~BZException() throw(); +}; + +class XZException : public CompressedException { + public: + XZException() throw(); + ~XZException() throw(); +}; + +class ReadBase; + +class ReadCompressed { + public: + static const std::size_t kMagicSize = 6; + // Must have at least kMagicSize bytes. + static bool DetectCompressedMagic(const void *from); + + // Takes ownership of fd. + explicit ReadCompressed(int fd); + + // Must call Reset later. + ReadCompressed(); + + ~ReadCompressed(); + + // Takes ownership of fd. + void Reset(int fd); + + std::size_t Read(void *to, std::size_t amount); + + uint64_t RawAmount() const { return raw_amount_; } + + private: + friend class ReadBase; + + scoped_ptr<ReadBase> internal_; + + uint64_t raw_amount_; + + // No copying. + ReadCompressed(const ReadCompressed &); + void operator=(const ReadCompressed &); +}; + +} // namespace util + +#endif // UTIL_READ_COMPRESSED__ |