File indexing completed on 2025-05-12 09:08:10
0001 #ifndef PTR_VECTOR_H_62B23520_7C8E_11DE_8A39_0800200C9A66
0002 #define PTR_VECTOR_H_62B23520_7C8E_11DE_8A39_0800200C9A66
0003
0004 #if defined(_MSC_VER) || \
0005 (defined(__GNUC__) && (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || \
0006 (__GNUC__ >= 4))
0007 #pragma once
0008 #endif
0009
0010 #include <cstddef>
0011 #include <cstdlib>
0012 #include <memory>
0013 #include <vector>
0014
0015 namespace SHERPA_YAML {
0016
0017
0018 template <typename T>
0019 class ptr_vector {
0020 public:
0021 ptr_vector() : m_data{} {}
0022 ptr_vector(const ptr_vector&) = delete;
0023 ptr_vector(ptr_vector&&) = default;
0024 ptr_vector& operator=(const ptr_vector&) = delete;
0025 ptr_vector& operator=(ptr_vector&&) = default;
0026
0027 void clear() { m_data.clear(); }
0028
0029 std::size_t size() const { return m_data.size(); }
0030 bool empty() const { return m_data.empty(); }
0031
0032 void push_back(std::unique_ptr<T>&& t) { m_data.push_back(std::move(t)); }
0033 T& operator[](std::size_t i) { return *m_data[i]; }
0034 const T& operator[](std::size_t i) const { return *m_data[i]; }
0035
0036 T& back() { return *(m_data.back().get()); }
0037
0038 const T& back() const { return *(m_data.back().get()); }
0039
0040 private:
0041 std::vector<std::unique_ptr<T>> m_data;
0042 };
0043 }
0044
0045 #endif