📄 sr_binary_vector_of_bool.inl
字号:
template <> struct binary< std::vector<bool> >{ typedef std::vector< bool > value_type; typedef value_type::value_type elem_type; static const bool is_streamable = true; static size_t size_of(void) { return UnknownSize; } static size_t size_of(const value_type& _v) { return _v.size() / 8 + ((_v.size() % 8)!=0); } static size_t store( std::ostream& _ostr, const value_type& _v, bool ) { size_t bytes = 0; size_t N = _v.size() / 8; size_t R = _v.size() % 8; size_t idx; // element index unsigned char bits; // bitset for (idx=0; idx < N; ++idx) { bits = 0; bits = bits | (_v[idx+0] ? 1 : 0); bits = bits | ((_v[idx+1] ? 1 : 0) << 1); bits = bits | ((_v[idx+2] ? 1 : 0) << 2); bits = bits | ((_v[idx+3] ? 1 : 0) << 3); bits = bits | ((_v[idx+4] ? 1 : 0) << 4); bits = bits | ((_v[idx+5] ? 1 : 0) << 5); bits = bits | ((_v[idx+6] ? 1 : 0) << 6); bits = bits | ((_v[idx+7] ? 1 : 0) << 7); _ostr << bits; } bytes = N; if (R) { bits = 0; switch(R) { case 7: bits = bits | ((_v[idx+6] ? 1 : 0) << 6); case 6: bits = bits | ((_v[idx+5] ? 1 : 0) << 5); case 5: bits = bits | ((_v[idx+4] ? 1 : 0) << 4); case 4: bits = bits | ((_v[idx+3] ? 1 : 0) << 3); case 3: bits = bits | ((_v[idx+2] ? 1 : 0) << 2); case 2: bits = bits | ((_v[idx+1] ? 1 : 0) << 1); case 1: bits = bits | (_v[idx+0] ? 1 : 0); } _ostr << bits; ++bytes; } assert( bytes == size_of(_v) ); return bytes; } static size_t restore( std::istream& _istr, value_type& _v, bool ) { size_t bytes = 0; size_t N = _v.size() / 8; size_t R = _v.size() % 8; size_t idx; // element index unsigned char bits; // bitset for (idx=0; idx < N; ++idx) { _istr >> bits; _v[idx+0] = ((bits & 0x01)!=0); _v[idx+1] = ((bits & 0x02)!=0); _v[idx+2] = ((bits & 0x04)!=0); _v[idx+3] = ((bits & 0x08)!=0); _v[idx+4] = ((bits & 0x10)!=0); _v[idx+5] = ((bits & 0x20)!=0); _v[idx+6] = ((bits & 0x40)!=0); _v[idx+7] = ((bits & 0x80)!=0); } bytes = N; if (R) { _istr >> bits; for(; idx < _v.size(); ++idx) _v[idx] = (bits & (1 << (idx%8)))!=0; ++bytes; } return bytes; }};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -