aboutsummaryrefslogtreecommitdiffstats
path: root/src/utils/stl_util.h
diff options
context:
space:
mode:
authorlloyd <[email protected]>2008-09-28 23:54:37 +0000
committerlloyd <[email protected]>2008-09-28 23:54:37 +0000
commit3bf4dc81e4b75a0dafacdc947089b3ec21193153 (patch)
tree3831e21ef27b7e02abec72e73a3ce2a8a9afb87e /src/utils/stl_util.h
parenta8b75e4aed9179a21e60cb3cfb47bdd263f5e4c5 (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.h84
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