From 19fcec84d8d7d21e796c7624e521b60d28ee21ed Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 20:45:59 +0200 Subject: Adding upstream version 16.2.11+ds. Signed-off-by: Daniel Baumann --- src/fmt/test/mock-allocator.h | 60 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/fmt/test/mock-allocator.h (limited to 'src/fmt/test/mock-allocator.h') diff --git a/src/fmt/test/mock-allocator.h b/src/fmt/test/mock-allocator.h new file mode 100644 index 000000000..513a62e8b --- /dev/null +++ b/src/fmt/test/mock-allocator.h @@ -0,0 +1,60 @@ +// 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 "fmt/format.h" +#include "gmock.h" + +template class mock_allocator { + public: + mock_allocator() {} + mock_allocator(const mock_allocator&) {} + typedef T value_type; + MOCK_METHOD1_T(allocate, T*(size_t n)); + MOCK_METHOD2_T(deallocate, void(T* p, size_t n)); +}; + +template class allocator_ref { + private: + Allocator* alloc_; + + void move(allocator_ref& other) { + alloc_ = other.alloc_; + other.alloc_ = nullptr; + } + + public: + typedef typename Allocator::value_type value_type; + + explicit allocator_ref(Allocator* alloc = nullptr) : 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(size_t n) { + return std::allocator_traits::allocate(*alloc_, n); + } + void deallocate(value_type* p, size_t n) { alloc_->deallocate(p, n); } +}; + +#endif // FMT_MOCK_ALLOCATOR_H_ -- cgit v1.2.3