Very Simple Cross-Platform Library
src
hu
varadiistvan
scpl
io
BlockingStream.h
1
// Copyright (c) 2013 by István Váradi
2
3
// This file is part of VSCPL, a simple cross-platform utility library
4
5
// Redistribution and use in source and binary forms, with or without
6
// modification, are permitted provided that the following conditions are met:
7
8
// 1. Redistributions of source code must retain the above copyright notice, this
9
// list of conditions and the following disclaimer.
10
// 2. Redistributions in binary form must reproduce the above copyright notice,
11
// this list of conditions and the following disclaimer in the documentation
12
// and/or other materials provided with the distribution.
13
14
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
15
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
18
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
21
// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
23
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24
25
// The views and conclusions contained in the software and documentation are those
26
// of the authors and should not be interpreted as representing official policies,
27
// either expressed or implied, of the FreeBSD Project.
28
29
#ifndef HU_VARADIISTVAN_SCPL_IO_BLOCKINGSTREAM_H
30
#define HU_VARADIISTVAN_SCPL_IO_BLOCKINGSTREAM_H
31
//------------------------------------------------------------------------------
32
33
#include "Failable.h"
34
35
#include "BufferedStream.h"
36
#include "WaitableEvent.h"
37
38
#include <cstdlib>
39
40
//------------------------------------------------------------------------------
41
42
namespace
hu {
namespace
varadiistvan {
namespace
scpl {
namespace
io {
43
44
//------------------------------------------------------------------------------
45
55
class
BlockingStream
:
public
Failable
56
{
57
private
:
61
BufferedStream
&
stream
;
62
66
WaitableEvent
event
;
67
71
bool
interrupted
;
72
76
size_t
readingOffset
;
77
81
bool
eof
;
82
83
public
:
89
BlockingStream
(
BufferedStream
&
stream
);
90
95
operator
bool()
const
;
96
102
void
interrupt
();
103
107
bool
isInterrupted
();
108
114
bool
read
(
void
* dest,
size_t
length);
115
119
bool
skip
(
size_t
length);
120
128
bool
write
(
const
void
* src,
size_t
length);
129
136
bool
flush
();
137
138
private
:
142
bool
fill
();
143
149
bool
checkInterrupted
();
150
};
151
152
//------------------------------------------------------------------------------
153
// Inline definitions
154
//------------------------------------------------------------------------------
155
156
inline
BlockingStream::BlockingStream
(
BufferedStream
& stream) :
157
stream(stream),
158
event(stream.getWaiter()),
159
interrupted(false),
160
readingOffset(0),
161
eof(false)
162
{
163
}
164
165
//------------------------------------------------------------------------------
166
167
inline
BlockingStream::operator bool()
const
168
{
169
return
!failed() && !interrupted && !eof;
170
}
171
172
//------------------------------------------------------------------------------
173
174
inline
void
BlockingStream::interrupt
()
175
{
176
event
.fire();
177
}
178
179
//------------------------------------------------------------------------------
180
181
inline
bool
BlockingStream::isInterrupted
()
182
{
183
return
interrupted
;
184
}
185
186
//------------------------------------------------------------------------------
187
188
}
/* namespace hu::varadiistvan::scpl::io */
}
/* namespace hu::varadiistvan::scpl */
}
/* namespace hu::varadiistvan */
}
/* namespace hu */
189
190
//------------------------------------------------------------------------------
191
#endif
// HU_VARADIISTVAN_SCPL_IO_BLOCKINGSTREAM_H
192
193
// Local Variables:
194
// mode: C++
195
// c-basic-offset: 4
196
// indent-tabs-mode: nil
197
// End:
hu::varadiistvan::scpl::io::BlockingStream
Definition:
BlockingStream.h:56
hu::varadiistvan::scpl::io::BlockingStream::flush
bool flush()
Definition:
BlockingStream.cc:120
hu::varadiistvan::scpl::io::BlockingStream::isInterrupted
bool isInterrupted()
Definition:
BlockingStream.h:181
hu::varadiistvan::scpl::io::BlockingStream::readingOffset
size_t readingOffset
Definition:
BlockingStream.h:76
hu::varadiistvan::scpl::io::BlockingStream::BlockingStream
BlockingStream(BufferedStream &stream)
Definition:
BlockingStream.h:156
hu::varadiistvan::scpl::io::BlockingStream::write
bool write(const void *src, size_t length)
Definition:
BlockingStream.cc:101
hu::varadiistvan::scpl::io::BlockingStream::interrupted
bool interrupted
Definition:
BlockingStream.h:71
hu::varadiistvan::scpl::io::BlockingStream::checkInterrupted
bool checkInterrupted()
Definition:
BlockingStream.cc:48
hu::varadiistvan::scpl::io::BlockingStream::read
bool read(void *dest, size_t length)
Definition:
BlockingStream.cc:62
hu::varadiistvan::scpl::io::BlockingStream::skip
bool skip(size_t length)
Definition:
BlockingStream.cc:83
hu::varadiistvan::scpl::io::BlockingStream::eof
bool eof
Definition:
BlockingStream.h:81
hu::varadiistvan::scpl::io::BlockingStream::event
WaitableEvent event
Definition:
BlockingStream.h:66
hu::varadiistvan::scpl::io::BlockingStream::fill
bool fill()
Definition:
BlockingStream.cc:143
hu::varadiistvan::scpl::io::BlockingStream::interrupt
void interrupt()
Definition:
BlockingStream.h:174
hu::varadiistvan::scpl::io::BlockingStream::stream
BufferedStream & stream
Definition:
BlockingStream.h:61
hu::varadiistvan::scpl::io::BufferedStream
Definition:
BufferedStream.h:46
hu::varadiistvan::scpl::io::Failable
Definition:
Failable.h:46
hu::varadiistvan::scpl::io::WaitableEvent
Definition:
WaitableEvent.h:45
Generated on Fri Dec 23 2022 10:49:36 for Very Simple Cross-Platform Library by
1.9.1