summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Prichard <rprichard@google.com>2024-04-11 23:49:11 -0700
committerRyan Prichard <rprichard@google.com>2024-04-11 23:58:51 -0700
commit3197026bd43da24cd8ae407b4d115abfa68a7472 (patch)
treef45f23c45b2bd856e4520a521200d9a0ddd1cb08
parentf78d7657247637157e7b66c74abb6ec366783380 (diff)
downloadlibhidl-3197026bd43da24cd8ae407b4d115abfa68a7472.tar.gz
hidl_vec::iter: don't inherit from std::iterator
std::iterator is deprecated in C++17 and this usage generates ~900 warnings after upgrading libc++. Bug: 333165689 Test: apply topic:use-prebuilt-libcxx and build Android Change-Id: I7cec8b1c11242de1cbbcd52b2d949d8fed0ae98a
-rw-r--r--base/include/hidl/HidlSupport.h39
1 files changed, 17 insertions, 22 deletions
diff --git a/base/include/hidl/HidlSupport.h b/base/include/hidl/HidlSupport.h
index 1bb38e8..de01970 100644
--- a/base/include/hidl/HidlSupport.h
+++ b/base/include/hidl/HidlSupport.h
@@ -532,40 +532,35 @@ struct hidl_vec {
private:
// Define std interator interface for walking the array contents
template<bool is_const>
- class iter : public std::iterator<
- std::random_access_iterator_tag, /* Category */
- T,
- ptrdiff_t, /* Distance */
- typename std::conditional<is_const, const T *, T *>::type /* Pointer */,
- typename std::conditional<is_const, const T &, T &>::type /* Reference */>
- {
- using traits = std::iterator_traits<iter>;
- using ptr_type = typename traits::pointer;
- using ref_type = typename traits::reference;
- using diff_type = typename traits::difference_type;
+ class iter {
public:
- iter(ptr_type ptr) : mPtr(ptr) { }
+ using iterator_category = std::random_access_iterator_tag;
+ using value_type = T;
+ using difference_type = ptrdiff_t;
+ using pointer = std::conditional_t<is_const, const T *, T *>;
+ using reference = std::conditional_t<is_const, const T &, T &>;
+ iter(pointer ptr) : mPtr(ptr) { }
inline iter &operator++() { mPtr++; return *this; }
inline iter operator++(int) { iter i = *this; mPtr++; return i; }
inline iter &operator--() { mPtr--; return *this; }
inline iter operator--(int) { iter i = *this; mPtr--; return i; }
- inline friend iter operator+(diff_type n, const iter &it) { return it.mPtr + n; }
- inline iter operator+(diff_type n) const { return mPtr + n; }
- inline iter operator-(diff_type n) const { return mPtr - n; }
- inline diff_type operator-(const iter &other) const { return mPtr - other.mPtr; }
- inline iter &operator+=(diff_type n) { mPtr += n; return *this; }
- inline iter &operator-=(diff_type n) { mPtr -= n; return *this; }
- inline ref_type operator*() const { return *mPtr; }
- inline ptr_type operator->() const { return mPtr; }
+ inline friend iter operator+(difference_type n, const iter &it) { return it.mPtr + n; }
+ inline iter operator+(difference_type n) const { return mPtr + n; }
+ inline iter operator-(difference_type n) const { return mPtr - n; }
+ inline difference_type operator-(const iter &other) const { return mPtr - other.mPtr; }
+ inline iter &operator+=(difference_type n) { mPtr += n; return *this; }
+ inline iter &operator-=(difference_type n) { mPtr -= n; return *this; }
+ inline reference operator*() const { return *mPtr; }
+ inline pointer operator->() const { return mPtr; }
inline bool operator==(const iter &rhs) const { return mPtr == rhs.mPtr; }
inline bool operator!=(const iter &rhs) const { return mPtr != rhs.mPtr; }
inline bool operator< (const iter &rhs) const { return mPtr < rhs.mPtr; }
inline bool operator> (const iter &rhs) const { return mPtr > rhs.mPtr; }
inline bool operator<=(const iter &rhs) const { return mPtr <= rhs.mPtr; }
inline bool operator>=(const iter &rhs) const { return mPtr >= rhs.mPtr; }
- inline ref_type operator[](size_t n) const { return mPtr[n]; }
+ inline reference operator[](size_t n) const { return mPtr[n]; }
private:
- ptr_type mPtr;
+ pointer mPtr;
};
public:
using iterator = iter<false /* is_const */>;