X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Fio%2Frecord.h;h=88576651ea574c25c2c7f2ebf83ad44e8ec6d5f1;hb=c51272489a64903f976c6d502fd79925cb537d9b;hp=29c05ca04e7227745d64a8397ed700bfc39b71c6;hpb=3ea4de25c712971a35dbad27d8834d75933daa08;p=cassiopeia.git diff --git a/src/io/record.h b/src/io/record.h index 29c05ca..8857665 100644 --- a/src/io/record.h +++ b/src/io/record.h @@ -57,13 +57,21 @@ public: } template - static void read( std::string::iterator& it, T& val ) { - char* data = ( char* ) &val; + static void read( std::string::const_iterator& it, T& val ) { + union typeConversion { + char buf[sizeof(T)]; + T value; + + typeConversion(const T& v) : value(v) {} + }; + + typeConversion data( 0 ); for( size_t i = 0; i < sizeof( T ); i++ ) { - data[i] = *it; - it++; + data.buf[i] = *it++; } + + val = data.value; } std::string packToString() { @@ -79,12 +87,12 @@ public: return res; } - void unpackFromString( std::string str ) { + void unpackFromString( const std::string& str ) { if( str.size() != RECORD_HEADER_SIZE ) { throw "Invalid string length"; } - auto it = str.begin(); + auto it = str.cbegin(); read( it, command ); read( it, flags ); read( it, sessid );