46 template<
class K, 
class V>
    47 inline std::list<K> 
uUniqueKeys(
const std::multimap<K, V> & mm)
    50         typename std::list<K>::reverse_iterator lastValue;
    51         for(
typename std::multimap<K, V>::const_iterator iter = mm.begin(); iter!=mm.end(); ++iter)
    53                 if(iter == mm.begin() || (iter != mm.begin() && *lastValue != iter->first))
    55                         l.push_back(iter->first);
    56                         lastValue = l.rbegin();
    67 template<
class K, 
class V>
    68 inline std::list<K> 
uKeys(
const std::multimap<K, V> & mm)
    71         for(
typename std::multimap<K, V>::const_iterator iter = mm.begin(); iter!=mm.end(); ++iter)
    73                 l.push_back(iter->first);
    83 template<
class K, 
class V>
    84 inline std::list<V> 
uValues(
const std::multimap<K, V> & mm)
    87         for(
typename std::multimap<K, V>::const_iterator iter = mm.begin(); iter!=mm.end(); ++iter)
    89                 l.push_back(iter->second);
   100 template<
class K, 
class V>
   101 inline std::list<V> 
uValues(
const std::multimap<K, V> & mm, 
const K & key)
   104         std::pair<typename std::multimap<K, V>::const_iterator, 
typename std::multimap<K, V>::const_iterator> range;
   105         range = mm.equal_range(key);
   106         for(
typename std::multimap<K, V>::const_iterator iter = range.first; iter!=range.second; ++iter)
   108                 l.push_back(iter->second);
   118 template<
class K, 
class V>
   119 inline std::vector<K> 
uKeys(
const std::map<K, V> & m)
   121         std::vector<K> v(m.size());
   123         for(
typename std::map<K, V>::const_iterator iter = m.begin(); iter!=m.end(); ++iter)
   136 template<
class K, 
class V>
   140         for(
typename std::map<K, V>::const_iterator iter = m.begin(); iter!=m.end(); ++iter)
   142                 l.push_back(iter->first);
   152 template<
class K, 
class V>
   153 inline std::set<K> 
uKeysSet(
const std::map<K, V> & m)
   157         for(
typename std::map<K, V>::const_iterator iter = m.begin(); iter!=m.end(); ++iter)
   159                 s.insert(s.end(), iter->first);
   170 template<
class K, 
class V>
   171 inline std::vector<V> 
uValues(
const std::map<K, V> & m)
   173         std::vector<V> v(m.size());
   175         for(
typename std::map<K, V>::const_iterator iter = m.begin(); iter!=m.end(); ++iter)
   188 template<
class K, 
class V>
   192         for(
typename std::map<K, V>::const_iterator iter = m.begin(); iter!=m.end(); ++iter)
   194                 l.push_back(iter->second);
   206 template<
class K, 
class V>
   207 inline V 
uValue(
const std::map<K, V> & m, 
const K & key, 
const V & defaultValue = V())
   210         typename std::map<K, V>::const_iterator i = m.find(key);
   226 template<
class K, 
class V>
   227 inline V 
uTake(std::map<K, V> & m, 
const K & key, 
const V & defaultValue = V())
   230         typename std::map<K, V>::iterator i = m.find(key);
   251 inline typename std::list<V>::iterator 
uIteratorAt(std::list<V> & list, 
const unsigned int & pos)
   253         typename std::list<V>::iterator iter = list.begin();
   254         for(
unsigned int i = 0; i<pos && iter != list.end(); ++i )
   269 inline typename std::list<V>::const_iterator 
uIteratorAt(
const std::list<V> & list, 
const unsigned int & pos)
   271         typename std::list<V>::const_iterator iter = list.begin();
   272         for(
unsigned int i = 0; i<pos && iter != list.end(); ++i )
   287 inline typename std::vector<V>::iterator 
uIteratorAt(std::vector<V> & v, 
const unsigned int & pos)
   289         return v.begin() + pos;
   300 inline V & 
uValueAt(std::list<V> & list, 
const unsigned int & pos)
   302         typename std::list<V>::iterator iter = 
