// // 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 #include #include 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 void measure(Meter& m, Fn&& fn) { gc_disable guard; return m.measure(std::forward(fn)); } using def_memory = immer::default_memory_policy; using gc_memory = immer::memory_policy, immer::no_refcount_policy, immer::default_lock_policy>; using gcf_memory = immer::memory_policy, immer::no_refcount_policy, immer::default_lock_policy, immer::gc_transience_policy, false>; using basic_memory = immer::memory_policy, immer::refcount_policy, immer::default_lock_policy>; using safe_memory = immer::memory_policy, immer::refcount_policy, immer::default_lock_policy>; using unsafe_memory = immer::memory_policy, immer::unsafe_refcount_policy, immer::default_lock_policy>; } // anonymous namespace