Back to home page

EIC code displayed by LXR

 
 

    


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))  // GCC supports "pragma once" correctly since 3.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 // TODO: This class is no longer needed
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 }  // namespace SHERPA_YAML
0044 
0045 #endif  // PTR_VECTOR_H_62B23520_7C8E_11DE_8A39_0800200C9A66