Add support for extracting std::vector<bool> from packets
This commit is contained in:
parent
2c771fa46e
commit
7343529302
@ -42,7 +42,7 @@ add_definitions(-Dntodh)
|
||||
set( INCLUDE_PATH "${PROJECT_SOURCE_DIR}/include" )
|
||||
set( SOURCE_PATH "${PROJECT_SOURCE_DIR}/src" )
|
||||
|
||||
set(SOURCE_FILES ${SOURCE_FILES} main.cpp src/TcpSocket.cpp include/frnetlib/TcpSocket.h src/TcpListener.cpp include/frnetlib/TcpListener.h src/Socket.cpp include/frnetlib/Socket.h src/Packet.cpp include/frnetlib/Packet.h include/frnetlib/NetworkEncoding.h src/SocketSelector.cpp include/frnetlib/SocketSelector.h src/HttpRequest.cpp include/frnetlib/HttpRequest.h src/HttpResponse.cpp include/frnetlib/HttpResponse.h src/Http.cpp include/frnetlib/Http.h include/frnetlib/Packetable.h include/frnetlib/Listener.h src/URL.cpp include/frnetlib/URL.h include/frnetlib/Sendable.h include/frnetlib/version.h include/frnetlib/SocketDescriptor.h)
|
||||
set(SOURCE_FILES ${SOURCE_FILES} main.cpp src/TcpSocket.cpp include/frnetlib/TcpSocket.h src/TcpListener.cpp include/frnetlib/TcpListener.h src/Socket.cpp include/frnetlib/Socket.h include/frnetlib/Packet.h include/frnetlib/NetworkEncoding.h src/SocketSelector.cpp include/frnetlib/SocketSelector.h src/HttpRequest.cpp include/frnetlib/HttpRequest.h src/HttpResponse.cpp include/frnetlib/HttpResponse.h src/Http.cpp include/frnetlib/Http.h include/frnetlib/Packetable.h include/frnetlib/Listener.h src/URL.cpp include/frnetlib/URL.h include/frnetlib/Sendable.h include/frnetlib/version.h include/frnetlib/SocketDescriptor.h)
|
||||
|
||||
include_directories(include)
|
||||
set(CORE_CXX_FLAGS "${CORE_CXX_FLAGS} -std=c++14 -Wall")
|
||||
|
||||
@ -136,11 +136,10 @@ namespace fr
|
||||
vec.resize(length);
|
||||
|
||||
//Now take each of the elements out of the packet
|
||||
for(uint32_t a = 0; a < length; a++)
|
||||
for(auto &&iter : vec)
|
||||
{
|
||||
*this >> vec[a];
|
||||
*this >> iter;
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
@ -437,6 +436,7 @@ namespace fr
|
||||
template<typename T, typename std::enable_if<std::is_enum<T>::value>::type* = nullptr>
|
||||
inline Packet &operator<<(T var)
|
||||
{
|
||||
static_assert(sizeof(typename std::underlying_type<T>::type) <= 4, "Enum types must not be larger than 32bits");
|
||||
*this << (uint32_t)static_cast<typename std::underlying_type<T>::type>(var);
|
||||
return *this;
|
||||
}
|
||||
@ -452,6 +452,7 @@ namespace fr
|
||||
template<typename T, typename std::enable_if<std::is_enum<T>::value>::type* = nullptr>
|
||||
inline Packet &operator>>(T &var)
|
||||
{
|
||||
static_assert(sizeof(typename std::underlying_type<T>::type) <= 4, "Enum types must not be larger than 32bits");
|
||||
uint32_t val;
|
||||
*this >> val;
|
||||
var = static_cast<T>(val);
|
||||
@ -516,17 +517,6 @@ namespace fr
|
||||
return *this;
|
||||
}
|
||||
|
||||
/*
|
||||
* Adds a char array
|
||||
*/
|
||||
inline Packet &operator<<(const char *var)
|
||||
{
|
||||
auto len = (uint32_t)strlen(var);
|
||||
*this << len;
|
||||
buffer.append(var, len);
|
||||
return *this;
|
||||
}
|
||||
|
||||
/*
|
||||
* Removes a string variable from the packet
|
||||
*/
|
||||
@ -541,6 +531,29 @@ namespace fr
|
||||
return *this;
|
||||
}
|
||||
|
||||
/*
|
||||
* Removes a boolean from the packet into a reference
|
||||
*/
|
||||
inline Packet&operator>>(std::vector<bool>::reference &ref)
|
||||
{
|
||||
bool b;
|
||||
*this >> b;
|
||||
ref = b;
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Adds a char array
|
||||
*/
|
||||
inline Packet &operator<<(const char *var)
|
||||
{
|
||||
auto len = (uint32_t)strlen(var);
|
||||
*this << len;
|
||||
buffer.append(var, len);
|
||||
return *this;
|
||||
}
|
||||
|
||||
/*!
|
||||
* Should be called to pack an object that inherits
|
||||
* fr::Packetable to the packet.
|
||||
|
||||
@ -1,8 +0,0 @@
|
||||
//
|
||||
// Created by fred on 06/12/16.
|
||||
//
|
||||
|
||||
namespace fr
|
||||
{
|
||||
|
||||
}
|
||||
@ -29,6 +29,16 @@ TEST(PacketTest, double_range_add)
|
||||
ASSERT_EQ(var2, out2);
|
||||
}
|
||||
|
||||
TEST(PacketTest, pack_vector_bool)
|
||||
{
|
||||
std::vector<bool> my_vec{true, false, true};
|
||||
std::vector<bool> my_vec2;
|
||||
fr::Packet packet;
|
||||
packet << my_vec;
|
||||
packet >> my_vec2;
|
||||
ASSERT_EQ(my_vec, my_vec2);
|
||||
}
|
||||
|
||||
TEST(PacketTest, pack_and_unpack_ints)
|
||||
{
|
||||
fr::Packet packet;
|
||||
@ -168,7 +178,7 @@ TEST(PacketTest, clear)
|
||||
a = 20;
|
||||
packet << a;
|
||||
packet >> b;
|
||||
ASSERT_EQ(b, 20);
|
||||
ASSERT_TRUE(b == 20);
|
||||
}
|
||||
|
||||
TEST(PacketTest, test_assert_bytes_remaining)
|
||||
@ -186,44 +196,44 @@ TEST(PacketTest, test_size)
|
||||
{
|
||||
uint32_t val = 30;
|
||||
fr::Packet packet;
|
||||
ASSERT_EQ(packet.size(), 0);
|
||||
ASSERT_EQ(packet.size(), 0u);
|
||||
packet << val;
|
||||
ASSERT_EQ(packet.size(), 4);
|
||||
ASSERT_EQ(packet.size(), 4u);
|
||||
packet >> val;
|
||||
ASSERT_EQ(packet.size(), 4);
|
||||
ASSERT_EQ(packet.size(), 4u);
|
||||
}
|
||||
|
||||
TEST(PacketTest, test_get_bytes_remaining)
|
||||
{
|
||||
uint32_t val = 30;
|
||||
fr::Packet packet;
|
||||
ASSERT_EQ(packet.get_bytes_remaining(), 0);
|
||||
ASSERT_EQ(packet.get_bytes_remaining(), 0u);
|
||||
packet << val;
|
||||
ASSERT_EQ(packet.get_bytes_remaining(), 4);
|
||||
ASSERT_EQ(packet.get_bytes_remaining(), 4u);
|
||||
|
||||
uint16_t out;
|
||||
packet >> out;
|
||||
ASSERT_EQ(packet.get_bytes_remaining(), 2);
|
||||
ASSERT_EQ(packet.get_bytes_remaining(), 2u);
|
||||
|
||||
packet.clear();
|
||||
ASSERT_EQ(packet.get_bytes_remaining(), 0);
|
||||
ASSERT_EQ(packet.get_bytes_remaining(), 0u);
|
||||
}
|
||||
|
||||
TEST(PacketTest, test_get_cursor)
|
||||
{
|
||||
uint32_t val = 0;
|
||||
fr::Packet packet;
|
||||
ASSERT_EQ(packet.get_cursor(), 0);
|
||||
ASSERT_EQ(packet.get_cursor(), 0u);
|
||||
packet << val << val;
|
||||
ASSERT_EQ(packet.get_cursor(), 0);
|
||||
ASSERT_EQ(packet.get_cursor(), 0u);
|
||||
packet >> val;
|
||||
ASSERT_EQ(packet.get_cursor(), 4);
|
||||
ASSERT_EQ(packet.get_cursor(), 4u);
|
||||
packet >> val;
|
||||
ASSERT_EQ(packet.get_cursor(), 8);
|
||||
ASSERT_EQ(packet.get_cursor(), 8u);
|
||||
packet.set_cursor(4);
|
||||
ASSERT_EQ(packet.get_cursor(), 4);
|
||||
ASSERT_EQ(packet.get_cursor(), 4u);
|
||||
packet.clear();
|
||||
ASSERT_EQ(packet.get_cursor(), 0);
|
||||
ASSERT_EQ(packet.get_cursor(), 0u);
|
||||
}
|
||||
|
||||
TEST(PacketTest, test_set_cursor)
|
||||
@ -231,10 +241,10 @@ TEST(PacketTest, test_set_cursor)
|
||||
uint32_t val = 0;
|
||||
fr::Packet packet;
|
||||
packet.set_cursor(5);
|
||||
ASSERT_EQ(packet.get_cursor(), 0);
|
||||
ASSERT_EQ(packet.get_cursor(), 0u);
|
||||
packet << val;
|
||||
packet.set_cursor(3);
|
||||
ASSERT_EQ(packet.get_cursor(), 3);
|
||||
ASSERT_EQ(packet.get_cursor(), 3u);
|
||||
}
|
||||
|
||||
TEST(PacketTest, test_seek_cursor)
|
||||
@ -242,16 +252,16 @@ TEST(PacketTest, test_seek_cursor)
|
||||
uint32_t val = 0;
|
||||
fr::Packet packet;
|
||||
packet.seek_cursor(-20);
|
||||
ASSERT_EQ(packet.get_cursor(), 0);
|
||||
ASSERT_EQ(packet.get_cursor(), 0u);
|
||||
packet.seek_cursor(20);
|
||||
ASSERT_EQ(packet.get_cursor(), 0);
|
||||
ASSERT_EQ(packet.get_cursor(), 0u);
|
||||
packet << val;
|
||||
packet.seek_cursor(3);
|
||||
ASSERT_EQ(packet.get_cursor(), 3);
|
||||
ASSERT_EQ(packet.get_cursor(), 3u);
|
||||
packet.seek_cursor(-1);
|
||||
ASSERT_EQ(packet.get_cursor(), 2);
|
||||
ASSERT_EQ(packet.get_cursor(), 2u);
|
||||
packet.seek_cursor(-10);
|
||||
ASSERT_EQ(packet.get_cursor(), 0);
|
||||
ASSERT_EQ(packet.get_cursor(), 0u);
|
||||
packet.seek_cursor(10);
|
||||
ASSERT_EQ(packet.get_cursor(), 4);
|
||||
ASSERT_EQ(packet.get_cursor(), 4u);
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user