From a66598e0306fe80063c5d6a678bbca4a931bc4d4 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 8 May 2019 09:56:29 -0700 Subject: [PATCH] [iter] For ref-qualified variants --- src/hb-iter.hh | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/hb-iter.hh b/src/hb-iter.hh index a3390136c..dc4738928 100644 --- a/src/hb-iter.hh +++ b/src/hb-iter.hh @@ -97,10 +97,12 @@ struct hb_iter_t item_t operator * () { return thiz()->__item__ (); } item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); } item_t operator [] (unsigned i) { return thiz()->__item_at__ (i); } - iter_t& operator += (unsigned count) & { thiz()->__forward__ (count); return *thiz(); } + iter_t& operator += (unsigned count) & { thiz()->__forward__ (count); return *thiz(); } + iter_t operator += (unsigned count) && { thiz()->__forward__ (count); return *thiz(); } iter_t& operator ++ () & { thiz()->__next__ (); return *thiz(); } iter_t operator ++ () && { thiz()->__next__ (); return *thiz(); } - iter_t& operator -= (unsigned count) & { thiz()->__rewind__ (count); return *thiz(); } + iter_t& operator -= (unsigned count) & { thiz()->__rewind__ (count); return *thiz(); } + iter_t operator -= (unsigned count) && { thiz()->__rewind__ (count); return *thiz(); } iter_t& operator -- () & { thiz()->__prev__ (); return *thiz(); } iter_t operator -- () && { thiz()->__prev__ (); return *thiz(); } iter_t operator + (unsigned count) const { auto c = thiz()->iter (); c += count; return c; } @@ -109,9 +111,13 @@ struct hb_iter_t iter_t operator - (unsigned count) const { auto c = thiz()->iter (); c -= count; return c; } iter_t operator -- (int) { iter_t c (*thiz()); --*thiz(); return c; } template - iter_t& operator >> (T &v) & { v = **thiz(); ++*thiz(); return *thiz(); } + iter_t& operator >> (T &v) & { v = **thiz(); ++*thiz(); return *thiz(); } template - iter_t& operator << (const T v) & { **thiz() = v; ++*thiz(); return *thiz(); } + iter_t operator >> (T &v) && { v = **thiz(); ++*thiz(); return *thiz(); } + template + iter_t& operator << (const T v) & { **thiz() = v; ++*thiz(); return *thiz(); } + template + iter_t operator << (const T v) && { **thiz() = v; ++*thiz(); return *thiz(); } protected: hb_iter_t () {}