libdrmconf  0.11.3
A library to program DMR radios.
frequency.hh
1 #ifndef FREQUENCY_HH
2 #define FREQUENCY_HH
3 
4 #include <yaml-cpp/yaml.h>
5 #include <QString>
6 #include <QMetaType>
7 
10 struct Frequency
11 {
12 public:
14  enum class Format {
15  Automatic, Hz, kHz, MHz, GHz
16  };
17 
18 protected:
20  Frequency(unsigned long long hz);
21 
22 public:
24  Frequency();
26  Frequency(const Frequency &other);
27 
29  Frequency &operator = (const Frequency &other);
30  inline bool operator== (const Frequency &other) const {
31  return _frequency == other._frequency;
32  }
33  inline bool operator< (const Frequency &other) const {
34  return _frequency < other._frequency;
35  }
36 
38  QString format(Format f=Format::Automatic) const;
40  bool parse(const QString &value);
42  static Frequency fromString(const QString &freq);
43 
44  inline unsigned long long inHz() const { return _frequency; }
45  inline double inkHz() const { return double(_frequency)/1e3; }
46  inline double inMHz() const { return double(_frequency)/1e6; }
47  inline double inGHz() const { return double(_frequency)/1e9; }
48 
49  static inline Frequency fromHz(unsigned long long Hz) { return Frequency(Hz); }
50  static inline Frequency fromkHz(double kHz) { return Frequency(kHz*1e3); }
51  static inline Frequency fromMHz(double MHz) { return Frequency(MHz*1e6); }
52  static inline Frequency fromGHz(double GHz) { return Frequency(GHz*1e6); }
53 
54 protected:
56  unsigned long long _frequency;
57 };
58 
59 Q_DECLARE_METATYPE(Frequency)
60 
61 
62 namespace YAML
63 {
65  template<>
66  struct convert<Frequency>
67  {
69  static Node encode(const Frequency& rhs) {
70  return Node(rhs.format().toStdString());
71  }
72 
74  static bool decode(const Node& node, Frequency& rhs) {
75  if (! node.IsScalar())
76  return false;
77  return rhs.parse(QString::fromStdString(node.as<std::string>()));
78  }
79  };
80 }
81 #endif // FREQUENCY_HH
Helper type to encode frequencies without any rounding error.
Definition: frequency.hh:11
static Frequency fromkHz(double kHz)
Unit conversion.
Definition: frequency.hh:50
double inkHz() const
Unit conversion.
Definition: frequency.hh:45
static Frequency fromString(const QString &freq)
Pareses a frequency.
Definition: frequency.cc:96
bool operator<(const Frequency &other) const
Definition: frequency.hh:33
static Frequency fromMHz(double MHz)
Unit conversion.
Definition: frequency.hh:51
unsigned long long inHz() const
Unit conversion.
Definition: frequency.hh:44
Frequency()
Default constructor.
Definition: frequency.cc:11
bool parse(const QString &value)
Parses a frequency.
Definition: frequency.cc:53
QString format(Format f=Format::Automatic) const
Format the frequency.
Definition: frequency.cc:30
double inMHz() const
Unit conversion.
Definition: frequency.hh:46
double inGHz() const
Unit conversion.
Definition: frequency.hh:47
unsigned long long _frequency
The actual frequency in Hz.
Definition: frequency.hh:56
Format
Possible formatting hints.
Definition: frequency.hh:14
Frequency & operator=(const Frequency &other)
Assignment.
Definition: frequency.cc:24
static Frequency fromGHz(double GHz)
Unit conversion.
Definition: frequency.hh:52
static Frequency fromHz(unsigned long long Hz)
Unit conversion.
Definition: frequency.hh:49
bool operator==(const Frequency &other) const
Definition: frequency.hh:30
static Node encode(const Frequency &rhs)
Serializes the frequency.
Definition: frequency.hh:69
static bool decode(const Node &node, Frequency &rhs)
Parses the frequency.
Definition: frequency.hh:74