47 |
} |
} |
48 |
}; |
}; |
49 |
|
|
50 |
std::map<std::string, IntPtr> vars; |
typedef std::map<std::string, IntPtr> VarMap; |
51 |
|
|
52 |
|
static VarMap &vars() { |
53 |
|
static VarMap v; |
54 |
|
return v; |
55 |
|
} |
56 |
|
|
57 |
int& var(const char *name) { |
int& var(const char *name) { |
58 |
return *(vars[name].ptr); |
return *(vars()[name].ptr); |
59 |
} |
} |
60 |
|
|
61 |
int& extVar(const char *name, int *var) { |
int& extVar(const char *name, int *var) { |
62 |
if (vars.count(name) > 0) { |
if (vars().count(name) > 0) { |
63 |
std::cerr << "registerInt: " << name << " already defined: previous definition replaced, but value preserved\n"; |
std::cerr << "registerInt: " << name << " already defined: previous definition replaced, but value preserved\n"; |
64 |
IntPtr &prev = vars[name]; |
IntPtr &prev = vars()[name]; |
65 |
*var = *prev.ptr; |
*var = *prev.ptr; |
66 |
return *(prev.ptr = var); |
return *(prev.ptr = var); |
67 |
} |
} |
68 |
return *((vars[name] = IntPtr(var)).ptr); |
return *((vars()[name] = IntPtr(var)).ptr); |
69 |
} |
} |
70 |
|
|
71 |
std::vector<const char *> getVarNames() { |
std::vector<const char *> getVarNames() { |
72 |
std::vector<const char *> v(vars.size()); |
std::vector<const char *> v(vars().size()); |
73 |
int i = 0; |
int i = 0; |
74 |
for (std::map<std::string, IntPtr>::iterator p = vars.begin(); |
for (std::map<std::string, IntPtr>::iterator p = vars().begin(); |
75 |
p != vars.end(); ++p) { |
p != vars().end(); ++p) { |
76 |
v[i++] = p->first.c_str(); |
v[i++] = p->first.c_str(); |
77 |
} |
} |
78 |
return v; |
return v; |