File indexing completed on 2024-04-06 11:56:18
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 #ifndef GENERS_CSTRINGSTREAM_HH_
0016 #define GENERS_CSTRINGSTREAM_HH_
0017
0018 #include <iostream>
0019 #include <vector>
0020
0021 #include <memory>
0022 #include "Alignment/Geners/interface/CStringBuf.hh"
0023 #include "Alignment/Geners/interface/ZlibHandle.hh"
0024
0025 namespace gs {
0026 class CStringStream : public std::basic_iostream<char> {
0027 public:
0028 enum CompressionMode { NOT_COMPRESSED = 0, ZLIB, BZIP2 };
0029
0030 CStringStream(CompressionMode m, int compressionLevel, unsigned minSizeToCompress, unsigned bufSize);
0031
0032
0033 inline CompressionMode compressionMode() const { return mode_; }
0034 inline int compressionLevel() const { return compressionLevel_; }
0035 inline unsigned minSizeToCompress() const { return minSizeToCompress_; }
0036 inline std::size_t bufferSize() const { return comprBuf_.size(); }
0037
0038
0039
0040 void setCompressionMode(CompressionMode m);
0041
0042
0043
0044 inline void setSink(std::ostream &os) { sink_ = &os; }
0045
0046
0047
0048
0049
0050
0051 CompressionMode writeCompressed();
0052
0053
0054
0055
0056 void readCompressed(std::istream &in, unsigned compressionCode, unsigned long long len);
0057
0058
0059
0060 void reset();
0061
0062
0063 static bool getCompressionModeByName(const char *name, CompressionMode *m);
0064
0065
0066 static std::string compressionModeName(CompressionMode m, bool useShortName = true);
0067
0068 CStringStream(const CStringStream &) = delete;
0069 CStringStream &operator=(const CStringStream &) = delete;
0070
0071 private:
0072 CStringBuf buf_;
0073 CompressionMode mode_;
0074 int compressionLevel_;
0075 unsigned minSizeToCompress_;
0076 std::vector<char> comprBuf_;
0077 std::vector<char> readBuf_;
0078 std::ostream *sink_;
0079 std::unique_ptr<ZlibInflateHandle> inflator_;
0080 std::unique_ptr<ZlibDeflateHandle> deflator_;
0081 };
0082 }
0083
0084 #endif