Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
Deflate.cpp
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2025. All rights reserved
3 */
4#include "Stroika/Foundation/StroikaPreComp.h"
5
8#include "Stroika/Foundation/Execution/FeatureNotSupportedException.h"
9
10#if qStroika_HasComponent_zlib
11#include "Private_/ZLibSupport.h"
12#endif
13
14#include "Deflate.h"
15
16using std::byte;
17
18using namespace Stroika::Foundation;
22using namespace Stroika::Foundation::Debug;
23using namespace Stroika::Foundation::Streams;
24
25#if qStroika_HasComponent_zlib
26using Compression::Private_::DeflateRep_;
27using Compression::Private_::InflateRep_;
28#endif
29
30// Comment this in to turn on aggressive noisy DbgTrace in this module
31//#define USE_NOISY_TRACE_IN_THIS_MODULE_ 1
32
33#if !qStroika_HasComponent_zlib
34namespace {
35 const auto kNotSuppExcept_ = Execution::FeatureNotSupportedException{"Deflate (ZLIB)"sv};
36}
37#endif
38
39Compression::Ptr Deflate::Compress::New (const Deflate::Compress::Options& o)
40{
41#if qStroika_HasComponent_zlib
42 struct MyRep_ : IRep {
43 Deflate::Compress::Options fOptions_;
44 shared_ptr<DeflateRep_> fDelegate2;
45 MyRep_ (const Deflate::Compress::Options& o)
46 : fOptions_{o}
47 {
48 }
50 {
51 fDelegate2 = make_shared<DeflateRep_> (src, fOptions_, false);
52 return InputStream::Ptr<byte>{fDelegate2};
53 }
54 virtual optional<Compression::Stats> GetStats () const
55 {
56 return nullopt;
57 }
58 };
59 return Compression::Ptr{make_shared<MyRep_> (o)};
60#else
61 Execution::Throw (kNotSuppExcept_);
62#endif
63}
64Compression::Ptr Deflate::Decompress::New ([[maybe_unused]] const Deflate::Decompress::Options& o)
65{
66#if qStroika_HasComponent_zlib
67 struct MyRep_ : IRep {
68 shared_ptr<Private_::InflateRep_> fDelegate2;
70 {
71 fDelegate2 = make_shared<Private_::InflateRep_> (src, false);
72 return InputStream::Ptr<byte>{fDelegate2};
73 }
74 virtual optional<Compression::Stats> GetStats () const
75 {
76 return nullopt;
77 }
78 };
79 return Compression::Ptr{make_shared<MyRep_> ()};
80#else
81 Execution::Throw (kNotSuppExcept_);
82#endif
83}
InputStream<>::Ptr is Smart pointer (with abstract Rep) class defining the interface to reading from ...
void Throw(T &&e2Throw)
identical to builtin C++ 'throw' except that it does helpful, type dependent DbgTrace() messages firs...
Definition Throw.inl:43
virtual InputStream::Ptr< byte > Transform(const InputStream::Ptr< byte > &src)=0
virtual optional< Stats > GetStats() const =0