#define INT_CONFIG(name, unused_private_key, unused_public_key, default, unused_doc) \
int64_t GCConfig::Get##name() { return s_##name; } \
+ int64_t GCConfig::Get##name(int64_t defaultValue) \
+ { \
+ return s_##name##Provided ? s_##name : defaultValue; \
+ } \
void GCConfig::Set##name(int64_t value) { s_Updated##name = value; } \
int64_t GCConfig::s_##name = default; \
+ bool GCConfig::s_##name##Provided = false; \
int64_t GCConfig::s_Updated##name = default;
// String configs are not cached because 1) they are rare and
void GCConfig::Initialize()
{
-#define BOOL_CONFIG(name, private_key, public_key, unused_default, unused_doc) \
- s_##name##Provided = GCToEEInterface::GetBooleanConfigValue(private_key, public_key, &s_##name);
-
-#define INT_CONFIG(name, private_key, public_key, unused_default, unused_doc) \
- GCToEEInterface::GetIntConfigValue(private_key, public_key, &s_##name);
+#define BOOL_CONFIG(name, private_key, public_key, unused_default, unused_doc) \
+ s_##name##Provided = GCToEEInterface::GetBooleanConfigValue(private_key, public_key, &s_##name); \
+ s_Updated##name = s_##name;
+
+#define INT_CONFIG(name, private_key, public_key, unused_default, unused_doc) \
+ s_##name##Provided = GCToEEInterface::GetIntConfigValue(private_key, public_key, &s_##name); \
+ s_Updated##name = s_##name; \
#define STRING_CONFIG(unused_name, unused_private_key, unused_public_key, unused_doc)
#define INT_CONFIG(name, unused_private_key, unused_public_key, unused_default, unused_doc) \
public: static int64_t Get##name(); \
+ public: static int64_t Get##name(int64_t defaultValue); \
public: static void Set##name(int64_t value); \
private: static int64_t s_##name; \
- private: static int64_t s_Updated##name;
+ private: static bool s_##name##Provided; \
+ private: static int64_t s_Updated##name; \
#define STRING_CONFIG(name, unused_private_key, unused_public_key, unused_doc) \
public: static GCConfigStringHolder Get##name();