summaryrefslogtreecommitdiffstats
path: root/src/seastar/fmt/test/mock-allocator.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/seastar/fmt/test/mock-allocator.h')
-rw-r--r--src/seastar/fmt/test/mock-allocator.h62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/seastar/fmt/test/mock-allocator.h b/src/seastar/fmt/test/mock-allocator.h
new file mode 100644
index 00000000..65ee6ab8
--- /dev/null
+++ b/src/seastar/fmt/test/mock-allocator.h
@@ -0,0 +1,62 @@
+// Formatting library for C++ - mock allocator
+//
+// Copyright (c) 2012 - present, Victor Zverovich
+// All rights reserved.
+//
+// For the license information refer to format.h.
+
+#ifndef FMT_MOCK_ALLOCATOR_H_
+#define FMT_MOCK_ALLOCATOR_H_
+
+#include "gmock.h"
+#include "fmt/format.h"
+
+template <typename T>
+class mock_allocator {
+ public:
+ mock_allocator() {}
+ mock_allocator(const mock_allocator &) {}
+ typedef T value_type;
+ MOCK_METHOD1_T(allocate, T* (std::size_t n));
+ MOCK_METHOD2_T(deallocate, void (T* p, std::size_t n));
+};
+
+template <typename Allocator>
+class allocator_ref {
+ private:
+ Allocator *alloc_;
+
+ void move(allocator_ref &other) {
+ alloc_ = other.alloc_;
+ other.alloc_ = FMT_NULL;
+ }
+
+ public:
+ typedef typename Allocator::value_type value_type;
+
+ explicit allocator_ref(Allocator *alloc = FMT_NULL) : alloc_(alloc) {}
+
+ allocator_ref(const allocator_ref &other) : alloc_(other.alloc_) {}
+ allocator_ref(allocator_ref &&other) { move(other); }
+
+ allocator_ref& operator=(allocator_ref &&other) {
+ assert(this != &other);
+ move(other);
+ return *this;
+ }
+
+ allocator_ref& operator=(const allocator_ref &other) {
+ alloc_ = other.alloc_;
+ return *this;
+ }
+
+ public:
+ Allocator *get() const { return alloc_; }
+
+ value_type* allocate(std::size_t n) {
+ return fmt::internal::allocate(*alloc_, n);
+ }
+ void deallocate(value_type* p, std::size_t n) { alloc_->deallocate(p, n); }
+};
+
+#endif // FMT_MOCK_ALLOCATOR_H_