/************************************************* * STL Utility Functions Header File * * (C) 1999-2007 The Botan Project * *************************************************/ #ifndef BOTAN_STL_UTIL_H__ #define BOTAN_STL_UTIL_H__ #include namespace Botan { /************************************************* * Copy-on-Predicate Algorithm * *************************************************/ template 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 inline V search_map(const std::map& mapping, const K& key, const V& null_result = V()) { typename std::map::const_iterator i = mapping.find(key); if(i == mapping.end()) return null_result; return i->second; } template inline R search_map(const std::map& mapping, const K& key, const R& null_result, const R& found_result) { typename std::map::const_iterator i = mapping.find(key); if(i == mapping.end()) return null_result; return found_result; } /************************************************* * Function adaptor for delete operation * *************************************************/ template class del_fun : public std::unary_function { public: void operator()(T* ptr) { delete ptr; } }; /************************************************* * Delete the second half of a pair of objects * *************************************************/ template void delete2nd(Pair& pair) { delete pair.second; } /************************************************* * Insert a key/value pair into a multimap * *************************************************/ template void multimap_insert(std::multimap& multimap, const K& key, const V& value) { multimap.insert(std::make_pair(key, value)); } } #endif