MCPcopy Create free account
hub / github.com/couchbase/fleece / patch_addContext

Method patch_addContext

Fleece/Support/diff_match_patch.hh:1794–1833  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1792 */
1793 protected:
1794 void patch_addContext(Patch &patch, const string_t &text) const {
1795 if (text.empty()) {
1796 return;
1797 }
1798 string_t pattern = safeMid(text, patch.start2, patch.length1);
1799 ssize_t padding = 0;
1800
1801 // Look for the first and last matches of pattern in text. If two different
1802 // matches are found, increase the pattern length.
1803 while (text.find(pattern) != text.rfind(pattern)
1804 && (ssize_t)pattern.length() < Match_MaxBits - Patch_Margin - Patch_Margin) {
1805 padding += Patch_Margin;
1806 pattern = safeMid(text, std::max(0l, (long)(patch.start2 - padding)),
1807 std::min((ssize_t)text.length(), patch.start2 + patch.length1 + padding)
1808 - std::max(0l, (long)(patch.start2 - padding)));
1809 }
1810 // Add one chunk for good luck.
1811 padding += Patch_Margin;
1812
1813 // Add the prefix.
1814 string_t prefix = safeMid(text, std::max(0l, (long)(patch.start2 - padding)),
1815 patch.start2 - std::max(0l, (long)(patch.start2 - padding)));
1816 if (!prefix.empty()) {
1817 patch.diffs.push_front(Diff(EQUAL, prefix));
1818 }
1819 // Add the suffix.
1820 string_t suffix = safeMid(text, patch.start2 + patch.length1,
1821 std::min((ssize_t)text.length(), patch.start2 + patch.length1 + padding)
1822 - (patch.start2 + patch.length1));
1823 if (!suffix.empty()) {
1824 patch.diffs.push_back(Diff(EQUAL, suffix));
1825 }
1826
1827 // Roll back the start points.
1828 patch.start1 -= prefix.length();
1829 patch.start2 -= prefix.length();
1830 // Extend the lengths.
1831 patch.length1 += prefix.length() + suffix.length();
1832 patch.length2 += prefix.length() + suffix.length();
1833 }
1834
1835 /**
1836 * Compute a list of patches to turn text1 into text2.

Callers

nothing calls this directly

Calls 4

DiffClass · 0.85
lengthMethod · 0.80
emptyMethod · 0.45
findMethod · 0.45

Tested by

no test coverage detected