From e6918187568dbd01842d8d1d2c808ce16a894239 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 21 Apr 2024 13:54:28 +0200 Subject: Adding upstream version 18.2.2. Signed-off-by: Daniel Baumann --- src/fmt/test/mock-allocator.h | 64 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 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..6a67e08f4 --- /dev/null +++ b/src/fmt/test/mock-allocator.h @@ -0,0 +1,64 @@ +// 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 // assert +#include // size_t + +#include // std::allocator_traits + +#include "gmock/gmock.h" + +template class mock_allocator { + public: + mock_allocator() {} + mock_allocator(const mock_allocator&) {} + using value_type = T; + 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: + using value_type = typename Allocator::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