Skip to content

Commit

Permalink
iox-eclipse-iceoryx#221 roll back receiver_handler receiverList to us…
Browse files Browse the repository at this point in the history
…e cxx::vector

Signed-off-by: Eickhoff Bernhard (CC-AD/ESW1) <bernhard.eickhoff@de.bosch.com>
  • Loading branch information
bishibashiB committed Sep 24, 2020
1 parent 6d36602 commit d7c5b59
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 33 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#include "iceoryx_posh/internal/mepoo/shared_chunk.hpp"
#include "iceoryx_posh/internal/popo/receiver_port.hpp"
#include "iceoryx_utils/cxx/list.hpp"
#include "iceoryx_utils/cxx/vector.hpp"
#include "iceoryx_utils/error_handling/error_handling.hpp"
#include "iceoryx_utils/internal/relocatable_pointer/relative_ptr.hpp"

Expand Down Expand Up @@ -53,7 +54,7 @@ class ReceiverHandler : public LockingPolicy
using this_type = ReceiverHandler_t;

public:
using ReceiverList_t = cxx::list<relative_ptr<ReceiverPortType::MemberType_t>, MaxReceivers>;
using ReceiverVector_t = cxx::vector<relative_ptr<ReceiverPortType::MemberType_t>, MaxReceivers>;
class AppContext
{
friend ReceiverHandler_t;
Expand All @@ -64,7 +65,7 @@ class ReceiverHandler : public LockingPolicy
void updateLastChunk(const mepoo::SharedChunk f_chunk);
bool hasReceivers();
void enableDoDeliverOnSubscription();
ReceiverList_t& getReceiverList() noexcept;
ReceiverVector_t& getReceiverList() noexcept;

private:
AppContext(ReceiverHandler_t& receiverHandler);
Expand Down Expand Up @@ -115,11 +116,11 @@ class ReceiverHandler : public LockingPolicy
bool doesDeliverOnSubscribe() const;
uint32_t getMaxDeliveryFiFoCapacity();
/// Returns the list of receivers
ReceiverList_t& getReceiverList() noexcept;
ReceiverVector_t& getReceiverList() noexcept;

private:
std::atomic_bool m_doDeliverOnSubscription{false};
ReceiverList_t m_receiverList;
ReceiverVector_t m_receiverVector;
mepoo::SharedChunk m_lastChunk{nullptr};
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ inline void ReceiverHandler<MaxReceivers, LockingPolicy>::AppContext::enableDoDe
}

