size_t ParagraphMetrics::computeRowSignature(Row const & row, BufferParams const & bparams) const { boost::crc_32_type crc; for (pos_type i = row.pos(); i < row.endpos(); ++i) { char_type const b[] = { par_->getChar(i) }; crc.process_bytes(b, sizeof(char_type)); if (bparams.trackChanges) { Change change = par_->lookupChange(i); char_type const b[] = { static_cast<char_type>(change.type) }; // 1 byte is enough to encode Change::Type crc.process_bytes(b, 1); } } Dimension const & d = row.dimension(); char_type const b[] = { static_cast<char_type>(row.sel_beg), static_cast<char_type>(row.sel_end), row.begin_margin_sel, row.end_margin_sel, d.wid, d.asc, d.des}; crc.process_bytes(b, sizeof(b)); return crc.checksum(); }