1 /*
2 * Global State Management
3 * (C) 2010 Jack Lloyd
4 *
5 * Distributed under the terms of the Botan license
6 */
7 
8 #ifndef BOTAN_GLOBAL_STATE_H__
9 #define BOTAN_GLOBAL_STATE_H__
10 
11 #include <botan/build.h>
12 
13 namespace Botan {
14 
15 /*
16 * Forward declare to avoid recursive dependency between this header
17 * and libstate.h
18 */
19 class Library_State;
20 
21 /**
22 * Namespace for management of the global state
23 */
24 namespace Global_State_Management {
25 
26 /**
27 * Access the global library state
28 * @return reference to the global library state
29 */
30 BOTAN_DLL Library_State& global_state();
31 
32 /**
33 * Set the global state object
34 * @param state the new global state to use
35 */
36 BOTAN_DLL void set_global_state(Library_State* state);
37 
38 /**
39 * Set the global state object unless it is already set
40 * @param state the new global state to use
41 * @return true if the state parameter is now being used as the global
42 *         state, or false if one was already set, in which case the
43 *         parameter was deleted immediately
44 */
45 BOTAN_DLL bool set_global_state_unless_set(Library_State* state);
46 
47 /**
48 * Swap the current state for another
49 * @param new_state the new state object to use
50 * @return previous state (or NULL if none)
51 */
52 BOTAN_DLL Library_State* swap_global_state(Library_State* new_state);
53 
54 /**
55 * Query if the library is currently initialized
56 * @return true iff the library is initialized
57 */
58 BOTAN_DLL bool global_state_exists();
59 
60 }
61 
62 /*
63 * Insert into Botan ns for convenience/backwards compatability
64 */
65 using Global_State_Management::global_state;
66 
67 }
68 
69 #endif
70