From fe7aa77ae0686a8f42d2b7fdb86582de9e02b0d5 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Mon, 7 Jan 2013 09:53:34 +0000 Subject: git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@5038 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/various/cpp_wrappers/ch.hpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'os/various/cpp_wrappers') diff --git a/os/various/cpp_wrappers/ch.hpp b/os/various/cpp_wrappers/ch.hpp index e92fbcc9e..d565cbb77 100644 --- a/os/various/cpp_wrappers/ch.hpp +++ b/os/various/cpp_wrappers/ch.hpp @@ -2128,23 +2128,29 @@ namespace chibios_rt { }; /*------------------------------------------------------------------------* - * chibios_rt::MemoryPool * + * chibios_rt::ObjectsPool * *------------------------------------------------------------------------*/ /** - * @brief Template class encapsulating a mailbox and its elements. + * @brief Template class encapsulating a memory pool and its elements. */ template - class MemoryPoolBuffer : public MemoryPool { + class ObjectsPool : public MemoryPool { private: - T pool_buf[N]; + /* The buffer is declared as an array of pointers to void for two + reasons: + 1) The objects must be properly aligned to hold a pointer as + first field. + 2) There is no need to invoke constructors for object that are + into the pool.*/ + void *pool_buf[(N * sizeof (T)) / sizeof (void *)]; public: /** - * @brief MemoryPoolBuffer constructor. + * @brief ObjectsPool constructor. * * @init */ - MemoryPoolBuffer(void) : MemoryPool(sizeof (T), NULL) { + ObjectsPool(void) : MemoryPool(sizeof (T), NULL) { loadArray(pool_buf, N); } -- cgit v1.2.3