Explicit specialization for empty TransferBuffer (for single frame transfers)

This commit is contained in:
Pavel Kirienko 2014-02-11 21:44:43 +04:00
parent 5be2801fa1
commit 0acf1b976b
2 changed files with 40 additions and 1 deletions

View File

@ -335,7 +335,11 @@ class TransferBufferManager : public ITransferBufferManager, Noncopyable
public:
TransferBufferManager(IAllocator* allocator)
: allocator_(allocator)
{ }
{
assert(allocator);
StaticAssert<(MAX_BUF_SIZE > 0)>::check();
StaticAssert<(NUM_STATIC_BUFS > 0)>::check();
}
~TransferBufferManager()
{
@ -425,4 +429,31 @@ public:
}
};
template <>
class TransferBufferManager<0, 0> : public ITransferBufferManager
{
public:
TransferBufferManager(IAllocator* allocator)
{
(void)allocator;
}
TransferBufferBase* access(const TransferBufferManagerKey& key)
{
(void)key;
return NULL;
}
TransferBufferBase* create(const TransferBufferManagerKey& key)
{
(void)key;
return NULL;
}
void remove(const TransferBufferManagerKey& key)
{
(void)key;
}
};
}

View File

@ -338,3 +338,11 @@ TEST(TransferBufferManager, Basic)
mgr.reset();
ASSERT_EQ(0, pool.getNumUsedBlocks());
}
TEST(TransferBufferManager, EmptySpecialization)
{
uavcan::TransferBufferManager<0, 0> mgr(NULL);
(void)mgr;
ASSERT_GE(sizeof(void*), sizeof(mgr));
}