Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef UTIL_SOCKET_H
- #define UTIL_SOCKET_H
- #include <SFML/Network.hpp>
- #include <type_traits>
- #include <typeinfo>
- #include <util/Endian.h>
- namespace util
- {
- template< typename T >
- typename std::enable_if< std::is_integral< T >::value or std::is_floating_point< T >::value, T >::type
- Read( sf::Packet& packet )
- {
- T t;
- packet.Read( reinterpret_cast< char* >( &t ), sizeof( T ) );
- if ( packet and util::BIG_ENDIAN and sizeof( T ) > 1 )
- {
- t = util::SwapBytes( t );
- }
- return t;
- }
- template< typename T >
- typename std::enable_if< std::is_integral< T >::value or std::is_floating_point< T >::value >::type
- Write( sf::Packet& packet, T t )
- {
- if ( util::BIG_ENDIAN )
- {
- t = util::SwapBytes( t );
- }
- packet.Append( reinterpret_cast< char* >( &t ), sizeof( T ) );
- }
- template< typename T >
- typename std::enable_if< std::is_same< T, std::string >::value, T >::type
- Read( sf::Packet& packet )
- {
- T str;
- while ( packet )
- {
- sf::Int8 c;
- packet >> c;
- if ( packet )
- {
- if ( c == '\0' )
- {
- break;
- }
- else
- {
- str += c;
- }
- }
- }
- return str;
- }
- }
- #endif // UTIL_SOCKET_H
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement