3 #include <Carna/Carna.h>
24 typedef uint16_t shifted_huv_t;
28 unsigned int first : 12;
29 unsigned int second : 12;
32 const std::streamsize BUFFER_LENGTH = 3;
43 Writer( std::ostream& out )
53 void write(
signed short huv )
55 const signed short shifted_huv = huv + 1024;
56 buffered_shifted_huv.push( static_cast< shifted_huv_t >( shifted_huv ) );
57 if( buffered_shifted_huv.size() % 2 == 0 )
67 std::queue< shifted_huv_t > buffered_shifted_huv;
72 if( buffered_shifted_huv.empty() )
77 buffer.first = buffered_shifted_huv.front();
78 buffered_shifted_huv.pop();
80 if( buffered_shifted_huv.empty() )
86 buffer.second = buffered_shifted_huv.front();
87 buffered_shifted_huv.pop();
90 out.write( reinterpret_cast< const char* >( &buffer ), BUFFER_LENGTH );
104 Reader( std::istream& in )
111 if( read_values.empty() )
115 const shifted_huv_t shifted_huv = read_values.front();
117 const signed short huv =
static_cast< signed short >( shifted_huv ) - 1024;
126 std::queue< shifted_huv_t > read_values;
130 in.read( reinterpret_cast< char* >( &buffer ), BUFFER_LENGTH );
131 read_values.push( buffer.first );
132 read_values.push( buffer.second );