Spicy
global-state.h
1 // Copyright (c) 2020-2021 by the Zeek Project. See LICENSE for details.
2 
3 #pragma once
4 
5 #include <map>
6 #include <memory>
7 #include <optional>
8 #include <string>
9 #include <vector>
10 
11 #include <spicy/rt/configuration.h>
12 
13 namespace spicy::rt {
14 struct Parser;
15 } // namespace spicy::rt
16 
17 // We collect all (or most) of the runtime's global state centrally. That's
18 // 1st good to see what we have (global state should be minimal) and 2nd
19 // helpful to ensure that JIT maps things correctly. Note that all code
20 // accessing any of this state is in charge of ensuring thread-safety itself.
21 // These globals are generally initialized through spicy::rt::init();
22 
23 namespace spicy::rt::detail {
24 
26 struct GlobalState {
27  GlobalState() = default;
28  ~GlobalState();
29 
30  GlobalState(const GlobalState&) = delete;
31  GlobalState(GlobalState&&) noexcept = delete;
32  GlobalState& operator=(const GlobalState&) = delete;
33  GlobalState& operator=(GlobalState&&) noexcept = delete;
34 
36  bool runtime_is_initialized = false;
37 
39  std::unique_ptr<Configuration> configuration;
40 
45  std::vector<const Parser*> parsers;
46 
48  std::optional<const Parser*> default_parser;
49 
54  std::map<std::string, std::vector<const Parser*>> parsers_by_name;
55 
57  std::map<std::string, std::vector<const Parser*>> parsers_by_mime_type;
58 };
59 
64 extern GlobalState* __global_state;
65 
67 extern GlobalState* createGlobalState();
68 
73 inline auto globalState() {
74  if ( __global_state )
75  return __global_state;
76 
77  return createGlobalState();
78 }
79 
80 } // namespace spicy::rt::detail
std::map< std::string, std::vector< const Parser * > > parsers_by_mime_type
Definition: global-state.h:57
std::map< std::string, std::vector< const Parser * > > parsers_by_name
Definition: global-state.h:54
Definition: global-state.h:26
std::optional< const Parser * > default_parser
Definition: global-state.h:48
Definition: global-state.h:23
std::vector< const Parser * > parsers
Definition: global-state.h:45
std::unique_ptr< Configuration > configuration
Definition: global-state.h:39
bool runtime_is_initialized
Definition: global-state.h:36