1 #ifndef PTR_VECTOR_H_62B23520_7C8E_11DE_8A39_0800200C9A66 2 #define PTR_VECTOR_H_62B23520_7C8E_11DE_8A39_0800200C9A66 4 #if defined(_MSC_VER) || \ 5 (defined(__GNUC__) && (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || \ 6 (__GNUC__ >= 4)) // GCC supports "pragma once" correctly since 3.4 21 ptr_vector() : m_data{} {}
22 ptr_vector(
const ptr_vector&) =
delete;
23 ptr_vector(ptr_vector&&) =
default;
24 ptr_vector& operator=(
const ptr_vector&) =
delete;
25 ptr_vector& operator=(ptr_vector&&) =
default;
27 void clear() { m_data.clear(); }
29 std::size_t size()
const {
return m_data.size(); }
30 bool empty()
const {
return m_data.empty(); }
32 void push_back(std::unique_ptr<T>&& t) { m_data.push_back(std::move(t)); }
33 T& operator[](std::size_t i) {
return *m_data[i]; }
34 const T& operator[](std::size_t i)
const {
return *m_data[i]; }
36 T& back() {
return *(m_data.back().get()); }
38 const T& back()
const {
return *(m_data.back().get()); }
41 std::vector<std::unique_ptr<T>> m_data;
45 #endif // PTR_VECTOR_H_62B23520_7C8E_11DE_8A39_0800200C9A66