aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/streams/xz/decompress.h
diff options
context:
space:
mode:
authoruzhas <uzhas@ydb.tech>2023-11-15 15:42:18 +0300
committeruzhas <uzhas@ydb.tech>2023-11-15 17:27:24 +0300
commit545d86327a12a599340eb9f5866b1637a9f61efc (patch)
treec29c68073592accbe0b1ddf1ab1b453ece0762a7 /library/cpp/streams/xz/decompress.h
parentff4f46c88a1fe37f2ee668b9d9c75306ac973132 (diff)
downloadydb-545d86327a12a599340eb9f5866b1637a9f61efc.tar.gz
add compress base UDF
Diffstat (limited to 'library/cpp/streams/xz/decompress.h')
-rw-r--r--library/cpp/streams/xz/decompress.h40
1 files changed, 40 insertions, 0 deletions
diff --git a/library/cpp/streams/xz/decompress.h b/library/cpp/streams/xz/decompress.h
new file mode 100644
index 0000000000..8389cbdaf9
--- /dev/null
+++ b/library/cpp/streams/xz/decompress.h
@@ -0,0 +1,40 @@
+#pragma once
+
+#include <util/stream/buffered.h>
+#include <util/stream/input.h>
+
+class IZeroCopyInput;
+
+/**
+ * Unbuffered decompressing stream for .XZ and .LZMA files.
+ *
+ * Do not use it for reading in small pieces.
+ */
+class TUnbufferedXzDecompress: public IInputStream {
+public:
+ TUnbufferedXzDecompress(IInputStream* slave);
+ TUnbufferedXzDecompress(IZeroCopyInput* slave);
+ ~TUnbufferedXzDecompress() override;
+
+private:
+ size_t DoRead(void* buf, size_t len) override;
+
+private:
+ class TImpl;
+ std::unique_ptr<TImpl> Impl_;
+};
+
+/**
+ * Buffered decompressing stream for .XZ and .LZMA files.
+ *
+ * Supports efficient `ReadLine` calls and similar "reading in small pieces"
+ * usage patterns.
+ */
+class TXzDecompress: public TBuffered<TUnbufferedXzDecompress> {
+public:
+ template <class T>
+ inline TXzDecompress(T&& t, size_t buf = 1 << 13)
+ : TBuffered<TUnbufferedXzDecompress>(buf, std::forward<T>(t))
+ {
+ }
+};