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)
This commit is contained in:
commit
7dce175f5d
2 changed files with 18 additions and 11 deletions
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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…
Reference in a new issue