Esempio n. 1
0
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();
}