ptr_vector.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  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. namespace YAML {
  13. // TODO: This class is no longer needed
  14. template <typename T>
  15. class ptr_vector {
  16. public:
  17. ptr_vector() : m_data{} {}
  18. ptr_vector(const ptr_vector&) = delete;
  19. ptr_vector(ptr_vector&&) = default;
  20. ptr_vector& operator=(const ptr_vector&) = delete;
  21. ptr_vector& operator=(ptr_vector&&) = default;
  22. void clear() { m_data.clear(); }
  23. std::size_t size() const { return m_data.size(); }
  24. bool empty() const { return m_data.empty(); }
  25. void push_back(std::unique_ptr<T>&& t) { m_data.push_back(std::move(t)); }
  26. T& operator[](std::size_t i) { return *m_data[i]; }
  27. const T& operator[](std::size_t i) const { return *m_data[i]; }
  28. T& back() { return *(m_data.back().get()); }
  29. const T& back() const { return *(m_data.back().get()); }
  30. private:
  31. std::vector<std::unique_ptr<T>> m_data;
  32. };
  33. } // namespace YAML
  34. #endif // PTR_VECTOR_H_62B23520_7C8E_11DE_8A39_0800200C9A66