[array] Add arithmetic operators
diff --git a/src/hb-array.hh b/src/hb-array.hh
index ae8d2d7..959f103 100644
--- a/src/hb-array.hh
+++ b/src/hb-array.hh
@@ -60,12 +60,9 @@
}
explicit_operator bool (void) const { return len; }
-
- template <typename T> operator T * (void) const { return arrayZ; }
-
Type * operator & (void) const { return arrayZ; }
-
Type & operator * (void) { return (this->operator [])[0]; }
+ template <typename T> operator T * (void) const { return arrayZ; }
hb_array_t<Type> & operator += (unsigned int count)
{
@@ -75,6 +72,23 @@
arrayZ += count;
return *this;
}
+ hb_array_t<Type> & operator -= (unsigned int count)
+ {
+ if (unlikely (count > len))
+ count = len;
+ len -= count;
+ return *this;
+ }
+ hb_array_t<Type> & operator ++ (void) { *this += 1; }
+ hb_array_t<Type> & operator -- (void) { *this -= 1; }
+ hb_array_t<Type> operator + (unsigned int count)
+ { hb_array_t<Type> copy (*this); *this += count; return copy; }
+ hb_array_t<Type> operator - (unsigned int count)
+ { hb_array_t<Type> copy (*this); *this -= count; return copy; }
+ hb_array_t<Type> operator ++ (int)
+ { hb_array_t<Type> copy (*this); ++*this; return copy; }
+ hb_array_t<Type> operator -- (int)
+ { hb_array_t<Type> copy (*this); --*this; return copy; }
/*
* Compare, Sort, and Search.