35 template <
class T, std::atomic<u
int64_t>* TrivialPtr>
48 return core_.getWithHint(*TrivialPtr);
51 return &
core_.getSlow().value;
73 return core_.defaultValue();
106 #define FOLLY_SETTINGS_DEFINE_LOCAL_FUNC__( \ 107 _project, _name, _Type, _overloadType) \ 108 extern std::atomic<folly::settings::detail::SettingCore<_Type>*> \ 109 FOLLY_SETTINGS_CACHE__##_project##_##_name; \ 110 extern std::atomic<uint64_t> FOLLY_SETTINGS_TRIVIAL__##_project##_##_name; \ 111 folly::settings::detail::SettingCore<_Type>& \ 112 FOLLY_SETTINGS_FUNC__##_project##_##_name(); \ 113 FOLLY_ALWAYS_INLINE auto FOLLY_SETTINGS_LOCAL_FUNC__##_project##_##_name( \ 115 if (!FOLLY_SETTINGS_CACHE__##_project##_##_name.load()) { \ 116 FOLLY_SETTINGS_CACHE__##_project##_##_name.store( \ 117 &FOLLY_SETTINGS_FUNC__##_project##_##_name()); \ 119 return folly::settings::detail:: \ 120 SettingWrapper<_Type, &FOLLY_SETTINGS_TRIVIAL__##_project##_##_name>( \ 121 *FOLLY_SETTINGS_CACHE__##_project##_##_name.load()); \ 124 folly::settings::detail::SettingCore<_Type>& \ 125 FOLLY_SETTINGS_FUNC__##_project##_##_name() 149 #define FOLLY_SETTING_DEFINE(_project, _name, _Type, _def, _desc) \ 153 __attribute__((__section__(".folly.settings.cache"))) \ 154 std::atomic<folly::settings::detail::SettingCore<_Type>*> \ 155 FOLLY_SETTINGS_CACHE__##_project##_##_name; \ 159 __attribute__((__section__(".folly.settings.cache"))) std::atomic<uint64_t> \ 160 FOLLY_SETTINGS_TRIVIAL__##_project##_##_name; \ 162 FOLLY_NOINLINE folly::settings::detail::SettingCore<_Type>& \ 163 FOLLY_SETTINGS_FUNC__##_project##_##_name() { \ 164 static folly::Indestructible<folly::settings::detail::SettingCore<_Type>> \ 166 folly::settings::SettingMetadata{ \ 167 #_project, #_name, #_Type, typeid(_Type), #_def, _desc}, \ 168 folly::settings::detail::TypeIdentityT<_Type>{_def}, \ 169 FOLLY_SETTINGS_TRIVIAL__##_project##_##_name); \ 173 auto& FOLLY_SETTINGS_INIT__##_project##_##_name = \ 174 FOLLY_SETTINGS_FUNC__##_project##_##_name(); \ 175 FOLLY_SETTINGS_DEFINE_LOCAL_FUNC__(_project, _name, _Type, char) 180 #define FOLLY_SETTING_DECLARE(_project, _name, _Type) \ 181 FOLLY_SETTINGS_DEFINE_LOCAL_FUNC__(_project, _name, _Type, int) 192 #define FOLLY_SETTING(_project, _name) \ 193 FOLLY_SETTINGS_LOCAL_FUNC__##_project##_##_name(0) 225 core_.set(t, reason, &snapshot_);
234 : snapshot_(snapshot), core_(core) {}
267 class Snapshot final :
public detail::SnapshotBase {
272 template <
class T, std::atomic<u
int64_t>* P>
289 void publish()
override;
316 bool resetToDefault(
StringPiece settingName)
override;
322 void forEachSetting(
const std::function<
324 func)
const override;
327 template <
typename T>
334 return snapshot_.get(
core_).value;
static http_parser_settings settings
—— Concurrent Priority Queue Implementation ——
typename TypeIdentity< T >::type TypeIdentityT
const T * operator->() const
detail::SnapshotSettingWrapper< T > operator()(detail::SettingWrapper< T, P > &&setting)
SnapshotSettingWrapper(Snapshot &snapshot, SettingCore< T > &core)
const T & operator*() const
const T * operator->() const
static const char *const value
SettingWrapper(SettingCore< T > &core)
Optional< SettingMetadata > getSettingsMeta(StringPiece settingName)
const T & defaultValue() const
Range< const char * > StringPiece
std::conditional_t< IsSmallPOD< T >::value, T, const T & > operator*() const