diff options
author | lloyd <[email protected]> | 2008-09-28 23:54:37 +0000 |
---|---|---|
committer | lloyd <[email protected]> | 2008-09-28 23:54:37 +0000 |
commit | 3bf4dc81e4b75a0dafacdc947089b3ec21193153 (patch) | |
tree | 3831e21ef27b7e02abec72e73a3ce2a8a9afb87e /src/utils/stl_util.h | |
parent | a8b75e4aed9179a21e60cb3cfb47bdd263f5e4c5 (diff) |
Move stl_util and (forgotten again) modinfo.txt to utils module
Diffstat (limited to 'src/utils/stl_util.h')
-rw-r--r-- | src/utils/stl_util.h | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/src/utils/stl_util.h b/src/utils/stl_util.h new file mode 100644 index 000000000..95a19581f --- /dev/null +++ b/src/utils/stl_util.h @@ -0,0 +1,84 @@ +/************************************************* +* STL Utility Functions Header File * +* (C) 1999-2007 Jack Lloyd * +*************************************************/ + +#ifndef BOTAN_STL_UTIL_H__ +#define BOTAN_STL_UTIL_H__ + +#include <map> + +namespace Botan { + +/************************************************* +* Copy-on-Predicate Algorithm * +*************************************************/ +template<typename InputIterator, typename OutputIterator, typename Predicate> +OutputIterator copy_if(InputIterator current, InputIterator end, + OutputIterator dest, Predicate copy_p) + { + while(current != end) + { + if(copy_p(*current)) + *dest++ = *current; + ++current; + } + return dest; + } + +/************************************************* +* Searching through a std::map * +*************************************************/ +template<typename K, typename V> +inline V search_map(const std::map<K, V>& mapping, + const K& key, + const V& null_result = V()) + { + typename std::map<K, V>::const_iterator i = mapping.find(key); + if(i == mapping.end()) + return null_result; + return i->second; + } + +template<typename K, typename V, typename R> +inline R search_map(const std::map<K, V>& mapping, const K& key, + const R& null_result, const R& found_result) + { + typename std::map<K, V>::const_iterator i = mapping.find(key); + if(i == mapping.end()) + return null_result; + return found_result; + } + +/************************************************* +* Function adaptor for delete operation * +*************************************************/ +template<class T> +class del_fun : public std::unary_function<T, void> + { + public: + void operator()(T* ptr) { delete ptr; } + }; + +/************************************************* +* Delete the second half of a pair of objects * +*************************************************/ +template<typename Pair> +void delete2nd(Pair& pair) + { + delete pair.second; + } + +/************************************************* +* Insert a key/value pair into a multimap * +*************************************************/ +template<typename K, typename V> +void multimap_insert(std::multimap<K, V>& multimap, + const K& key, const V& value) + { + multimap.insert(std::make_pair(key, value)); + } + +} + +#endif |