111986Sandreas.sandberg@arm.com/* 211986Sandreas.sandberg@arm.com pybind11/options.h: global settings that are configurable at runtime. 311986Sandreas.sandberg@arm.com 411986Sandreas.sandberg@arm.com Copyright (c) 2016 Wenzel Jakob <wenzel.jakob@epfl.ch> 511986Sandreas.sandberg@arm.com 611986Sandreas.sandberg@arm.com All rights reserved. Use of this source code is governed by a 711986Sandreas.sandberg@arm.com BSD-style license that can be found in the LICENSE file. 811986Sandreas.sandberg@arm.com*/ 911986Sandreas.sandberg@arm.com 1011986Sandreas.sandberg@arm.com#pragma once 1111986Sandreas.sandberg@arm.com 1212391Sjason@lowepower.com#include "detail/common.h" 1311986Sandreas.sandberg@arm.com 1412391Sjason@lowepower.comNAMESPACE_BEGIN(PYBIND11_NAMESPACE) 1511986Sandreas.sandberg@arm.com 1611986Sandreas.sandberg@arm.comclass options { 1711986Sandreas.sandberg@arm.compublic: 1811986Sandreas.sandberg@arm.com 1911986Sandreas.sandberg@arm.com // Default RAII constructor, which leaves settings as they currently are. 2011986Sandreas.sandberg@arm.com options() : previous_state(global_state()) {} 2111986Sandreas.sandberg@arm.com 2211986Sandreas.sandberg@arm.com // Class is non-copyable. 2311986Sandreas.sandberg@arm.com options(const options&) = delete; 2411986Sandreas.sandberg@arm.com options& operator=(const options&) = delete; 2511986Sandreas.sandberg@arm.com 2611986Sandreas.sandberg@arm.com // Destructor, which restores settings that were in effect before. 2711986Sandreas.sandberg@arm.com ~options() { 2811986Sandreas.sandberg@arm.com global_state() = previous_state; 2911986Sandreas.sandberg@arm.com } 3011986Sandreas.sandberg@arm.com 3111986Sandreas.sandberg@arm.com // Setter methods (affect the global state): 3211986Sandreas.sandberg@arm.com 3311986Sandreas.sandberg@arm.com options& disable_user_defined_docstrings() & { global_state().show_user_defined_docstrings = false; return *this; } 3411986Sandreas.sandberg@arm.com 3511986Sandreas.sandberg@arm.com options& enable_user_defined_docstrings() & { global_state().show_user_defined_docstrings = true; return *this; } 3611986Sandreas.sandberg@arm.com 3711986Sandreas.sandberg@arm.com options& disable_function_signatures() & { global_state().show_function_signatures = false; return *this; } 3811986Sandreas.sandberg@arm.com 3911986Sandreas.sandberg@arm.com options& enable_function_signatures() & { global_state().show_function_signatures = true; return *this; } 4011986Sandreas.sandberg@arm.com 4111986Sandreas.sandberg@arm.com // Getter methods (return the global state): 4211986Sandreas.sandberg@arm.com 4311986Sandreas.sandberg@arm.com static bool show_user_defined_docstrings() { return global_state().show_user_defined_docstrings; } 4411986Sandreas.sandberg@arm.com 4511986Sandreas.sandberg@arm.com static bool show_function_signatures() { return global_state().show_function_signatures; } 4611986Sandreas.sandberg@arm.com 4711986Sandreas.sandberg@arm.com // This type is not meant to be allocated on the heap. 4811986Sandreas.sandberg@arm.com void* operator new(size_t) = delete; 4911986Sandreas.sandberg@arm.com 5011986Sandreas.sandberg@arm.comprivate: 5111986Sandreas.sandberg@arm.com 5211986Sandreas.sandberg@arm.com struct state { 5311986Sandreas.sandberg@arm.com bool show_user_defined_docstrings = true; //< Include user-supplied texts in docstrings. 5411986Sandreas.sandberg@arm.com bool show_function_signatures = true; //< Include auto-generated function signatures in docstrings. 5511986Sandreas.sandberg@arm.com }; 5611986Sandreas.sandberg@arm.com 5711986Sandreas.sandberg@arm.com static state &global_state() { 5811986Sandreas.sandberg@arm.com static state instance; 5911986Sandreas.sandberg@arm.com return instance; 6011986Sandreas.sandberg@arm.com } 6111986Sandreas.sandberg@arm.com 6211986Sandreas.sandberg@arm.com state previous_state; 6311986Sandreas.sandberg@arm.com}; 6411986Sandreas.sandberg@arm.com 6512391Sjason@lowepower.comNAMESPACE_END(PYBIND11_NAMESPACE) 66