diff options
Diffstat (limited to 'src/rangemap.h')
-rw-r--r-- | src/rangemap.h | 90 |
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__*/ |