treelite
contiguous_array.h
Go to the documentation of this file.
1 
8 #ifndef TREELITE_CONTIGUOUS_ARRAY_H_
9 #define TREELITE_CONTIGUOUS_ARRAY_H_
10 
11 #include <cstddef>
12 #include <vector>
13 
14 namespace treelite {
15 
16 template <typename T>
18  public:
21  // NOTE: use Clone to make deep copy; copy constructors disabled
22  ContiguousArray(ContiguousArray const&) = delete;
24  explicit ContiguousArray(std::vector<T> const& other);
25  ContiguousArray& operator=(std::vector<T> const& other);
26  ContiguousArray(ContiguousArray&& other) noexcept;
27  ContiguousArray& operator=(ContiguousArray&& other) noexcept;
28  inline ContiguousArray Clone() const;
29  inline void UseForeignBuffer(void* prealloc_buf, std::size_t size);
30  inline T* Data();
31  inline T const* Data() const;
32  inline T* End();
33  inline T const* End() const;
34  inline T& Back();
35  inline T const& Back() const;
36  inline std::size_t Size() const;
37  inline bool Empty() const;
38  inline void Reserve(std::size_t newsize);
39  inline void Resize(std::size_t newsize);
40  inline void Resize(std::size_t newsize, T t);
41  inline void Clear();
42  inline void PushBack(T t);
43  inline void Extend(std::vector<T> const& other);
44  inline void Extend(ContiguousArray const& other);
45  inline std::vector<T> AsVector() const;
46  inline bool operator==(ContiguousArray const& other);
47  /* Unsafe access, no bounds checking */
48  inline T& operator[](std::size_t idx);
49  inline T const& operator[](std::size_t idx) const;
50  /* Safe access, with bounds checking */
51  inline T& at(std::size_t idx);
52  inline T const& at(std::size_t idx) const;
53  /* Safe access, with bounds checking + check against non-existent node (<0) */
54  inline T& at(int idx);
55  inline T const& at(int idx) const;
56  static_assert(std::is_pod<T>::value, "T must be POD");
57 
58  private:
59  T* buffer_;
60  std::size_t size_;
61  std::size_t capacity_;
62  bool owned_buffer_;
63 };
64 
65 } // namespace treelite
66 
68 
69 #endif // TREELITE_CONTIGUOUS_ARRAY_H_
Definition: contiguous_array.h:17
T * End()
Definition: contiguous_array.h:118
T & Back()
Definition: contiguous_array.h:128
ContiguousArray Clone() const
Definition: contiguous_array.h:79
bool Empty() const
Definition: contiguous_array.h:143
~ContiguousArray()
Definition: contiguous_array.h:24
ContiguousArray(ContiguousArray const &)=delete
T & operator[](std::size_t idx)
Definition: contiguous_array.h:264
std::vector< T > AsVector() const
Definition: contiguous_array.h:243
void Reserve(std::size_t newsize)
Definition: contiguous_array.h:148
T * Data()
Definition: contiguous_array.h:108
std::size_t Size() const
Definition: contiguous_array.h:138
T & at(std::size_t idx)
Definition: contiguous_array.h:274
void PushBack(T t)
Definition: contiguous_array.h:188
void Resize(std::size_t newsize)
Definition: contiguous_array.h:157
ContiguousArray()
Definition: contiguous_array.h:20
void UseForeignBuffer(void *prealloc_buf, std::size_t size)
Definition: contiguous_array.h:97
ContiguousArray & operator=(ContiguousArray const &)=delete
void Clear()
Definition: contiguous_array.h:182
void Extend(std::vector< T > const &other)
Definition: contiguous_array.h:201
bool operator==(ContiguousArray const &other)
Definition: contiguous_array.h:251
Implementation for ContiguousArray.
Definition: contiguous_array.h:14