5 #ifndef BASE_FEATURE_FLAGS_H_
6 #define BASE_FEATURE_FLAGS_H_
10 #include <boost/function.hpp>
11 #include <boost/scoped_ptr.hpp>
14 #include <base/sandesh/process_info_constants.h>
15 #include <base/sandesh/process_info_types.h>
17 #include "rapidjson/document.h"
18 #include "rapidjson/stringbuffer.h"
19 #include "rapidjson/writer.h"
21 #include <tbb/mutex.h>
117 return "Experimental";
126 return "In Progress";
129 return "Pre Retired";
139 if (type ==
"Experimental") {
142 if (type ==
"Alpha") {
145 if (type ==
"Beta") {
148 if (type ==
"In-Progress") {
151 if (type ==
"Pre-Retired") {
154 if (type ==
"Unknown") {
162 FlagContext(
const std::string& description,
const std::string &val)
174 return !(*
this == rhs);
229 return !(*
this == rhs);
341 static void Initialize(
const string &build_info);
347 void Set(
const std::string &name,
const std::string &version_info,
353 void Unset(
const std::string &name);
459 void Set(
const std::string &name,
const std::string &
version,
bool enabled,
465 void Unset(
const std::string &name);
472 bool IsFlagEnabled(
const std::string &name,
bool default_state,
544 typedef std::map<std::string, FlagConfig>
FlagMap;
581 #endif // BASE_FEATURE_FLAGS_H_
const FlagState::Type & state() const
static void Initialize(const string &build_info)
const std::string & version() const
void Unset(const std::string &name)
void set_name(const std::string &val)
void set_enabled(bool val)
void Set(const std::string &name, const std::string &version, bool enabled, FlagState::Type state, ContextVec &context_infos)
static FlagUveManager * GetInstance()
static boost::scoped_ptr< FlagUveManager > instance_
FlagManager * flag_manager_
size_t GetIntMapCount() const
void Unset(const std::string &name)
static FlagConfigManager * GetInstance()
DISALLOW_COPY_AND_ASSIGN(FlagManager)
std::map< std::string, FlagConfig >::const_iterator flag_map_citr
ContextVec context_infos_
bool operator!=(const FlagConfig &rhs) const
FlagConfigVec GetFlagInfos() const
static std::string ToString(Type state)
void Unregister(const Flag *flag)
std::map< std::string, FlagConfig > FlagMap
const ContextVec & context_infos() const
boost::function< void(void)> FlagUveCb
void Register(Flag *flag)
FlagManager * flag_manager_
std::multimap< std::string, Flag * >::const_iterator int_map_const_itr
const bool enabled() const
ContextVec context_infos_
void set_description(const std::string &val)
size_t GetFlagMapCount() const
DISALLOW_COPY_AND_ASSIGN(FlagUveManager)
void set_version(const std::string &val)
bool operator==(const FlagContext &rhs) const
bool operator!=(const FlagContext &rhs) const
std::map< std::string, FlagConfig >::iterator flag_map_itr
std::vector< Flag > FlagVec
void Set(const std::string &name, const std::string &version_info, bool enabled, FlagState::Type state, ContextVec &context_infos)
DISALLOW_COPY_AND_ASSIGN(FlagConfigManager)
static FlagManager * GetInstance()
void set_context_infos(const ContextVec &val)
FlagConfigVec GetFlagInfosUnlocked() const
std::vector< FlagConfig > FlagConfigVec
void set_enabled(const bool val)
static void CreateInstance(FlagManager *mgr, FlagUveCb send_uve_cb)
FlagConfigVec GetFlagInfos(bool lock) const
const ContextVec & context_infos() const
void set_context_infos(const ContextVec &val)
std::multimap< std::string, Flag * > InterestMap
FlagStateCb flag_state_cb_
std::multimap< std::string, Flag * >::iterator int_map_itr
bool operator==(const Flag &rhs) const
static std::string version_
DISALLOW_COPY_AND_ASSIGN(Flag)
FlagContext(const std::string &description, const std::string &val)
bool IsRegistered(const Flag *flag) const
bool operator!=(const Flag &rhs) const
const std::string & name() const
FlagUveManager(FlagManager *manager, FlagUveCb send_uve_cb)
boost::function< void()> FlagStateCb
std::vector< FlagContext > ContextVec
std::vector< FlagContext >::const_iterator context_iterator
std::vector< FlagContext >::size_type context_size
const std::string & description() const
std::vector< FlagConfig >::const_iterator flag_cfg_itr
static boost::scoped_ptr< FlagManager > instance_
bool operator==(const FlagConfig &rhs) const
bool IsFlagEnabled(const std::string &name, bool default_state, const ContextVec &c_vec) const
FlagConfig(const std::string &name, const std::string &version, bool enabled, FlagState::Type state, ContextVec &context_infos)
void set_state(const FlagState::Type &val)
FlagConfigManager(FlagManager *manager)
static boost::scoped_ptr< FlagConfigManager > instance_
void set_name(const std::string &val)
const std::string & name() const
static Type FromString(const std::string &type)