Browse Source

Merge #8850: Implement (begin|end)_ptr in C++11 and add deprecation comment

f00705a serialize: Deprecate `begin_ptr` / `end_ptr` (Wladimir J. van der Laan)
47314e6 prevector: add C++11-like data() method (Wladimir J. van der Laan)
0.14
Wladimir J. van der Laan 8 years ago
parent
commit
7dce175f5d
No known key found for this signature in database
GPG Key ID: 74810B012346C9A6
  1. 8
      src/prevector.h
  2. 19
      src/serialize.h

8
src/prevector.h

@ -475,6 +475,14 @@ public:
return ((size_t)(sizeof(T))) * _union.capacity; return ((size_t)(sizeof(T))) * _union.capacity;
} }
} }
value_type* data() {
return item_ptr(0);
}
const value_type* data() const {
return item_ptr(0);
}
}; };
#pragma pack(pop) #pragma pack(pop)

19
src/serialize.h

@ -45,32 +45,31 @@ inline T* NCONST_PTR(const T* val)
} }
/** /**
* Get begin pointer of vector (non-const version). * Important: Do not use the following functions in new code, but use v.data()
* @note These functions avoid the undefined case of indexing into an empty * and v.data() + v.size() respectively directly. They were once introduced to
* vector, as well as that of indexing after the end of the vector. * have a compatible, safe way to get the begin and end pointer of a vector.
* However with C++11 the language has built-in functionality for this and it's
* more readable to just use that.
*/ */
template <typename V> template <typename V>
inline typename V::value_type* begin_ptr(V& v) inline typename V::value_type* begin_ptr(V& v)
{ {
return v.empty() ? NULL : &v[0]; return v.data();
} }
/** Get begin pointer of vector (const version) */
template <typename V> template <typename V>
inline const typename V::value_type* begin_ptr(const V& v) inline const typename V::value_type* begin_ptr(const V& v)
{ {
return v.empty() ? NULL : &v[0]; return v.data();
} }
/** Get end pointer of vector (non-const version) */
template <typename V> template <typename V>
inline typename V::value_type* end_ptr(V& v) inline typename V::value_type* end_ptr(V& v)
{ {
return v.empty() ? NULL : (&v[0] + v.size()); return v.data() + v.size();
} }
/** Get end pointer of vector (const version) */
template <typename V> template <typename V>
inline const typename V::value_type* end_ptr(const V& v) inline const typename V::value_type* end_ptr(const V& v)
{ {
return v.empty() ? NULL : (&v[0] + v.size()); return v.data() + v.size();
} }
/* /*

Loading…
Cancel
Save