diff --git a/CMakeLists.txt b/CMakeLists.txt index a326554..7aacefe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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") diff --git a/include/frnetlib/Packet.h b/include/frnetlib/Packet.h index d07285f..da19223 100644 --- a/include/frnetlib/Packet.h +++ b/include/frnetlib/Packet.h @@ -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::value>::type* = nullptr> inline Packet &operator<<(T var) { + static_assert(sizeof(typename std::underlying_type::type) <= 4, "Enum types must not be larger than 32bits"); *this << (uint32_t)static_cast::type>(var); return *this; } @@ -452,6 +452,7 @@ namespace fr template::value>::type* = nullptr> inline Packet &operator>>(T &var) { + static_assert(sizeof(typename std::underlying_type::type) <= 4, "Enum types must not be larger than 32bits"); uint32_t val; *this >> val; var = static_cast(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::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. diff --git a/src/Packet.cpp b/src/Packet.cpp deleted file mode 100644 index 3463e5a..0000000 --- a/src/Packet.cpp +++ /dev/null @@ -1,8 +0,0 @@ -// -// Created by fred on 06/12/16. -// - -namespace fr -{ - -} \ No newline at end of file diff --git a/tests/PacketTest.cpp b/tests/PacketTest.cpp index 848f6d7..e49f9de 100644 --- a/tests/PacketTest.cpp +++ b/tests/PacketTest.cpp @@ -29,6 +29,16 @@ TEST(PacketTest, double_range_add) ASSERT_EQ(var2, out2); } +TEST(PacketTest, pack_vector_bool) +{ + std::vector my_vec{true, false, true}; + std::vector 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); } \ No newline at end of file