summaryrefslogtreecommitdiff
path: root/src/rangemap.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/rangemap.h')
-rw-r--r--src/rangemap.h90
1 files changed, 48 insertions, 42 deletions
diff --git a/src/rangemap.h b/src/rangemap.h
index 34a50b1..4c427e7 100644
--- a/src/rangemap.h
+++ b/src/rangemap.h
@@ -24,68 +24,74 @@
* along with DrumGizmo; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-#ifndef __DRUMGIZMO_RANGEMAP_H__
-#define __DRUMGIZMO_RANGEMAP_H__
+#pragma once
#include <vector>
#include <map>
-template<typename T1, typename T2>
-class RangeMap {
+template <typename T1, typename T2> class RangeMap
+{
public:
- void insert(T1 from, T1 to, T2 value);
- std::vector<T2> get(T1 from, T1 to);
- std::vector<T2> get(T1 at);
+ void insert(T1 from, T1 to, T2 value);
+ std::vector<T2> get(T1 from, T1 to);
+ std::vector<T2> get(T1 at);
private:
- std::multimap<std::pair<T1, T1>, T2> values;
+ std::multimap<std::pair<T1, T1>, T2> values;
};
-template<typename T1, typename T2>
+template <typename T1, typename T2>
void RangeMap<T1, T2>::insert(T1 from, T1 to, T2 value)
{
- if(from < to) values.insert(std::make_pair(std::make_pair(from, to), value));
- else values.insert(std::make_pair(std::make_pair(to, from), value));
+ if(from < to)
+ {
+ values.insert(std::make_pair(std::make_pair(from, to), value));
+ }
+ else
+ {
+ values.insert(std::make_pair(std::make_pair(to, from), value));
+ }
}
-template<typename T1, typename T2>
+template <typename T1, typename T2>
std::vector<T2> RangeMap<T1, T2>::get(T1 from, T1 to)
{
- std::vector<T2> res;
+ std::vector<T2> res;
- typename std::multimap<std::pair<T1, T1>, T2>::iterator i = values.begin();
- while(i != values.end()) {
- T1 a = i->first.first;
- T1 b = i->first.second;
- if(
- (from >= a && to <= b) || // inside
- (from <= a && to >= b) || // containing
- (from <= a && to >= a && to <= b) || // overlapping lower
- (from >= a && from <= b && to >= b) // overlapping upper
- )
- res.push_back(i->second);
- i++;
- }
+ typename std::multimap<std::pair<T1, T1>, T2>::iterator i = values.begin();
+ while(i != values.end())
+ {
+ T1 a = i->first.first;
+ T1 b = i->first.second;
+ if((from >= a && to <= b) || // inside
+ (from <= a && to >= b) || // containing
+ (from <= a && to >= a && to <= b) || // overlapping lower
+ (from >= a && from <= b && to >= b) // overlapping upper
+ )
+ {
+ res.push_back(i->second);
+ }
+ i++;
+ }
- return res;
+ return res;
}
-template<typename T1, typename T2>
-std::vector<T2> RangeMap<T1, T2>::get(T1 at)
+template <typename T1, typename T2> std::vector<T2> RangeMap<T1, T2>::get(T1 at)
{
- std::vector<T2> res;
+ std::vector<T2> res;
- typename std::multimap<std::pair<T1, T1>, T2>::iterator i = values.begin();
- while(i != values.end()) {
- T1 a = i->first.first;
- T1 b = i->first.second;
- if(at >= a && at <= b)
- res.push_back(i->second);
- i++;
- }
+ typename std::multimap<std::pair<T1, T1>, T2>::iterator i = values.begin();
+ while(i != values.end())
+ {
+ T1 a = i->first.first;
+ T1 b = i->first.second;
+ if(at >= a && at <= b)
+ {
+ res.push_back(i->second);
+ }
+ i++;
+ }
- return res;
+ return res;
}
-
-
-#endif/*__DRUMGIZMO_RANGEMAP_H__*/