template <uint32_t MaxReceivers, typename LockingPolicy>
inline typename ReceiverHandler<MaxReceivers, LockingPolicy>::ReceiverList_t&
inline typename ReceiverHandler<MaxReceivers, LockingPolicy>::ReceiverVector_t&
ReceiverHandler<MaxReceivers, LockingPolicy>::AppContext::getReceiverList() noexcept
{
return m_receiverHandler.getReceiverList();
Expand Down Expand Up @@ -110,24 +110,24 @@ template <uint32_t MaxReceivers, typename LockingPolicy>
inline bool ReceiverHandler<MaxReceivers, LockingPolicy>::hasReceivers()
{
lockGuard_t lock(*this);
return !m_receiverList.empty();
return !m_receiverVector.empty();
}

template <uint32_t MaxReceivers, typename LockingPolicy>
inline bool ReceiverHandler<MaxReceivers, LockingPolicy>::addNewReceiver(ReceiverPortType::MemberType_t* const receiver)
{
lockGuard_t lock(*this);
auto l_alreadyKnownReceiver =
std::find_if(m_receiverList.begin(), m_receiverList.end(), [&](ReceiverPortType::MemberType_t* receiverInList) {
return receiverInList == receiver;
});
std::find_if(m_receiverVector.begin(),
m_receiverVector.end(),
[&](ReceiverPortType::MemberType_t* receiverInList) { return receiverInList == receiver; });

// check if the receiver port is not yet subscribed
if (l_alreadyKnownReceiver == m_receiverList.end())
if (l_alreadyKnownReceiver == m_receiverVector.end())
{
if (m_receiverList.size() < m_receiverList.capacity())
if (m_receiverVector.size() < m_receiverVector.capacity())
{
m_receiverList.push_back(receiver);
m_receiverVector.push_back(receiver);

if (m_doDeliverOnSubscription.load(std::memory_order_relaxed))
{
Expand Down Expand Up @@ -156,18 +156,18 @@ template <uint32_t MaxReceivers, typename LockingPolicy>
inline void ReceiverHandler<MaxReceivers, LockingPolicy>::removeReceiver(ReceiverPortType::MemberType_t* const receiver)
{
lockGuard_t lock(*this);
auto l_iter = std::find(m_receiverList.begin(), m_receiverList.end(), receiver);
if (l_iter != m_receiverList.end())
auto l_iter = std::find(m_receiverVector.begin(), m_receiverVector.end(), receiver);
if (l_iter != m_receiverVector.end())
{
m_receiverList.erase(l_iter);
m_receiverVector.erase(l_iter);
}
}

template <uint32_t MaxReceivers, typename LockingPolicy>
inline void ReceiverHandler<MaxReceivers, LockingPolicy>::removeAll()
{
lockGuard_t lock(*this);
m_receiverList.clear();
m_receiverVector.clear();
}

template <uint32_t MaxReceivers, typename LockingPolicy>
Expand All @@ -183,10 +183,10 @@ inline bool ReceiverHandler<MaxReceivers, LockingPolicy>::doesDeliverOnSubscribe
}

template <uint32_t MaxReceivers, typename LockingPolicy>
inline typename ReceiverHandler<MaxReceivers, LockingPolicy>::ReceiverList_t&
inline typename ReceiverHandler<MaxReceivers, LockingPolicy>::ReceiverVector_t&
ReceiverHandler<MaxReceivers, LockingPolicy>::getReceiverList() noexcept
{
return m_receiverList;
return m_receiverVector;
}

template <uint32_t MaxReceivers, typename LockingPolicy>
Expand All @@ -196,7 +196,7 @@ inline uint32_t ReceiverHandler<MaxReceivers, LockingPolicy>::getMaxDeliveryFiFo

uint64_t maxDeliveryFiFoCapacity = 0u;

for (auto receiver : m_receiverList)
for (auto receiver : m_receiverVector)
{
ReceiverPort port(receiver);
auto deliveryFiFoCapacity = port.getDeliveryFiFoCapacity();
Expand Down
28 changes: 14 additions & 14 deletions iceoryx_posh/test/moduletests/test_roudi_shm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -136,8 +136,8 @@ TEST_F(PortManager_test, doDiscovery_singleShotSenderFirst)

m_shmManager->doDiscovery();

ASSERT_THAT(sender.getMembers()->m_receiverHandler.m_receiverList.size(), Eq(1u));
auto it = sender.getMembers()->m_receiverHandler.m_receiverList.begin();
ASSERT_THAT(sender.getMembers()->m_receiverHandler.m_receiverVector.size(), Eq(1u));
auto it = sender.getMembers()->m_receiverHandler.m_receiverVector.begin();

// is the correct receiver in the receiver list
EXPECT_THAT(iox::popo::ReceiverPort(*it).getMembers()->m_processName, Eq(receiver1.getMembers()->m_processName));
Expand All @@ -159,8 +159,8 @@ TEST_F(PortManager_test, doDiscovery_singleShotReceiverFirst)

m_shmManager->doDiscovery();

ASSERT_THAT(sender.getMembers()->m_receiverHandler.m_receiverList.size(), Eq(1u));
auto it = sender.getMembers()->m_receiverHandler.m_receiverList.begin();
ASSERT_THAT(sender.getMembers()->m_receiverHandler.m_receiverVector.size(), Eq(1u));
auto it = sender.getMembers()->m_receiverHandler.m_receiverVector.begin();

// is the correct receiver in the receiver list
EXPECT_THAT(iox::popo::ReceiverPort(*it).getMembers()->m_processName, Eq(receiver1.getMembers()->m_processName));
Expand All @@ -182,8 +182,8 @@ TEST_F(PortManager_test, doDiscovery_singleShotReceiverFirstWithDiscovery)

m_shmManager->doDiscovery();

ASSERT_THAT(sender.getMembers()->m_receiverHandler.m_receiverList.size(), Eq(1u));
auto it = sender.getMembers()->m_receiverHandler.m_receiverList.begin();
ASSERT_THAT(sender.getMembers()->m_receiverHandler.m_receiverVector.size(), Eq(1u));
auto it = sender.getMembers()->m_receiverHandler.m_receiverVector.begin();

// is the correct receiver in the receiver list
EXPECT_THAT(iox::popo::ReceiverPort(*it).getMembers()->m_processName, Eq(receiver1.getMembers()->m_processName));
Expand All @@ -209,8 +209,8 @@ TEST_F(PortManager_test, doDiscovery_rightOrdering)
m_shmManager->doDiscovery();

// check if all receivers are subscribed
ASSERT_THAT(sender.getMembers()->m_receiverHandler.m_receiverList.size(), Eq(2u));
auto it = sender.getMembers()->m_receiverHandler.m_receiverList.begin();
ASSERT_THAT(sender.getMembers()->m_receiverHandler.m_receiverVector.size(), Eq(2u));
auto it = sender.getMembers()->m_receiverHandler.m_receiverVector.begin();

// check if the receivers are in the right order
EXPECT_THAT(iox::popo::ReceiverPort(*it).getMembers()->m_processName, Eq(receiver1.getMembers()->m_processName));
Expand Down Expand Up @@ -365,10 +365,10 @@ TEST_F(PortManager_test, PortDestroy)

m_shmManager->doDiscovery();

ASSERT_THAT(sender1.getMembers()->m_receiverHandler.m_receiverList.size(), Eq(1u));
ASSERT_THAT(sender1.getMembers()->m_receiverHandler.m_receiverVector.size(), Eq(1u));
EXPECT_TRUE(receiver1.isSubscribed());

ASSERT_THAT(sender2.getMembers()->m_receiverHandler.m_receiverList.size(), Eq(1u));
ASSERT_THAT(sender2.getMembers()->m_receiverHandler.m_receiverVector.size(), Eq(1u));
EXPECT_TRUE(receiver1.isSubscribed());
}

Expand All @@ -388,7 +388,7 @@ TEST_F(PortManager_test, PortDestroy)

m_shmManager->doDiscovery();

ASSERT_THAT(sender1.getMembers()->m_receiverHandler.m_receiverList.size(), Eq(0u));
ASSERT_THAT(sender1.getMembers()->m_receiverHandler.m_receiverVector.size(), Eq(0u));
EXPECT_FALSE(receiver1.isSubscribed());
}

Expand All @@ -412,10 +412,10 @@ TEST_F(PortManager_test, PortDestroy)

m_shmManager->doDiscovery();

ASSERT_THAT(sender1.getMembers()->m_receiverHandler.m_receiverList.size(), Eq(1u));
ASSERT_THAT(sender1.getMembers()->m_receiverHandler.m_receiverVector.size(), Eq(1u));
EXPECT_TRUE(receiver1.isSubscribed());

ASSERT_THAT(sender2.getMembers()->m_receiverHandler.m_receiverList.size(), Eq(1u));
ASSERT_THAT(sender2.getMembers()->m_receiverHandler.m_receiverVector.size(), Eq(1u));
EXPECT_TRUE(receiver1.isSubscribed());
}

Expand All @@ -427,7 +427,7 @@ TEST_F(PortManager_test, PortDestroy)
ReceiverPort receiver1(receiverData1);
ASSERT_TRUE(receiver1);

ASSERT_THAT(sender1.getMembers()->m_receiverHandler.m_receiverList.size(), Eq(0u));
ASSERT_THAT(sender1.getMembers()->m_receiverHandler.m_receiverVector.size(), Eq(0u));
EXPECT_FALSE(receiver1.isSubscribed());
}
}

0 comments on commit d7c5b59

Please sign in to comment.