ptr_vector.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #ifndef PTR_VECTOR_H_62B23520_7C8E_11DE_8A39_0800200C9A66
  2. #define PTR_VECTOR_H_62B23520_7C8E_11DE_8A39_0800200C9A66
  3. #if defined(_MSC_VER) || \
  4. (defined(__GNUC__) && (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || \
  5. (__GNUC__ >= 4)) // GCC supports "pragma once" correctly since 3.4
  6. #pragma once
  7. #endif
  8. #include <cstddef>
  9. #include <cstdlib>
  10. #include <memory>
  11. #include <vector>
  12. #include "yaml-cpp/noncopyable.h"
  13. namespace YAML {
  14. // TODO: This class is no longer needed
  15. template <typename T>
  16. class ptr_vector : private YAML::noncopyable {
  17. public:
  18. ptr_vector() {}
  19. void clear() { m_data.clear(); }
  20. std::size_t size() const { return m_data.size(); }
  21. bool empty() const { return m_data.empty(); }
  22. void push_back(std::unique_ptr<T>&& t) { m_data.push_back(std::move(t)); }
  23. T& operator[](std::size_t i) { return *m_data[i]; }
  24. const T& operator[](std::size_t i) const { return *m_data[i]; }
  25. T& back() { return *(m_data.back().get()); }
  26. const T& back() const { return *(m_data.back().get()); }
  27. private:
  28. std::vector<std::unique_ptr<T>> m_data;
  29. };
  30. }
  31. #endif // PTR_VECTOR_H_62B23520_7C8E_11DE_8A39_0800200C9A66