Advertisement
spacechase0

Templated Socket Reading

Oct 28th, 2011
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.19 KB | None | 0 0
  1. #ifndef UTIL_SOCKET_H
  2. #define UTIL_SOCKET_H
  3.  
  4. #include <SFML/Network.hpp>
  5. #include <type_traits>
  6. #include <typeinfo>
  7.  
  8. #include <util/Endian.h>
  9.  
  10. namespace util
  11. {
  12.     template< typename T >
  13.     typename std::enable_if< std::is_integral< T >::value or std::is_floating_point< T >::value, T >::type
  14.     Read( sf::Packet& packet )
  15.     {
  16.         T t;
  17.        
  18.         packet.Read( reinterpret_cast< char* >( &t ), sizeof( T ) );
  19.         if ( packet and util::BIG_ENDIAN and sizeof( T ) > 1 )
  20.         {
  21.             t = util::SwapBytes( t );
  22.         }
  23.        
  24.         return t;
  25.     }
  26.    
  27.     template< typename T >
  28.     typename std::enable_if< std::is_integral< T >::value or std::is_floating_point< T >::value >::type
  29.     Write( sf::Packet& packet, T t )
  30.     {
  31.         if ( util::BIG_ENDIAN )
  32.         {
  33.             t = util::SwapBytes( t );
  34.         }
  35.         packet.Append( reinterpret_cast< char* >( &t ), sizeof( T ) );
  36.     }
  37.    
  38.     template< typename T >
  39.     typename std::enable_if< std::is_same< T, std::string >::value, T >::type
  40.     Read( sf::Packet& packet )
  41.     {
  42.         T str;
  43.         while ( packet )
  44.         {
  45.             sf::Int8 c;
  46.             packet >> c;
  47.            
  48.             if ( packet )
  49.             {
  50.                 if ( c == '\0' )
  51.                 {
  52.                     break;
  53.                 }
  54.                 else
  55.                 {
  56.                     str += c;
  57.                 }
  58.             }
  59.         }
  60.        
  61.         return str;
  62.     }
  63. }
  64.  
  65. #endif // UTIL_SOCKET_H
  66.  
  67.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement