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

Method patch_addPadding

Fleece/Support/diff_match_patch.hh:2089–2142  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2087 */
2088 public:
2089 string_t patch_addPadding(Patches &patches) const {
2090 short paddingLength = Patch_Margin;
2091 string_t nullPadding;
2092 for (short x = 1; x <= paddingLength; x++) {
2093 nullPadding += (char_t)x;
2094 }
2095
2096 // Bump all the patches forward.
2097 for (typename Patches::iterator cur_patch = patches.begin(); cur_patch != patches.end(); ++cur_patch) {
2098 (*cur_patch).start1 += paddingLength;
2099 (*cur_patch).start2 += paddingLength;
2100 }
2101
2102 // Add some padding on start of first diff.
2103 Patch &firstPatch = patches.front();
2104 Diffs &firstPatchDiffs = firstPatch.diffs;
2105 if (firstPatchDiffs.empty() || firstPatchDiffs.front().operation != EQUAL) {
2106 // Add nullPadding equality.
2107 firstPatchDiffs.push_front(Diff(EQUAL, nullPadding));
2108 firstPatch.start1 -= paddingLength; // Should be 0.
2109 firstPatch.start2 -= paddingLength; // Should be 0.
2110 firstPatch.length1 += paddingLength;
2111 firstPatch.length2 += paddingLength;
2112 } else if (paddingLength > (ssize_t)firstPatchDiffs.front().text.length()) {
2113 // Grow first equality.
2114 Diff &firstDiff = firstPatchDiffs.front();
2115 ssize_t extraLength = paddingLength - firstDiff.text.length();
2116 firstDiff.text = safeMid(nullPadding, firstDiff.text.length(),
2117 paddingLength - firstDiff.text.length()) + firstDiff.text;
2118 firstPatch.start1 -= extraLength;
2119 firstPatch.start2 -= extraLength;
2120 firstPatch.length1 += extraLength;
2121 firstPatch.length2 += extraLength;
2122 }
2123
2124 // Add some padding on end of last diff.
2125 Patch &lastPatch = patches.front();
2126 Diffs &lastPatchDiffs = lastPatch.diffs;
2127 if (lastPatchDiffs.empty() || lastPatchDiffs.back().operation != EQUAL) {
2128 // Add nullPadding equality.
2129 lastPatchDiffs.push_back(Diff(EQUAL, nullPadding));
2130 lastPatch.length1 += paddingLength;
2131 lastPatch.length2 += paddingLength;
2132 } else if (paddingLength > (ssize_t)lastPatchDiffs.back().text.length()) {
2133 // Grow last equality.
2134 Diff &lastDiff = lastPatchDiffs.back();
2135 ssize_t extraLength = paddingLength - lastDiff.text.length();
2136 lastDiff.text += nullPadding.substr(0, extraLength);
2137 lastPatch.length1 += extraLength;
2138 lastPatch.length2 += extraLength;
2139 }
2140
2141 return nullPadding;
2142 }
2143
2144 /**
2145 * Look through the patches and break up any which are longer than the

Callers

nothing calls this directly

Calls 5

DiffClass · 0.85
lengthMethod · 0.80
beginMethod · 0.45
endMethod · 0.45
emptyMethod · 0.45

Tested by

no test coverage detected