Browse Source

uORB::Publication*: template parameter automatically obtains the queue size according to the type

release/1.12
FengShun 4 years ago committed by Beat Küng
parent
commit
90c366f369
  1. 20
      src/modules/uORB/Publication.hpp
  2. 2
      src/modules/uORB/PublicationMulti.hpp

20
src/modules/uORB/Publication.hpp

@ -48,6 +48,24 @@ @@ -48,6 +48,24 @@
namespace uORB
{
template <typename U> class DefaultQueueSize
{
private:
template <typename T>
static constexpr uint8_t get_queue_size(decltype(T::ORB_QUEUE_LENGTH) *)
{
return T::ORB_QUEUE_LENGTH;
}
template <typename T> static constexpr uint8_t get_queue_size(...)
{
return 1;
}
public:
static constexpr unsigned value = get_queue_size<U>(nullptr);
};
class PublicationBase
{
public:
@ -79,7 +97,7 @@ protected: @@ -79,7 +97,7 @@ protected:
/**
* uORB publication wrapper class
*/
template<typename T, uint8_t ORB_QSIZE = 1>
template<typename T, uint8_t ORB_QSIZE = DefaultQueueSize<T>::value>
class Publication : public PublicationBase
{
public:

2
src/modules/uORB/PublicationMulti.hpp

@ -50,7 +50,7 @@ namespace uORB @@ -50,7 +50,7 @@ namespace uORB
/**
* Base publication multi wrapper class
*/
template<typename T, uint8_t QSIZE = 1>
template<typename T, uint8_t QSIZE = DefaultQueueSize<T>::value>
class PublicationMulti : public PublicationBase
{
public:

Loading…
Cancel
Save