aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2014-03-01 07:36:59 +0100
committerMax Kellermann <max@duempel.org>2014-03-01 07:37:58 +0100
commit9dc5335e3e4e07371cfae96eca2cb5b2a93c8dd2 (patch)
tree3ed858544999558a767d5c6df6339c4ceefad2f3 /src
parentd333de19802158a24d8bca35c87a711955c9aab3 (diff)
downloadmpd-9dc5335e3e4e07371cfae96eca2cb5b2a93c8dd2.tar.gz
mpd-9dc5335e3e4e07371cfae96eca2cb5b2a93c8dd2.tar.xz
mpd-9dc5335e3e4e07371cfae96eca2cb5b2a93c8dd2.zip
util/{Const,Writable}Buffer: add template specialization for "void"
Omit a few methods that are not applicable.
Diffstat (limited to '')
-rw-r--r--src/util/ConstBuffer.hxx34
-rw-r--r--src/util/WritableBuffer.hxx34
2 files changed, 68 insertions, 0 deletions
diff --git a/src/util/ConstBuffer.hxx b/src/util/ConstBuffer.hxx
index 35cffecc2..7f1fa5aa6 100644
--- a/src/util/ConstBuffer.hxx
+++ b/src/util/ConstBuffer.hxx
@@ -38,6 +38,40 @@
#include <assert.h>
#endif
+template<typename T>
+struct ConstBuffer;
+
+template<>
+struct ConstBuffer<void> {
+ typedef size_t size_type;
+ typedef const void *pointer_type;
+ typedef pointer_type const_pointer_type;
+ typedef pointer_type iterator;
+ typedef pointer_type const_iterator;
+
+ pointer_type data;
+ size_type size;
+
+ ConstBuffer() = default;
+
+ constexpr ConstBuffer(std::nullptr_t):data(nullptr), size(0) {}
+
+ constexpr ConstBuffer(pointer_type _data, size_type _size)
+ :data(_data), size(_size) {}
+
+ constexpr static ConstBuffer Null() {
+ return ConstBuffer(nullptr, 0);
+ }
+
+ constexpr bool IsNull() const {
+ return data == nullptr;
+ }
+
+ constexpr bool IsEmpty() const {
+ return size == 0;
+ }
+};
+
/**
* A reference to a memory area that is read-only.
*/
diff --git a/src/util/WritableBuffer.hxx b/src/util/WritableBuffer.hxx
index 7267813f5..64e6d0c62 100644
--- a/src/util/WritableBuffer.hxx
+++ b/src/util/WritableBuffer.hxx
@@ -38,6 +38,40 @@
#include <assert.h>
#endif
+template<typename T>
+struct WritableBuffer;
+
+template<>
+struct WritableBuffer<void> {
+ typedef size_t size_type;
+ typedef void *pointer_type;
+ typedef const void *const_pointer_type;
+ typedef pointer_type iterator;
+ typedef const_pointer_type const_iterator;
+
+ pointer_type data;
+ size_type size;
+
+ WritableBuffer() = default;
+
+ constexpr WritableBuffer(std::nullptr_t):data(nullptr), size(0) {}
+
+ constexpr WritableBuffer(pointer_type _data, size_type _size)
+ :data(_data), size(_size) {}
+
+ constexpr static WritableBuffer Null() {
+ return { nullptr, 0 };
+ }
+
+ constexpr bool IsNull() const {
+ return data == nullptr;
+ }
+
+ constexpr bool IsEmpty() const {
+ return size == 0;
+ }
+};
+
/**
* A reference to a memory area that is writable.
*