You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

41 line
1.0KB

  1. #pragma once
  2. #include <algorithm>
  3. #include <initializer_list>
  4. #include <vector>
  5. #include <functional>
  6. namespace dds {
  7. template <typename Container, typename Predicate>
  8. void erase_if(Container& c, Predicate&& p) {
  9. auto erase_point = std::remove_if(c.begin(), c.end(), p);
  10. c.erase(erase_point, c.end());
  11. }
  12. template <typename Container, typename Iter, typename Stop>
  13. void extend(Container& c, Iter iter, const Stop stop) {
  14. while (iter != stop) {
  15. c.insert(c.end(), typename Container::value_type(*iter++));
  16. }
  17. }
  18. template <typename Container, typename Iter>
  19. void extend(Container& c, Iter iter, Iter end) {
  20. c.insert(c.end(), iter, end);
  21. }
  22. template <typename Container, typename Other>
  23. void extend(Container& c, Other&& o) {
  24. extend(c, o.begin(), o.end());
  25. }
  26. template <typename Container, typename Item>
  27. void extend(Container& c, std::initializer_list<Item> il) {
  28. c.insert(c.end(), il.begin(), il.end());
  29. }
  30. template <typename T>
  31. using ref_vector = std::vector<std::reference_wrapper<T>>;
  32. } // namespace dds