SpinParser  1.0
CutoffDiscretization.hpp
Go to the documentation of this file.
1 
9 #pragma once
10 #include <vector>
11 #include "lib/Exception.hpp"
12 
13 #pragma region CutoffIterator
14 
18 {
19 public:
25  CutoffIterator(float* p) : _pointer(p) {};
26 
32  float operator*() const
33  {
34  return *_pointer;
35  }
36 
43  bool operator==(const CutoffIterator& rhs) const
44  {
45  return _pointer == rhs._pointer;
46  }
47 
54  bool operator!=(const CutoffIterator& rhs) const
55  {
56  return _pointer != rhs._pointer;
57  }
58 
65  {
66  ++_pointer;
67  return *this;
68  }
69 
70 private:
71  float *_pointer;
72 };
73 #pragma endregion
74 
79 {
80 public:
86  CutoffDiscretization(const std::vector<float> &values)
87  {
88  //Ensure that discretization contains sufficiently many cutoff values
89  if (values.size() < 2) throw Exception(Exception::Type::ArgumentError, "CutoffDiscretization must contain at least two frequency values");
90 
91  _size = int(values.size());
92  _data = new float[values.size()];
93  memcpy(_data, values.data(), values.size() * sizeof(float));
94  }
95 
100  {
101  delete[] _data;
102  }
103 
110  {
111  return CutoffIterator(_data);
112  }
113 
120  {
121  return CutoffIterator(_data + _size - 1);
122  }
123 
130  {
131  return CutoffIterator(_data + _size);
132  }
133 
140  CutoffIterator find(const float cutoff) const
141  {
142  for (int i = 0; i < _size; ++i)
143  {
144  if (_data[i] == cutoff) return CutoffIterator(_data + i);
145  }
146  return end();
147  }
148 
149 private:
150  int _size;
151  float *_data;
152 };
CutoffDiscretization::last
CutoffIterator last() const
Retrieve iterator to last discretization value.
Definition: CutoffDiscretization.hpp:119
CutoffIterator::CutoffIterator
CutoffIterator(float *p)
Construct a new CutoffIterator object pointing to specific value.
Definition: CutoffDiscretization.hpp:25
CutoffDiscretization::~CutoffDiscretization
~CutoffDiscretization()
Destroy the CutoffDiscretization object.
Definition: CutoffDiscretization.hpp:99
CutoffIterator::operator==
bool operator==(const CutoffIterator &rhs) const
Iterator comparison.
Definition: CutoffDiscretization.hpp:43
CutoffDiscretization::end
CutoffIterator end() const
Retrieve iterator to last+1 discretization value.
Definition: CutoffDiscretization.hpp:129
Exception
Descriptor object for exceptions.
Definition: Exception.hpp:17
CutoffDiscretization::CutoffDiscretization
CutoffDiscretization(const std::vector< float > &values)
Construct a new CutoffDiscretization object from a list of cutoff values.
Definition: CutoffDiscretization.hpp:86
CutoffIterator::operator!=
bool operator!=(const CutoffIterator &rhs) const
Negative iterator comparison.
Definition: CutoffDiscretization.hpp:54
CutoffDiscretization::find
CutoffIterator find(const float cutoff) const
Retrieve iterator pointing to a specific cutoff value.
Definition: CutoffDiscretization.hpp:140
Exception::Type::ArgumentError
@ ArgumentError
Argument error, raised when a function is invoked with an invalid argument.
CutoffDiscretization::begin
CutoffIterator begin() const
Retrieve iterator to first discretization value.
Definition: CutoffDiscretization.hpp:109
CutoffDiscretization
Representation of frequency axis cutoff discretization.
Definition: CutoffDiscretization.hpp:78
CutoffIterator::operator++
CutoffIterator & operator++()
Prefix increment.
Definition: CutoffDiscretization.hpp:64
Exception.hpp
Descriptor object for exceptions.
CutoffIterator
Iterator over discrete cutoff values.
Definition: CutoffDiscretization.hpp:17
CutoffIterator::operator*
float operator*() const
Iterator dereference.
Definition: CutoffDiscretization.hpp:32