yaml-cpp

FORK: A YAML parser and emitter in C++
git clone https://git.neptards.moe/neptards/yaml-cpp.git
Log | Files | Refs | README | LICENSE

ptr_vector.h (1328B)


      1 #ifndef PTR_VECTOR_H_62B23520_7C8E_11DE_8A39_0800200C9A66
      2 #define PTR_VECTOR_H_62B23520_7C8E_11DE_8A39_0800200C9A66
      3 
      4 #if defined(_MSC_VER) ||                                            \
      5     (defined(__GNUC__) && (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || \
      6      (__GNUC__ >= 4))  // GCC supports "pragma once" correctly since 3.4
      7 #pragma once
      8 #endif
      9 
     10 #include <cstddef>
     11 #include <cstdlib>
     12 #include <memory>
     13 #include <vector>
     14 
     15 namespace YAML {
     16 
     17 // TODO: This class is no longer needed
     18 template <typename T>
     19 class ptr_vector {
     20  public:
     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;
     26 
     27   void clear() { m_data.clear(); }
     28 
     29   std::size_t size() const { return m_data.size(); }
     30   bool empty() const { return m_data.empty(); }
     31 
     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]; }
     35 
     36   T& back() { return *(m_data.back().get()); }
     37 
     38   const T& back() const { return *(m_data.back().get()); }
     39 
     40  private:
     41   std::vector<std::unique_ptr<T>> m_data;
     42 };
     43 }  // namespace YAML
     44 
     45 #endif  // PTR_VECTOR_H_62B23520_7C8E_11DE_8A39_0800200C9A66