Added the ability to add iterator ranges to packets
So, fr::Packet::add_range(std::begin(container), std::end(container));
This commit is contained in:
parent
2040540e94
commit
4207468ef0
@ -36,6 +36,13 @@ namespace fr
|
|||||||
add(part, std::forward<Args>(args)...);
|
add(part, std::forward<Args>(args)...);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Variadic add function for adding multiple values at once to the packet,
|
||||||
|
* used by packet constructor.
|
||||||
|
*
|
||||||
|
* @param part The first argument to add
|
||||||
|
* @param args The remaining arguments to add
|
||||||
|
*/
|
||||||
template<typename T, typename ...Args>
|
template<typename T, typename ...Args>
|
||||||
inline void add(T const& part, Args &&...args)
|
inline void add(T const& part, Args &&...args)
|
||||||
{
|
{
|
||||||
@ -43,12 +50,34 @@ namespace fr
|
|||||||
add(std::forward<Args>(args)...);
|
add(std::forward<Args>(args)...);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Part of the variadic add function.
|
||||||
|
*
|
||||||
|
* @param part The argument to add to the packet
|
||||||
|
*/
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline void add(T const &part)
|
inline void add(T const &part)
|
||||||
{
|
{
|
||||||
*this << part;
|
*this << part;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Add function to allow adding iterator ranges to the packet.
|
||||||
|
*
|
||||||
|
* @note std::distance() is used, and so this function should ideally be used with random access
|
||||||
|
* iterators to achieve constant time complexity.
|
||||||
|
* @tparam Iter The iterator type
|
||||||
|
* @param begin An iterator to the first element to add from
|
||||||
|
* @param end A past-the-end iterator to stop adding at
|
||||||
|
*/
|
||||||
|
template<typename Iter>
|
||||||
|
inline void add_range(Iter begin, Iter end)
|
||||||
|
{
|
||||||
|
*this << static_cast<uint64_t>(std::distance(begin, end));
|
||||||
|
for(auto iter = begin; iter != end; ++iter)
|
||||||
|
*this << *iter;
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Adds raw data to packet
|
* Adds raw data to packet
|
||||||
*
|
*
|
||||||
|
|||||||
@ -3,6 +3,32 @@
|
|||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <frnetlib/Packet.h>
|
#include <frnetlib/Packet.h>
|
||||||
|
|
||||||
|
TEST(PacketTest, range_add)
|
||||||
|
{
|
||||||
|
std::vector<int> var{1, 2, 3, 4, 5};
|
||||||
|
fr::Packet packet;
|
||||||
|
packet.add_range(var.begin(), var.end());
|
||||||
|
|
||||||
|
std::vector<int> out;
|
||||||
|
packet >> out;
|
||||||
|
ASSERT_EQ(var, out);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(PacketTest, double_range_add)
|
||||||
|
{
|
||||||
|
std::vector<int> var1{1, 2, 3, 4, 5};
|
||||||
|
std::vector<int> var2{6, 7, 8, 9, 10};
|
||||||
|
fr::Packet packet;
|
||||||
|
packet.add_range(var1.begin(), var1.end());
|
||||||
|
packet.add_range(var2.begin(), var2.end());
|
||||||
|
|
||||||
|
std::vector<int> out1;
|
||||||
|
std::vector<int> out2;
|
||||||
|
packet >> out1 >> out2;
|
||||||
|
ASSERT_EQ(var1, out1);
|
||||||
|
ASSERT_EQ(var2, out2);
|
||||||
|
}
|
||||||
|
|
||||||
TEST(PacketTest, pack_and_unpack_ints)
|
TEST(PacketTest, pack_and_unpack_ints)
|
||||||
{
|
{
|
||||||
fr::Packet packet;
|
fr::Packet packet;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user