Spicy
configuration.h
1 // Copyright (c) 2020-now by the Zeek Project. See LICENSE for details.
2 
3 #pragma once
4 
5 #include <cstddef>
6 #include <memory>
7 #include <optional>
8 #include <string>
9 
10 #include <hilti/rt/filesystem.h>
11 #include <hilti/rt/util.h>
12 
13 namespace hilti::rt {
14 
16 struct Configuration {
17  Configuration();
18 
20  size_t fiber_individual_stack_size = static_cast<size_t>(1 * 1024 * 1024);
21 
23  size_t fiber_shared_stack_size = static_cast<size_t>(1 * 1024 * 1024);
24 
26  size_t fiber_shared_stack_swap_size_min = static_cast<size_t>(10 * 1024);
27 
29  unsigned int fiber_cache_size = 200;
30 
41 #ifdef _WIN32
42  size_t fiber_min_stack_size = static_cast<size_t>(128 * 1024);
43 #else
44  size_t fiber_min_stack_size = static_cast<size_t>(20 * 1024);
45 #endif
46 
48  std::optional<hilti::rt::filesystem::path> debug_out;
49 
51  bool show_backtraces = false;
52 
54  bool abort_on_exceptions = false;
55 
57  bool report_resource_usage = false;
58 
64  bool enable_profiling = false;
65 
67  std::string debug_streams;
68 
70  std::optional<std::reference_wrapper<std::ostream>> cout;
71 };
72 
73 namespace configuration {
74 
75 namespace detail {
77 extern HILTI_JIT_IMPORT std::unique_ptr<hilti::rt::Configuration> __configuration;
78 
85 inline const Configuration& unsafeGet() {
86  assert(detail::__configuration.get());
87  return *detail::__configuration;
88 }
89 
90 } // namespace detail
91 
96 inline const Configuration& get() {
97  if ( ! detail::__configuration )
98  detail::__configuration = std::make_unique<hilti::rt::Configuration>();
99 
100  return *detail::__configuration;
101 }
102 
109 extern void set(Configuration cfg);
110 
111 } // namespace configuration
112 } // namespace hilti::rt
Definition: any.h:7
Definition: configuration.h:16
unsigned int fiber_cache_size
Definition: configuration.h:29
std::string debug_streams
Definition: configuration.h:67
size_t fiber_individual_stack_size
Definition: configuration.h:20
size_t fiber_min_stack_size
Definition: configuration.h:44
bool enable_profiling
Definition: configuration.h:64
bool report_resource_usage
Definition: configuration.h:57
std::optional< hilti::rt::filesystem::path > debug_out
Definition: configuration.h:48
bool abort_on_exceptions
Definition: configuration.h:54
std::optional< std::reference_wrapper< std::ostream > > cout
Definition: configuration.h:70
size_t fiber_shared_stack_swap_size_min
Definition: configuration.h:26
bool show_backtraces
Definition: configuration.h:51
size_t fiber_shared_stack_size
Definition: configuration.h:23