Fixed some C/C++ compiler errors due to stricter checks.
[rubinius.git] / machine / c_api.hpp
blob698fc1e1c8f8e6cfac8bea05bb1d2cce12b310ab
1 #ifndef RBX_C_API_HPP
2 #define RBX_C_API_HPP
4 #include "memory.hpp"
5 #include "spinlock.hpp"
7 #include "class/native_method.hpp"
9 #include "capi/capi_constants.h"
11 #include <mutex>
12 #include <unordered_map>
13 #include <unordered_set>
14 #include <vector>
16 namespace rubinius {
17 class C_API {
18 public:
19 typedef std::unordered_set<std::string> CApiBlackList;
20 typedef std::vector<std::mutex*> CApiLocks;
21 typedef std::unordered_map<std::string, int> CApiLockMap;
23 typedef std::vector<std::string> CApiConstantNameMap;
24 typedef std::unordered_map<int, MemoryHandle*> CApiConstantHandleMap;
26 private:
27 CApiConstantNameMap capi_constant_name_map_;
28 CApiConstantHandleMap capi_constant_map_;
29 CApiBlackList capi_black_list_;
30 CApiLocks capi_locks_;
31 CApiLockMap capi_lock_map_;
33 bool use_capi_lock_;
35 locks::spinlock_mutex capi_ds_lock_;
36 locks::spinlock_mutex capi_locks_lock_;
37 locks::spinlock_mutex capi_constant_lock_;
39 public:
40 C_API();
41 virtual ~C_API() { }
43 void after_fork_child(STATE);
45 void set_use_capi_lock(bool s) {
46 use_capi_lock_ = s;
49 locks::spinlock_mutex& capi_ds_lock() {
50 return capi_ds_lock_;
53 locks::spinlock_mutex& capi_constant_lock() {
54 return capi_constant_lock_;
57 int capi_lock_index(std::string name);
59 void enter_capi(STATE, const char* file, int line);
60 void leave_capi(STATE);
62 void setup_capi_constant_names();
63 CApiConstantNameMap& capi_constant_name_map() {
64 return capi_constant_name_map_;
67 CApiConstantHandleMap& capi_constant_map() {
68 return capi_constant_map_;
71 void initialize_capi_black_list();
75 #endif