libDwm-0.9.45
DwmGZIOCapable.hh
Go to the documentation of this file.
1//===========================================================================
2// @(#) $DwmPath$
3//===========================================================================
4// Copyright (c) Daniel W. McRobb 2020, 2024
5// All rights reserved.
6//
7// Redistribution and use in source and binary forms, with or without
8// modification, are permitted provided that the following conditions
9// are met:
10//
11// 1. Redistributions of source code must retain the above copyright
12// notice, this list of conditions and the following disclaimer.
13// 2. Redistributions in binary form must reproduce the above copyright
14// notice, this list of conditions and the following disclaimer in the
15// documentation and/or other materials provided with the distribution.
16// 3. The names of the authors and copyright holders may not be used to
17// endorse or promote products derived from this software without
18// specific prior written permission.
19//
20// IN NO EVENT SHALL DANIEL W. MCROBB BE LIABLE TO ANY PARTY FOR
21// DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
22// INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE,
23// EVEN IF DANIEL W. MCROBB HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
24// DAMAGE.
25//
26// THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND
27// DANIEL W. MCROBB HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT,
28// UPDATES, ENHANCEMENTS, OR MODIFICATIONS. DANIEL W. MCROBB MAKES NO
29// REPRESENTATIONS AND EXTENDS NO WARRANTIES OF ANY KIND, EITHER
30// IMPLIED OR EXPRESS, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
31// WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE,
32// OR THAT THE USE OF THIS SOFTWARE WILL NOT INFRINGE ANY PATENT,
33// TRADEMARK OR OTHER RIGHTS.
34//===========================================================================
35
36//---------------------------------------------------------------------------
41//---------------------------------------------------------------------------
42
43#ifndef _DWMGZIOCAPABLE_HH_
44#define _DWMGZIOCAPABLE_HH_
45
46extern "C" {
47 #include <sys/types.h>
48 #include <zlib.h>
49}
50
51#include <cstdio>
52
53namespace Dwm {
54
55 //--------------------------------------------------------------------------
58 //--------------------------------------------------------------------------
59 template <typename T>
60 concept HasGZRead = requires(T & t, gzFile gzf) {
61 { t.Read(gzf) } -> std::same_as<int>;
62 };
63
64 //--------------------------------------------------------------------------
67 //--------------------------------------------------------------------------
68 template <typename T>
69 concept HasGZWrite = requires(const T & t, gzFile gzf) {
70 { t.Write(gzf) } -> std::same_as<int>;
71 };
72
73 //--------------------------------------------------------------------------
76 //--------------------------------------------------------------------------
78 {
79 public:
80 //------------------------------------------------------------------------
82 //------------------------------------------------------------------------
83 virtual ~GZReadable() { }
84
85 //------------------------------------------------------------------------
88 //------------------------------------------------------------------------
89 virtual int Read(gzFile gzf) = 0;
90 };
91
92 //--------------------------------------------------------------------------
95 //--------------------------------------------------------------------------
97 {
98 public:
99 //------------------------------------------------------------------------
101 //------------------------------------------------------------------------
102 virtual ~GZWritable() { }
103
104 //------------------------------------------------------------------------
107 //------------------------------------------------------------------------
108 virtual int Write(gzFile gzf) const = 0;
109 };
110
111 //--------------------------------------------------------------------------
113 //--------------------------------------------------------------------------
115 : public GZReadable, public GZWritable
116 {};
117
118} // namespace Dwm
119
120#endif // _DWMGZIOENABLED_HH_
121
122
123//---------------------------- emacs settings -----------------------------
124// Local Variables:
125// mode: C++
126// tab-width: 2
127// indent-tabs-mode: nil
128// c-basic-offset: 2
129// End:
130//-------------------------------------------------------------------------
Interface for classes with GZIO read and write capabilities.
Definition DwmGZIOCapable.hh:116
This class is a pure virtual class, defining an interface for classes that can read their contents fr...
Definition DwmGZIOCapable.hh:78
virtual ~GZReadable()
destructor
Definition DwmGZIOCapable.hh:83
virtual int Read(gzFile gzf)=0
Read from a gzFile.
This class is a pure virtual class, defining an interface for classes that can write their contents t...
Definition DwmGZIOCapable.hh:97
virtual int Write(gzFile gzf) const =0
Write to a gzFile.
virtual ~GZWritable()
destructor
Definition DwmGZIOCapable.hh:102
T has a Read(gzFile) member that returns int (return value of gzread() on success,...
Definition DwmGZIOCapable.hh:60
T has a Write(gzFile) const member that returns int (return value of gzwrite() on success,...
Definition DwmGZIOCapable.hh:69