uIteratorAt(list, pos);
   314 inline const V & 
uValueAt(
const std::list<V> & list, 
const unsigned int & pos)
   316         typename std::list<V>::const_iterator iter = 
uIteratorAt(list, pos);
   327 inline bool uContains(
const std::list<V> & list, 
const V & value)
   329         return std::find(list.begin(), list.end(), value) != list.end();
   338 template<
class K, 
class V>
   339 inline bool uContains(
const std::map<K, V> & map, 
const K & key)
   341         return map.find(key) != map.end();
   350 template<
class K, 
class V>
   351 inline bool uContains(
const std::multimap<K, V> & map, 
const K & key)
   353         return map.find(key) != map.end();
   360 template<
class K, 
class V>
   361 inline void uInsert(std::map<K, V> & map, 
const std::pair<K, V> & pair)
   363         std::pair<typename std::map<K, V>::iterator, 
bool> inserted = map.insert(pair);
   364         if(inserted.second == 
false)
   366                 inserted.first->second = pair.second;
   378         return std::vector<V>(list.begin(), list.end());
   389         return std::list<V>(v.begin(), v.end());
   398 inline void uAppend(std::list<V> & list, 
const std::list<V> & newItems)
   400         list.insert(list.end(), newItems.begin(), newItems.end());
   411 inline int uIndexOf(
const std::vector<V> & list, 
const V & value)
   415         for(
typename std::vector<V>::const_iterator iter = list.begin(); iter!=list.end(); ++iter)
   438 inline std::list<std::string> 
uSplit(
const std::string & str, 
char separator = 
' ')
   440         std::list<std::string> v;
   442         for(
unsigned int i=0; i<str.size(); ++i)
   444                 if(str[i] != separator)
   468         return c >= 
'0' && c <= 
'9';
   483         std::list<std::string> list;
   486         for(
unsigned int i=0; i<str.size(); ++i)
   490                         if(!num && buf.size())
   528 inline int uStrNumCmp(
const std::string & a, 
const std::string & b)
   530         std::vector<std::string> listA;
   531         std::vector<std::string> listB;
   538         for(i=0; i<listA.size() && i<listB.size(); ++i)
   543                         if(listA[i].at(0) == 
'0' && listB[i].size() < listA[i].size())
   545                                 while(listB[i].size() < listA[i].size())
   550                         else if(listB[i].at(0) == 
'0' && listA[i].size() < listB[i].size())
   552                                 while(listA[i].size() < listB[i].size())
   558                         if(listB[i].size() < listA[i].size())
   562                         else if(listB[i].size() > listA[i].size())
   568                                 result = listA[i].compare(listB[i]);
   581                         result = listA[i].compare(listB[i]);
 std::list< K > uUniqueKeys(const std::multimap< K, V > &mm)
std::list< K > uKeysList(const std::map< K, V > &m)
bool uIsDigit(const char c)
V & uValueAt(std::list< V > &list, const unsigned int &pos)
int uStrNumCmp(const std::string &a, const std::string &b)
std::set< K > uKeysSet(const std::map< K, V > &m)
V uTake(std::map< K, V > &m, const K &key, const V &defaultValue=V())
std::list< std::string > uSplit(const std::string &str, char separator=' ')
std::list< V > uVectorToList(const std::vector< V > &v)
std::list< std::string > uSplitNumChar(const std::string &str)
std::list< V > uValues(const std::multimap< K, V > &mm)
bool uContains(const std::list< V > &list, const V &value)
std::vector< V > uListToVector(const std::list< V > &list)
std::list< V >::iterator uIteratorAt(std::list< V > &list, const unsigned int &pos)
std::list< K > uKeys(const std::multimap< K, V > &mm)
std::list< V > uValuesList(const std::map< K, V > &m)
void uAppend(std::list< V > &list, const std::list< V > &newItems)
int uIndexOf(const std::vector< V > &list, const V &value)
V uValue(const std::map< K, V > &m, const K &key, const V &defaultValue=V())
void uInsert(std::map< K, V > &map, const std::pair< K, V > &pair)