13fb52e53SBen Tyner #pragma once
23fb52e53SBen Tyner #include <bitset>
33fb52e53SBen Tyner 
43fb52e53SBen Tyner namespace attn
53fb52e53SBen Tyner {
63fb52e53SBen Tyner 
73fb52e53SBen Tyner /** @brief configuration flags */
83fb52e53SBen Tyner enum AttentionFlag
93fb52e53SBen Tyner {
103fb52e53SBen Tyner     enVital = 0,
113fb52e53SBen Tyner     enCheckstop = 1,
123fb52e53SBen Tyner     enTerminate = 2,
133fb52e53SBen Tyner     enBreakpoints = 3,
14fe15649eSBen Tyner     dfltTi = 4,
15*d28d5f8bSaustinfcui     enClrAttnIntr = 5,
163fb52e53SBen Tyner     lastFlag
173fb52e53SBen Tyner };
183fb52e53SBen Tyner 
193fb52e53SBen Tyner /** @brief Objhects to hold configuration data */
203fb52e53SBen Tyner class Config
213fb52e53SBen Tyner {
223fb52e53SBen Tyner   public: // methods
233fb52e53SBen Tyner     /** @brief Default constructor */
2472feadcfSBen Tyner     Config();
253fb52e53SBen Tyner 
263fb52e53SBen Tyner     /** @brief Default destructor */
273fb52e53SBen Tyner     ~Config() = default;
283fb52e53SBen Tyner 
293fb52e53SBen Tyner     /** @brief Get state of flag */
303fb52e53SBen Tyner     bool getFlag(AttentionFlag i_flag) const;
313fb52e53SBen Tyner 
323fb52e53SBen Tyner     /** @brief Set configuration flag */
333fb52e53SBen Tyner     void setFlag(AttentionFlag i_flag);
343fb52e53SBen Tyner 
3572feadcfSBen Tyner     /** @brief Set all configuration flags */
3672feadcfSBen Tyner     void setFlagAll();
3772feadcfSBen Tyner 
383fb52e53SBen Tyner     /** @brief Clear configuration flag */
393fb52e53SBen Tyner     void clearFlag(AttentionFlag i_flag);
403fb52e53SBen Tyner 
4172feadcfSBen Tyner     /** @brief Clear all configuration flags */
4272feadcfSBen Tyner     void clearFlagAll();
4372feadcfSBen Tyner 
443fb52e53SBen Tyner   private:
453fb52e53SBen Tyner     std::bitset<lastFlag> iv_flags; // configuration flags
463fb52e53SBen Tyner };
473fb52e53SBen Tyner 
483fb52e53SBen Tyner } // namespace attn
49