size_t ParagraphMetrics::computeRowSignature(Row const & row,
- BufferParams const & bparams) const
+ BufferView const & bv) 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.track_changes) {
+ if (par_->isInset(i)) {
+ Inset const * in = par_->getInset(i);
+ Dimension const d = in->dimension(bv);
+ int const b[] = { d.wid, d.asc, d.des };
+ crc.process_bytes(b, sizeof(b));
+ } else {
+ char_type const b[] = { par_->getChar(i) };
+ crc.process_bytes(b, sizeof(char_type));
+ }
+ if (bv.buffer().params().track_changes) {
Change change = par_->lookupChange(i);
char_type const b[] = { static_cast<char_type>(change.type) };
// 1 byte is enough to encode Change::Type
}
}
+ pos_type const b1[] = { row.sel_beg, row.sel_end };
+ crc.process_bytes(b1, sizeof(b1));
+
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));
+ int const b2[] = { row.begin_margin_sel,
+ row.end_margin_sel,
+ d.wid, d.asc, d.des };
+ crc.process_bytes(b2, sizeof(b2));
crc.process_bytes(&row.separator, sizeof(row.separator));
return crc.checksum();
}
+// FIXME: this code seems bogus. Audit and rewrite (see bug #9860).
bool ParagraphMetrics::hfillExpansion(Row const & row, pos_type pos) const
{
if (!par_->isHfill(pos))