Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-06 08:17:26

0001 #ifndef PHOOL_PHFLAG_H
0002 #define PHOOL_PHFLAG_H
0003 
0004 /*
0005   General purpose flag package:
0006   Flags are identified by their name, Print() prints them out sorted
0007   alphabetically.
0008   To create e.g. an int flag called MYFLAG with value 10 use
0009   set_IntFlag("MYFLAG",10);
0010   get_IntFlag("MYFLAG")  will return 10 now.
0011   If an unitialised flag is used you'll get a warning printed out,
0012   the return value in this case is 0 for Int, 0. for float and NULL for
0013   char *
0014 */
0015 
0016 #include <cstdint>
0017 #include <map>
0018 #include <string>
0019 
0020 class PHFlag
0021 {
0022  public:
0023   PHFlag() = default;
0024   virtual ~PHFlag() = default;
0025 
0026   virtual double get_DoubleFlag(const std::string &name) const;
0027   virtual double get_DoubleFlag(const std::string &name, const double defaultval);
0028   virtual void set_DoubleFlag(const std::string &name, const double flag);
0029 
0030   virtual float get_FloatFlag(const std::string &name) const;
0031   virtual float get_FloatFlag(const std::string &name, const float defaultval);
0032   virtual void set_FloatFlag(const std::string &name, const float flag);
0033 
0034   virtual int get_IntFlag(const std::string &name) const;
0035   virtual int get_IntFlag(const std::string &name, const int defaultval);
0036   virtual void set_IntFlag(const std::string &name, const int flag);
0037 
0038   virtual uint64_t get_uint64Flag(const std::string &name) const;
0039   virtual uint64_t get_uint64Flag(const std::string &name, const uint64_t defaultval);
0040   virtual void set_uint64Flag(const std::string &name, const uint64_t flag);
0041 
0042   virtual std::string get_StringFlag(const std::string &name) const;
0043   virtual std::string get_StringFlag(const std::string &name, const std::string &defaultval);
0044   virtual void set_StringFlag(const std::string &name, const std::string &charstr);
0045 
0046   virtual void Print() const;
0047   virtual void PrintDoubleFlags() const;
0048   virtual void PrintIntFlags() const;
0049   virtual void Printuint64Flags() const;
0050   virtual void PrintFloatFlags() const;
0051   virtual void PrintStringFlags() const;
0052   virtual void ReadFromFile(const std::string &name);
0053   virtual void WriteToFile(const std::string &name);
0054 
0055   virtual int FlagExist(const std::string &name) const;
0056 
0057   virtual const std::map<std::string, uint64_t> *uint64Map() const { return &m_UInt64FlagMap; }
0058   virtual const std::map<std::string, int> *IntMap() const { return &m_IntFlagMap; }
0059   virtual const std::map<std::string, float> *FloatMap() const { return &m_FloatFlagMap; }
0060   virtual const std::map<std::string, double> *DoubleMap() const { return &m_DoubleFlagMap; }
0061   virtual const std::map<std::string, std::string> *StringMap() const { return &m_StringFlagMap; }
0062   virtual void PrintStackTrace() const;
0063 
0064   virtual void ClearFlag(const std::string &name);
0065   virtual void ClearAll();
0066 
0067  protected:
0068   std::map<std::string, uint64_t> m_UInt64FlagMap;
0069   std::map<std::string, int> m_IntFlagMap;
0070   std::map<std::string, double> m_DoubleFlagMap;
0071   std::map<std::string, float> m_FloatFlagMap;
0072   std::map<std::string, std::string> m_StringFlagMap;
0073 };
0074 
0075 #endif