MPD: fs/io/BufferedOutputStream.hxx Source File

MPD 0.20.15

BufferedOutputStream.hxx
Go to the documentation of this file.
1 /*
2 * Copyright 2003-2017 The Music Player Daemon Project
3 * http://www.musicpd.org
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19
20 #ifndef MPD_BUFFERED_OUTPUT_STREAM_HXX
21 #define MPD_BUFFERED_OUTPUT_STREAM_HXX
22
23 #include "check.h"
24 #include "Compiler.h"
25 #include "util/DynamicFifoBuffer.hxx"
26
27 #include <stddef.h>
28
29 #ifdef _UNICODE
30 #include <wchar.h>
31 #endif
32
33 class OutputStream;
34
41 class BufferedOutputStream {
42 OutputStream &os;
43
44 DynamicFifoBuffer<char> buffer;
45
46 public:
47 explicit BufferedOutputStream(OutputStream &_os)
48 :os(_os), buffer(32768) {}
49
50 void Write(const void *data, size_t size);
51
52 void Write(const char &ch) {
53 Write(&ch, sizeof(ch));
54 }
55
56 void Write(const char *p);
57
58 gcc_printf(2,3)
59 void Format(const char *fmt, ...);
60
61 #ifdef _UNICODE
62 void Write(const wchar_t &ch) {
63 WriteWideToUTF8(&ch, 1);
64 }
65
66 void Write(const wchar_t *p);
67 #endif
68
72 void Flush();
73
74 private:
75 bool AppendToBuffer(const void *data, size_t size) noexcept;
76
77 #ifdef _UNICODE
78 void WriteWideToUTF8(const wchar_t *p, size_t length);
79 #endif
80 };
81
82 #endif
check.h
BufferedOutputStream::BufferedOutputStream
BufferedOutputStream(OutputStream &_os)
Definition: BufferedOutputStream.hxx:47
BufferedOutputStream::Write
void Write(const void *data, size_t size)
BufferedOutputStream::Flush
void Flush()
Write buffer contents to the OutputStream.
BufferedOutputStream::gcc_printf
gcc_printf(2, 3) void Format(const char *fmt
Compiler.h
OutputStream
Definition: OutputStream.hxx:27
DynamicFifoBuffer.hxx
BufferedOutputStream
An OutputStream wrapper that buffers its output to reduce the number of OutputStream::Write() calls...
Definition: BufferedOutputStream.hxx:41
DynamicFifoBuffer< char >
BufferedOutputStream::Write
void Write(const char &ch)
Definition: BufferedOutputStream.hxx:52
fmt
const char * fmt
Definition: Client.hxx:231