void Diff::checkPoints(const PointBuffer& source_data, const PointBuffer& candidate_data, ptree& errors) { uint32_t i(0); uint32_t MAX_BADBYTES(20); uint32_t badbytes(0); // Both schemas have already been determined to be equal, so are the // same size and in the same order. Dimension::IdList const& sourceDims = source_data.dims(); Dimension::IdList const& candidateDims = candidate_data.dims(); char sbuf[8]; char cbuf[8]; for (PointId idx = 0; idx < source_data.size(); ++idx) { for (size_t d = 0; d < sourceDims.size(); ++d) { Dimension::Id::Enum sd = sourceDims[d]; Dimension::Id::Enum cd = candidateDims[d]; source_data.getRawField(sd, idx, (void *)sbuf); candidate_data.getRawField(cd, idx, (void *)cbuf); Dimension::Type::Enum t = Dimension::defaultType(cd); size_t size = Dimension::size(t); if (memcmp(sbuf, cbuf, size)) { std::ostringstream oss; oss << "Point " << idx << " differs for dimension \"" << Dimension::name(sd) << "\" for source and candidate"; errors.put<std::string>("data.error", oss.str()); badbytes++; } } if (badbytes > MAX_BADBYTES ) break; } }