1213b086a1
Change-Id: I9636a41ad44b4218293833fd3e9456d9b07c731b
55 lines
1.5 KiB
C++
55 lines
1.5 KiB
C++
//
|
|
// immer: immutable data structures for C++
|
|
// Copyright (C) 2016, 2017, 2018 Juan Pedro Bolivar Puente
|
|
//
|
|
// This software is distributed under the Boost Software License, Version 1.0.
|
|
// See accompanying file LICENSE or copy at http://boost.org/LICENSE_1_0.txt
|
|
//
|
|
|
|
#pragma once
|
|
|
|
#include <nonius.h++>
|
|
|
|
#include <immer/heap/gc_heap.hpp>
|
|
#include <immer/memory_policy.hpp>
|
|
|
|
namespace {
|
|
|
|
NONIUS_PARAM(N, std::size_t{1000})
|
|
|
|
struct gc_disable
|
|
{
|
|
gc_disable()
|
|
{
|
|
#if IMMER_BENCHMARK_DISABLE_GC
|
|
GC_disable();
|
|
#else
|
|
GC_gcollect();
|
|
#endif
|
|
}
|
|
~gc_disable()
|
|
{
|
|
#if IMMER_BENCHMARK_DISABLE_GC
|
|
GC_enable();
|
|
GC_gcollect();
|
|
#endif
|
|
}
|
|
gc_disable(const gc_disable&) = delete;
|
|
gc_disable(gc_disable&&) = delete;
|
|
};
|
|
|
|
template <typename Meter, typename Fn>
|
|
void measure(Meter& m, Fn&& fn)
|
|
{
|
|
gc_disable guard;
|
|
return m.measure(std::forward<Fn>(fn));
|
|
}
|
|
|
|
using def_memory = immer::default_memory_policy;
|
|
using gc_memory = immer::memory_policy<immer::heap_policy<immer::gc_heap>, immer::no_refcount_policy>;
|
|
using gcf_memory = immer::memory_policy<immer::heap_policy<immer::gc_heap>, immer::no_refcount_policy, immer::gc_transience_policy, false>;
|
|
using basic_memory = immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::refcount_policy>;
|
|
using safe_memory = immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap>, immer::refcount_policy>;
|
|
using unsafe_memory = immer::memory_policy<immer::unsafe_free_list_heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy>;
|
|
|
|
} // anonymous namespace
|