From bcfcfbd0645d3c15bd56b48218e1ffd0e74c6c1f Mon Sep 17 00:00:00 2001 From: "Markus F.X.J. Oberhumer" Date: Sat, 8 Apr 2006 19:00:38 +0000 Subject: [PATCH] Added some more operators. committer: mfx 1144522838 +0000 --- src/bele.h | 18 ++++++++++++++++++ src/main.cpp | 2 ++ 2 files changed, 20 insertions(+) diff --git a/src/bele.h b/src/bele.h index e0491b72..b0cf0d4b 100644 --- a/src/bele.h +++ b/src/bele.h @@ -262,9 +262,12 @@ struct BE16 BE16& operator += (unsigned v) { set_be16(d, get_be16(d) + v); return *this; } BE16& operator -= (unsigned v) { set_be16(d, get_be16(d) - v); return *this; } BE16& operator *= (unsigned v) { set_be16(d, get_be16(d) * v); return *this; } + BE16& operator /= (unsigned v) { set_be16(d, get_be16(d) / v); return *this; } BE16& operator &= (unsigned v) { set_be16(d, get_be16(d) & v); return *this; } BE16& operator |= (unsigned v) { set_be16(d, get_be16(d) | v); return *this; } BE16& operator ^= (unsigned v) { set_be16(d, get_be16(d) ^ v); return *this; } + BE16& operator <<= (unsigned v) { set_be16(d, get_be16(d) << v); return *this; } + BE16& operator >>= (unsigned v) { set_be16(d, get_be16(d) >> v); return *this; } operator unsigned () const { return get_be16(d); } } @@ -279,9 +282,12 @@ struct BE32 BE32& operator += (unsigned v) { set_be32(d, get_be32(d) + v); return *this; } BE32& operator -= (unsigned v) { set_be32(d, get_be32(d) - v); return *this; } BE32& operator *= (unsigned v) { set_be32(d, get_be32(d) * v); return *this; } + BE32& operator /= (unsigned v) { set_be32(d, get_be32(d) / v); return *this; } BE32& operator &= (unsigned v) { set_be32(d, get_be32(d) & v); return *this; } BE32& operator |= (unsigned v) { set_be32(d, get_be32(d) | v); return *this; } BE32& operator ^= (unsigned v) { set_be32(d, get_be32(d) ^ v); return *this; } + BE32& operator <<= (unsigned v) { set_be32(d, get_be32(d) << v); return *this; } + BE32& operator >>= (unsigned v) { set_be32(d, get_be32(d) >> v); return *this; } operator unsigned () const { return get_be32(d); } } @@ -296,9 +302,12 @@ struct BE64 BE64& operator += (acc_uint64l_t v) { set_be64(d, get_be64(d) + v); return *this; } BE64& operator -= (acc_uint64l_t v) { set_be64(d, get_be64(d) - v); return *this; } BE64& operator *= (acc_uint64l_t v) { set_be64(d, get_be64(d) * v); return *this; } + BE64& operator /= (acc_uint64l_t v) { set_be64(d, get_be64(d) / v); return *this; } BE64& operator &= (acc_uint64l_t v) { set_be64(d, get_be64(d) & v); return *this; } BE64& operator |= (acc_uint64l_t v) { set_be64(d, get_be64(d) | v); return *this; } BE64& operator ^= (acc_uint64l_t v) { set_be64(d, get_be64(d) ^ v); return *this; } + BE64& operator <<= (unsigned v) { set_be64(d, get_be64(d) << v); return *this; } + BE64& operator >>= (unsigned v) { set_be64(d, get_be64(d) >> v); return *this; } operator acc_uint64l_t () const { return get_be64(d); } } @@ -313,9 +322,12 @@ struct LE16 LE16& operator += (unsigned v) { set_le16(d, get_le16(d) + v); return *this; } LE16& operator -= (unsigned v) { set_le16(d, get_le16(d) - v); return *this; } LE16& operator *= (unsigned v) { set_le16(d, get_le16(d) * v); return *this; } + LE16& operator /= (unsigned v) { set_le16(d, get_le16(d) / v); return *this; } LE16& operator &= (unsigned v) { set_le16(d, get_le16(d) & v); return *this; } LE16& operator |= (unsigned v) { set_le16(d, get_le16(d) | v); return *this; } LE16& operator ^= (unsigned v) { set_le16(d, get_le16(d) ^ v); return *this; } + LE16& operator <<= (unsigned v) { set_le16(d, get_le16(d) << v); return *this; } + LE16& operator >>= (unsigned v) { set_le16(d, get_le16(d) >> v); return *this; } operator unsigned () const { return get_le16(d); } } @@ -330,9 +342,12 @@ struct LE32 LE32& operator += (unsigned v) { set_le32(d, get_le32(d) + v); return *this; } LE32& operator -= (unsigned v) { set_le32(d, get_le32(d) - v); return *this; } LE32& operator *= (unsigned v) { set_le32(d, get_le32(d) * v); return *this; } + LE32& operator /= (unsigned v) { set_le32(d, get_le32(d) / v); return *this; } LE32& operator &= (unsigned v) { set_le32(d, get_le32(d) & v); return *this; } LE32& operator |= (unsigned v) { set_le32(d, get_le32(d) | v); return *this; } LE32& operator ^= (unsigned v) { set_le32(d, get_le32(d) ^ v); return *this; } + LE32& operator <<= (unsigned v) { set_le32(d, get_le32(d) << v); return *this; } + LE32& operator >>= (unsigned v) { set_le32(d, get_le32(d) >> v); return *this; } operator unsigned () const { return get_le32(d); } } @@ -347,9 +362,12 @@ struct LE64 LE64& operator += (acc_uint64l_t v) { set_le64(d, get_le64(d) + v); return *this; } LE64& operator -= (acc_uint64l_t v) { set_le64(d, get_le64(d) - v); return *this; } LE64& operator *= (acc_uint64l_t v) { set_le64(d, get_le64(d) * v); return *this; } + LE64& operator /= (acc_uint64l_t v) { set_le64(d, get_le64(d) / v); return *this; } LE64& operator &= (acc_uint64l_t v) { set_le64(d, get_le64(d) & v); return *this; } LE64& operator |= (acc_uint64l_t v) { set_le64(d, get_le64(d) | v); return *this; } LE64& operator ^= (acc_uint64l_t v) { set_le64(d, get_le64(d) ^ v); return *this; } + LE64& operator <<= (unsigned v) { set_le64(d, get_le64(d) << v); return *this; } + LE64& operator >>= (unsigned v) { set_le64(d, get_le64(d) >> v); return *this; } operator acc_uint64l_t () const { return get_le64(d); } } diff --git a/src/main.cpp b/src/main.cpp index 2bac5710..efe70943 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1070,6 +1070,8 @@ static int test(void) assert( (v1 < v2)); assert(!(v1 > v2)); v2 += 2; assert(v1 == 1); assert(v2 == 0); + v1 <<= 1; v1 |= v2; v1 >>= 1; v2 &= v1; v2 /= v1; v2 *= v1; + assert(v1 == 1); assert(v2 == 0); return (v1 ^ v2) == 1; }};