pairutil.h
1/***************************************************************************
2 *
3 * Copyright (C) 2006-2009 by Willem van Straten
4 * Licensed under the Academic Free License version 2.1
5 *
6 ***************************************************************************/
7
8#include <utility>
9#include <iostream>
10
11namespace std
12{
13 template<typename T>
14 class numeric_limits< pair<T,T> >
15 {
16 public:
17 static const int digits10 = numeric_limits<T>::digits10;
18 };
19
20 template<class T, class U>
21 ostream& operator << (ostream& os, pair<T,U> vals)
22 {
23 return os << vals.first << ":" << vals.second;
24 }
25
26 template<class T, class U>
27 istream& operator >> (istream& is, pair<T,U>& vals)
28 {
29 bool bracketed = is.peek() == '(';
30
31 if (bracketed)
32 is.get();
33
34 char separator = 0;
35
36 is >> vals.first >> separator >> vals.second;
37
38 if ( (bracketed && separator != ',') || (!bracketed && separator != ':') )
39 {
40 is.setstate (istream::failbit);
41 return is;
42 }
43
44 if (bracketed)
45 {
46 if (is.peek() != ')')
47 is.setstate (istream::failbit);
48 else
49 is.get();
50 }
51
52 return is;
53 }
54}
55
56// Stretch min and max to normalized range
57template<typename T>
58void stretch (const std::pair<T,T>& norm, T& min, T& max)
59{
60 T diff = max - min;
61 max = min + norm.second * diff;
62 min = min + norm.first * diff;
63}
64
65// Stretch range to normalized range
66template<typename T>
67void stretch (const std::pair<T,T>& norm, std::pair<T,T>& range)
68{
69 stretch (norm, range.first, range.second);
70}
71
72template<typename T, typename U>
73bool compair1 (const std::pair<T,U>& a, const std::pair<T,U>& b)
74{
75 return a.first < b.first;
76}
77
78template<typename T, typename U>
79bool compair2 (const std::pair<T,U>& a, const std::pair<T,U>& b)
80{
81 return a.second < b.second;
82}
83
STL namespace.

Generated using doxygen 1.14.0