Stroika Library 3.0d23x
 
Loading...
Searching...
No Matches
Deflate.cpp
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2026. All rights reserved
3 */
4#include "Stroika/Foundation/StroikaPreComp.h"
5
8#include "Stroika/Foundation/Execution/FeatureNotSupportedException.h"
10
11#if qStroika_HasComponent_zlib
12#include "Private_/ZLibSupport.h"
13#endif
14
15#include "Deflate.h"
16
17using std::byte;
18
19using namespace Stroika::Foundation;
23using namespace Stroika::Foundation::Debug;
24using namespace Stroika::Foundation::Streams;
25
26using Memory::MakeSharedPtr;
27#if qStroika_HasComponent_zlib
28using Compression::Private_::DeflateRep_;
29using Compression::Private_::InflateRep_;
30#endif
31
32// Comment this in to turn on aggressive noisy DbgTrace in this module
33//#define USE_NOISY_TRACE_IN_THIS_MODULE_ 1
34
35#if !qStroika_HasComponent_zlib
36namespace {
37 const auto kNotSuppExcept_ = Execution::FeatureNotSupportedException{"Deflate (ZLIB)"sv};
38}
39#endif
40
41Compression::Ptr Deflate::Compress::New (const Deflate::Compress::Options& o)
42{
43#if qStroika_HasComponent_zlib
44 struct MyRep_ final : IRep, public Memory::UseBlockAllocationIfAppropriate<MyRep_> {
45 Deflate::Compress::Options fOptions_;
46 shared_ptr<DeflateRep_> fDelegate2;
47 MyRep_ (const Deflate::Compress::Options& o)
48 : fOptions_{o}
49 {
50 }
52 {
53 fDelegate2 = MakeSharedPtr<DeflateRep_> (src, fOptions_, false);
54 return InputStream::Ptr<byte>{fDelegate2};
55 }
56 virtual optional<Compression::Stats> GetStats () const
57 {
58 return nullopt;
59 }
60 };
61 return Compression::Ptr{MakeSharedPtr<MyRep_> (o)};
62#else
63 Execution::Throw (kNotSuppExcept_);
64#endif
65}
66Compression::Ptr Deflate::Decompress::New ([[maybe_unused]] const Deflate::Decompress::Options& o)
67{
68#if qStroika_HasComponent_zlib
69 struct MyRep_ final : IRep, public Memory::UseBlockAllocationIfAppropriate<MyRep_> {
70 shared_ptr<Private_::InflateRep_> fDelegate2;
72 {
73 fDelegate2 = MakeSharedPtr<Private_::InflateRep_> (src, false);
74 return InputStream::Ptr<byte>{fDelegate2};
75 }
76 virtual optional<Compression::Stats> GetStats () const
77 {
78 return nullopt;
79 }
80 };
81 return Compression::Ptr{MakeSharedPtr<MyRep_> ()};
82#else
83 Execution::Throw (kNotSuppExcept_);
84#endif
85}
conditional_t< qStroika_Foundation_Memory_PreferBlockAllocation and andTrueCheck, BlockAllocationUseHelper< T >, Common::Empty > UseBlockAllocationIfAppropriate
Use this to enable block allocation for a particular class. Beware of subclassing.
InputStream<>::Ptr is Smart pointer (with abstract Rep) class defining the interface to reading from ...
virtual InputStream::Ptr< byte > Transform(const InputStream::Ptr< byte > &src)=0
virtual optional< Stats > GetStats() const =0