Skip to content

Commit f96a6de

Browse files
committed
Make advance use two template arguments, like std::advance
1 parent 0791335 commit f96a6de

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

uutility.h

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -106,29 +106,34 @@ template <typename T>
106106
inline constexpr T& NullValue (void)
107107
{ return (*NullPointer<T>()); }
108108

109-
/// Offsets an iterator
109+
#ifndef DOXYGEN_SHOULD_SKIP_THIS
110+
// Offsets a pointer
110111
template <typename T>
111-
inline T advance (T i, ssize_t offset)
112+
inline T advance_ptr (T i, ptrdiff_t offset)
112113
{ return (i + offset); }
113114

114-
#ifndef DOXYGEN_SHOULD_SKIP_THIS
115-
/// Offsets a void pointer
115+
// Offsets a void pointer
116116
template <>
117-
inline const void* advance (const void* p, ssize_t offset)
117+
inline const void* advance_ptr (const void* p, ptrdiff_t offset)
118118
{
119119
assert (p || !offset);
120120
return (reinterpret_cast<const uint8_t*>(p) + offset);
121121
}
122122

123-
/// Offsets a void pointer
123+
// Offsets a void pointer
124124
template <>
125-
inline void* advance (void* p, ssize_t offset)
125+
inline void* advance_ptr (void* p, ptrdiff_t offset)
126126
{
127127
assert (p || !offset);
128128
return (reinterpret_cast<uint8_t*>(p) + offset);
129129
}
130130
#endif
131131

132+
/// Offsets an iterator
133+
template <typename T, typename Distance>
134+
inline T advance (T i, Distance offset)
135+
{ return (advance_ptr (i, offset)); }
136+
132137
/// Returns the difference \p p1 - \p p2
133138
template <typename T1, typename T2>
134139
inline constexpr ptrdiff_t distance (T1 i1, T2 i2)

0 commit comments

Comments
 (0)