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__*/ | 
