@@ -196,23 +196,26 @@ class dyn_array
196196 }
197197 }
198198 dyn_array (const dyn_array<T>& other) : dyn_array(other.data(), other.size()) {}
199- dyn_array (const T* ptr, uint32_t nof_items)
199+ dyn_array (const T* ptr, uint32_t nof_items) : size_(nof_items), cap_(nof_items)
200200 {
201- size_ = nof_items;
202- cap_ = nof_items ;
203- data_ = new T[cap_] ;
204- std::copy (ptr, ptr + size_, data_);
201+ if ( size_ > 0 ) {
202+ data_ = new T[cap_] ;
203+ std::copy (ptr, ptr + size_, data_) ;
204+ }
205205 }
206- ~dyn_array ()
206+ ~dyn_array () { delete[] data_; }
207+ uint32_t size () const { return size_; }
208+ uint32_t capacity () const { return cap_; }
209+ T& operator [](uint32_t idx)
207210 {
208- if (data_ != nullptr ) {
209- delete[] data_;
210- }
211+ srsran_assert (idx < size (), " out-of-bounds access to dyn_array ({} >= {})" , idx, size ());
212+ return data_[idx];
213+ }
214+ const T& operator [](uint32_t idx) const
215+ {
216+ srsran_assert (idx < size (), " out-of-bounds access to dyn_array ({} >= {})" , idx, size ());
217+ return data_[idx];
211218 }
212- uint32_t size () const { return size_; }
213- uint32_t capacity () const { return cap_; }
214- T& operator [](uint32_t idx) { return data_[idx]; }
215- const T& operator [](uint32_t idx) const { return data_[idx]; }
216219 dyn_array<T>& operator =(const dyn_array<T>& other)
217220 {
218221 if (this == &other) {
@@ -275,14 +278,14 @@ class dyn_array
275278 data_[size () - 1 ] = elem;
276279 }
277280 void clear () { resize (0 ); }
278- T& back () { return data_ [size () - 1 ]; }
279- const T& back () const { return data_ [size () - 1 ]; }
280- T* data () { return & data_[ 0 ] ; }
281- const T* data () const { return & data_[ 0 ] ; }
282- iterator begin () { return & data_[ 0 ] ; }
283- iterator end () { return & data_[ size ()] ; }
284- const_iterator begin () const { return & data_[ 0 ] ; }
285- const_iterator end () const { return & data_[ size ()] ; }
281+ T& back () { return (* this ) [size () - 1 ]; }
282+ const T& back () const { return (* this ) [size () - 1 ]; }
283+ T* data () { return data_; }
284+ const T* data () const { return data_; }
285+ iterator begin () { return data_; }
286+ iterator end () { return data_ + size (); }
287+ const_iterator begin () const { return data_; }
288+ const_iterator end () const { return data_ + size (); }
286289
287290private:
288291 T* data_ = nullptr ;
0 commit comments