OGLplus  (0.59.0) a C++ wrapper for rendering APIs

main_ctx.hpp
Go to the documentation of this file.
1 #ifndef EAGINE_MAIN_CTX_HPP
9 #define EAGINE_MAIN_CTX_HPP
10 
11 #include "build_info.hpp"
12 #include "identifier_t.hpp"
13 #include "logging/logger.hpp"
15 #include "memory/buffer_fwd.hpp"
16 #include "program_args.hpp"
17 #include "system_info.hpp"
18 #include "user_info.hpp"
19 
20 namespace eagine {
21 
25 
27  std::string app_name{};
28 
30  identifier app_id{"RootLogger"};
31 
34 };
35 
36 class data_compressor;
37 class process_watchdog;
38 
45 class main_ctx {
46 public:
47  main_ctx(master_ctx&) noexcept;
48 
50  main_ctx(main_ctx&&) = delete;
51 
53  main_ctx(const main_ctx&) = delete;
54 
56  auto operator=(main_ctx&&) = delete;
57 
59  auto operator=(const main_ctx&) = delete;
60 
61  ~main_ctx() noexcept;
62 
64  static inline auto get() noexcept -> main_ctx& {
65  EAGINE_ASSERT(_single_ptr());
66  return *_single_ptr();
67  }
68 
70  auto instance_id() const noexcept -> process_instance_id_t {
71  return _instance_id;
72  }
73 
75  auto preinitialize() noexcept -> main_ctx&;
76 
78  auto build() const noexcept -> const build_info& {
79  return _bld_info;
80  }
81 
83  auto args() noexcept -> program_args& {
84  return _args;
85  }
86 
88  auto log() noexcept -> logger& {
89  return _log;
90  }
91 
93  auto watchdog() noexcept -> process_watchdog& {
94  return _watchdog;
95  }
96 
98  auto config() noexcept -> application_config& {
99  return _app_config;
100  }
101 
103  auto system() noexcept -> system_info& {
104  return _sys_info;
105  }
106 
108  auto user() noexcept -> user_info& {
109  return _usr_info;
110  }
111 
113  auto scratch_space() noexcept -> memory::buffer& {
114  return _scratch_space;
115  }
116 
118  auto compressor() noexcept -> data_compressor& {
119  return _compressor;
120  }
121 
123  auto exe_path() const noexcept -> string_view {
124  return _exe_path;
125  }
126 
128  auto app_name() const noexcept -> string_view {
129  return _app_name;
130  }
131 
132 private:
133  process_instance_id_t _instance_id{};
134  program_args& _args;
135  logger& _log;
136  process_watchdog& _watchdog;
137  application_config& _app_config;
138  build_info& _bld_info;
139  system_info& _sys_info;
140  user_info& _usr_info;
141  memory::buffer& _scratch_space;
142  data_compressor& _compressor;
143  string_view _exe_path;
144  string_view _app_name;
145 
146  static auto _single_ptr() noexcept -> main_ctx*&;
147 };
148 
149 #if !EAGINE_IMPLEMENTING_LIBRARY
150 extern auto main_impl(int, const char**, const main_ctx_options&) -> int;
151 #endif
152 
153 } // namespace eagine
154 
155 #if !EAGINE_LINK_LIBRARY || defined(EAGINE_IMPLEMENTING_LIBRARY)
156 #include <eagine/main_ctx.inl>
157 #endif
158 
159 #endif // EAGINE_MAIN_CTX_HPP
Class for a single-instance object providing useful information ans services.
Definition: main_ctx.hpp:45
basic_string_span< const char > string_view
Alias for const string views.
Definition: string_span.hpp:116
auto build() const noexcept -> const build_info &
Returns a reference to build information instance.
Definition: main_ctx.hpp:78
Common code is placed in this namespace.
Definition: eagine.hpp:21
auto system() noexcept -> system_info &
Returns a reference to system information object.
Definition: main_ctx.hpp:103
auto preinitialize() noexcept -> main_ctx &
Does potentially expensive initialization and caching.
Class for reading application configuration.
Definition: application_config.hpp:29
auto exe_path() const noexcept -> string_view
Returns the executable path.
Definition: main_ctx.hpp:123
auto config() noexcept -> application_config &
Returns a reference to application config object.
Definition: main_ctx.hpp:98
auto instance_id() const noexcept -> process_instance_id_t
Returns this process instance id. Not equal to system PID.
Definition: main_ctx.hpp:70
auto log() noexcept -> logger &
Returns a reference to the root logger object.
Definition: main_ctx.hpp:88
auto app_name() const noexcept -> string_view
Returns the application name.
Definition: main_ctx.hpp:128
std::uint32_t process_instance_id_t
Unique process identifier type (does not necessarily match to OS PID).
Definition: identifier_t.hpp:22
Class implementing process watchdog functionality.
Definition: watchdog.hpp:22
Structure holding root logger customization options.
Definition: root_logger_opts.hpp:16
auto args() noexcept -> program_args &
Returns a reference to program arguments wrapper.
Definition: main_ctx.hpp:83
Class wrapping the main function arguments, providing a convenient API.
Definition: program_args.hpp:1082
Class implementing data compression and decompresson.
Definition: compression.hpp:37
auto compressor() noexcept -> data_compressor &
Returns a reference to shared data compressor object.
Definition: main_ctx.hpp:118
auto watchdog() noexcept -> process_watchdog &
Returns a reference to process watchdog object.
Definition: main_ctx.hpp:93
Class providing basic system information.
Definition: build_info.hpp:20
Class providing user-related information.
Definition: user_info.hpp:22
auto operator=(main_ctx &&)=delete
Not move assignable.
Class providing basic system information.
Definition: system_info.hpp:32
static auto get() noexcept -> main_ctx &
Returns the single instance.
Definition: main_ctx.hpp:64
root_logger_options logger_opts
Options for the root logger.
Definition: main_ctx.hpp:33
auto user() noexcept -> user_info &
Returns a reference to user information object.
Definition: main_ctx.hpp:108
Standalone logger object type.
Definition: logger.hpp:427
std::string app_name
The application name. Defaults to the executable name.
Definition: main_ctx.hpp:27
auto scratch_space() noexcept -> memory::buffer &
Returns a reference to shared temporary buffer.
Definition: main_ctx.hpp:113
identifier app_id
The application root logger identifier.
Definition: main_ctx.hpp:30
Structure storing customization options for main context.
Definition: main_ctx.hpp:24

Copyright © 2015-2021 Matúš Chochlík.
<chochlik -at -gmail.com>
Documentation generated on Tue Apr 13 2021 by Doxygen (version 1.8.17).