Fixed array MaxBitLen

This commit is contained in:
Pavel Kirienko
2014-02-24 21:15:03 +04:00
parent 01b45c892d
commit 2b8996b82c
2 changed files with 11 additions and 1 deletions
@@ -21,6 +21,7 @@ template <unsigned int Size>
class StaticArrayBase
{
public:
enum { SizeBitLen = 0 };
typedef unsigned int SizeType;
SizeType size() const { return Size; }
SizeType capacity() const { return Size; }
@@ -85,6 +86,8 @@ protected:
}
public:
enum { SizeBitLen = RawSizeType::BitLen };
SizeType size() const
{
assert(size_ ? ((size_ - 1u) <= (MaxSize - 1u)) : 1); // -Werror=type-limits
@@ -212,7 +215,7 @@ public:
enum { IsDynamic = ArrayMode == ArrayModeDynamic };
enum { MaxSize = MaxSize_ };
enum { MinBitLen = IsDynamic ? 0 : (RawValueType::MinBitLen * MaxSize) };
enum { MaxBitLen = RawValueType::MaxBitLen * MaxSize };
enum { MaxBitLen = (RawValueType::MaxBitLen * MaxSize) + (IsDynamic ? Base::SizeBitLen : 0) };
static int encode(const SelfType& array, ScalarCodec& codec)
{
+7
View File
@@ -99,6 +99,10 @@ TEST(Array, Basic)
ASSERT_EQ(1, A3::ValueType::C::RawValueType::BitLen);
ASSERT_EQ(8 * 4, A1::MaxBitLen);
ASSERT_EQ(16 * 2, A2::MaxBitLen);
ASSERT_EQ((8 + 16 + 5 + 3) * 2, A3::MaxBitLen);
/*
* Zero initialization check
*/
@@ -249,6 +253,9 @@ TEST(Array, Dynamic)
A a;
B b;
ASSERT_EQ(3 + 5, A::MaxBitLen);
ASSERT_EQ(8 + 255 * 8, B::MaxBitLen);
ASSERT_TRUE(a.empty());
ASSERT_TRUE(b.empty());