Renamed IntegerInfo to IntegerSpec, few minor naming fixes

This commit is contained in:
Pavel Kirienko
2014-02-22 11:00:42 +04:00
parent 0e28a0826c
commit ac2a31b087
4 changed files with 52 additions and 35 deletions
@@ -0,0 +1,12 @@
/*
* Copyright (C) 2014 Pavel Kirienko <pavel.kirienko@gmail.com>
*/
#pragma once
namespace uavcan
{
enum CastMode { CastModeSaturate, CastModeTruncate };
}
@@ -8,7 +8,7 @@
#include <limits>
#include <uavcan/internal/util.hpp>
#include <uavcan/internal/marshalling/scalar_codec.hpp>
#include <uavcan/internal/marshalling/types.hpp>
#include <uavcan/internal/marshalling/cast_mode.hpp>
namespace uavcan
{
@@ -16,7 +16,7 @@ namespace uavcan
enum Signedness { SignednessUnsigned, SignednessSigned };
template <unsigned int BitLen_, Signedness Signedness, CastMode CastMode>
class IntegerInfo
class IntegerSpec
{
enum { IsSigned = Signedness == SignednessSigned };
@@ -32,9 +32,9 @@ public:
ErrorNoSuchInteger>::Result>::Result>::Result>::Result StorageType;
private:
typedef typename IntegerInfo<BitLen, SignednessUnsigned, CastMode>::StorageType UnsignedStorageType;
typedef typename IntegerSpec<BitLen, SignednessUnsigned, CastMode>::StorageType UnsignedStorageType;
IntegerInfo() { }
IntegerSpec() { }
struct ExactSizeLimits
{
@@ -98,6 +98,6 @@ public:
};
template <CastMode CastMode>
class IntegerInfo<1, SignednessSigned, CastMode>; // Invalid instantiation
class IntegerSpec<1, SignednessSigned, CastMode>; // Invalid instantiation
}
@@ -5,20 +5,24 @@
#pragma once
#include <uavcan/internal/util.hpp>
#include <uavcan/internal/marshalling/scalar_codec.hpp>
#include <uavcan/internal/marshalling/integer_spec.hpp>
namespace uavcan
{
enum CastMode { CastModeSaturate, CastModeTruncate };
template <typename T, typename Enable = void>
struct AddStorageTypeImpl { typedef T StorageType; };
struct StorageTypeImpl { typedef T StorageType; };
template <typename T>
struct AddStorageTypeImpl<T, typename EnableIfType<typename T::StorageType>::Type> { };
struct StorageTypeImpl<T, typename EnableIfType<typename T::StorageType>::Type>
{
typedef typename T::StorageType Type;
};
template <typename T>
struct AddStorageType : public T, public AddStorageTypeImpl<T> { };
struct StorageType : public T
{
typedef typename StorageTypeImpl<T>::Type Type;
};
}
@@ -3,24 +3,25 @@
*/
#include <gtest/gtest.h>
#include <uavcan/internal/marshalling/integer.hpp>
#include <uavcan/internal/marshalling/integer_spec.hpp>
#include <uavcan/internal/marshalling/types.hpp>
TEST(Integer, Limits)
{
using uavcan::IntegerInfo;
using uavcan::IntegerSpec;
using uavcan::SignednessSigned;
using uavcan::SignednessUnsigned;
using uavcan::CastModeSaturate;
using uavcan::CastModeTruncate;
typedef IntegerInfo<8, SignednessUnsigned, CastModeSaturate> UInt8;
typedef IntegerInfo<4, SignednessSigned, CastModeTruncate> SInt4;
typedef IntegerInfo<32, SignednessUnsigned, CastModeTruncate> UInt32;
typedef IntegerInfo<40, SignednessUnsigned, CastModeSaturate> UInt40;
typedef IntegerInfo<64, SignednessUnsigned, CastModeTruncate> UInt64;
typedef IntegerInfo<64, SignednessSigned, CastModeSaturate> SInt64;
typedef IntegerInfo<63, SignednessUnsigned, CastModeSaturate> UInt63;
typedef IntegerSpec<8, SignednessUnsigned, CastModeSaturate> UInt8;
typedef IntegerSpec<4, SignednessSigned, CastModeTruncate> SInt4;
typedef IntegerSpec<32, SignednessUnsigned, CastModeTruncate> UInt32;
typedef IntegerSpec<40, SignednessUnsigned, CastModeSaturate> UInt40;
typedef IntegerSpec<64, SignednessUnsigned, CastModeTruncate> UInt64;
typedef IntegerSpec<64, SignednessSigned, CastModeSaturate> SInt64;
typedef IntegerSpec<63, SignednessUnsigned, CastModeSaturate> UInt63;
ASSERT_EQ(255, UInt8::max());
ASSERT_EQ(0, UInt8::min());
@@ -49,26 +50,26 @@ TEST(Integer, Limits)
TEST(Integer, Basic)
{
using uavcan::IntegerInfo;
using uavcan::IntegerSpec;
using uavcan::SignednessSigned;
using uavcan::SignednessUnsigned;
using uavcan::CastModeSaturate;
using uavcan::CastModeTruncate;
using uavcan::AddStorageType;
using uavcan::StorageType;
uavcan::StaticTransferBuffer<100> buf;
uavcan::BitStream bs_wr(buf);
uavcan::ScalarCodec sc_wr(bs_wr);
typedef AddStorageType<IntegerInfo<8, SignednessUnsigned, CastModeSaturate> > UInt8S;
typedef AddStorageType<IntegerInfo<4, SignednessSigned, CastModeTruncate> > SInt4T;
typedef AddStorageType<IntegerInfo<32, SignednessUnsigned, CastModeTruncate> > UInt32T;
typedef AddStorageType<IntegerInfo<40, SignednessUnsigned, CastModeSaturate> > UInt40S;
typedef AddStorageType<IntegerInfo<64, SignednessUnsigned, CastModeTruncate> > UInt64T;
typedef AddStorageType<IntegerInfo<58, SignednessSigned, CastModeSaturate> > SInt58S;
typedef AddStorageType<IntegerInfo<63, SignednessUnsigned, CastModeSaturate> > UInt63S;
typedef AddStorageType<IntegerInfo<10, SignednessSigned, CastModeSaturate> > SInt10S;
typedef AddStorageType<IntegerInfo<1, SignednessUnsigned, CastModeSaturate> > UInt1S;
typedef IntegerSpec<8, SignednessUnsigned, CastModeSaturate> UInt8S;
typedef IntegerSpec<4, SignednessSigned, CastModeTruncate> SInt4T;
typedef IntegerSpec<32, SignednessUnsigned, CastModeTruncate> UInt32T;
typedef IntegerSpec<40, SignednessUnsigned, CastModeSaturate> UInt40S;
typedef IntegerSpec<64, SignednessUnsigned, CastModeTruncate> UInt64T;
typedef IntegerSpec<58, SignednessSigned, CastModeSaturate> SInt58S;
typedef IntegerSpec<63, SignednessUnsigned, CastModeSaturate> UInt63S;
typedef IntegerSpec<10, SignednessSigned, CastModeSaturate> SInt10S;
typedef IntegerSpec<1, SignednessUnsigned, CastModeSaturate> UInt1S;
ASSERT_EQ(1, UInt8S::encode(UInt8S::StorageType(123), sc_wr));
ASSERT_EQ(1, SInt4T::encode(SInt4T::StorageType(-0x44), sc_wr));
@@ -85,10 +86,10 @@ TEST(Integer, Basic)
uavcan::BitStream bs_rd(buf);
uavcan::ScalarCodec sc_rd(bs_rd);
#define CHECK(Type, expected_value) \
#define CHECK(IntType, expected_value) \
do { \
Type::StorageType var(Type::init()); \
ASSERT_EQ(1, Type::decode(var, sc_rd)); \
StorageType<IntType>::Type var(IntType::init()); \
ASSERT_EQ(1, IntType::decode(var, sc_rd)); \
ASSERT_EQ(expected_value, var); \
} while (0)
@@ -104,6 +105,6 @@ TEST(Integer, Basic)
#undef CHECK
UInt1S::StorageType var;
StorageType<UInt1S>::Type var;
ASSERT_EQ(0, UInt1S::decode(var, sc_rd));
}