From 0acf1b976b2303361df0a0ffed4e29d4783b0495 Mon Sep 17 00:00:00 2001 From: Pavel Kirienko Date: Tue, 11 Feb 2014 21:44:43 +0400 Subject: [PATCH] Explicit specialization for empty TransferBuffer (for single frame transfers) --- .../internal/transport/transfer_buffer.hpp | 33 ++++++++++++++++++- libuavcan/test/transport/transfer_buffer.cpp | 8 +++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/libuavcan/include/uavcan/internal/transport/transfer_buffer.hpp b/libuavcan/include/uavcan/internal/transport/transfer_buffer.hpp index b2f39faa2e..3fb166bf6a 100644 --- a/libuavcan/include/uavcan/internal/transport/transfer_buffer.hpp +++ b/libuavcan/include/uavcan/internal/transport/transfer_buffer.hpp @@ -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; + } +}; + } diff --git a/libuavcan/test/transport/transfer_buffer.cpp b/libuavcan/test/transport/transfer_buffer.cpp index 6107fb783e..8c9e1278c7 100644 --- a/libuavcan/test/transport/transfer_buffer.cpp +++ b/libuavcan/test/transport/transfer_buffer.cpp @@ -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)); +}