aboutsummaryrefslogtreecommitdiff
path: root/src/deps/diffz/DiffMatchPatch.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/deps/diffz/DiffMatchPatch.zig')
-rw-r--r--src/deps/diffz/DiffMatchPatch.zig142
1 files changed, 71 insertions, 71 deletions
diff --git a/src/deps/diffz/DiffMatchPatch.zig b/src/deps/diffz/DiffMatchPatch.zig
index a5cc02af4..9ce736d15 100644
--- a/src/deps/diffz/DiffMatchPatch.zig
+++ b/src/deps/diffz/DiffMatchPatch.zig
@@ -106,7 +106,7 @@ pub fn diff(
const deadline = if (dmp.diff_timeout == 0)
std.math.maxInt(u64)
else
- @intCast(u64, std.time.milliTimestamp()) + dmp.diff_timeout;
+ @as(u64, @intCast(std.time.milliTimestamp())) + dmp.diff_timeout;
return dmp.diffInternal(allocator, before, after, check_lines, deadline);
}
@@ -124,7 +124,7 @@ pub fn diffLines(
const deadline = if (dmp.diff_timeout == 0)
std.math.maxInt(u64)
else
- @intCast(u64, std.time.milliTimestamp()) + dmp.diff_timeout;
+ @as(u64, @intCast(std.time.milliTimestamp())) + dmp.diff_timeout;
var a = try diffLinesToChars(allocator, text1_in, text2_in);
var diffs = try dmp.diffInternal(allocator, a.chars_1, a.chars_2, false, deadline);
@@ -389,20 +389,20 @@ fn diffHalfMatchInternal(
var best_short_text_b: []const u8 = "";
while (j < short_text.len and b: {
- j = @intCast(isize, std.mem.indexOf(u8, short_text[@intCast(usize, j + 1)..], seed) orelse break :b false) + j + 1;
+ j = @as(isize, @intCast(std.mem.indexOf(u8, short_text[@as(usize, @intCast(j + 1))..], seed) orelse break :b false)) + j + 1;
break :b true;
}) {
- var prefix_length = diffCommonPrefix(long_text[i..], short_text[@intCast(usize, j)..]);
- var suffix_length = diffCommonSuffix(long_text[0..i], short_text[0..@intCast(usize, j)]);
+ var prefix_length = diffCommonPrefix(long_text[i..], short_text[@as(usize, @intCast(j))..]);
+ var suffix_length = diffCommonSuffix(long_text[0..i], short_text[0..@as(usize, @intCast(j))]);
if (best_common.items.len < suffix_length + prefix_length) {
best_common.items.len = 0;
- try best_common.appendSlice(allocator, short_text[@intCast(usize, j - @intCast(isize, suffix_length)) .. @intCast(usize, j - @intCast(isize, suffix_length)) + suffix_length]);
- try best_common.appendSlice(allocator, short_text[@intCast(usize, j) .. @intCast(usize, j) + prefix_length]);
+ try best_common.appendSlice(allocator, short_text[@as(usize, @intCast(j - @as(isize, @intCast(suffix_length)))) .. @as(usize, @intCast(j - @as(isize, @intCast(suffix_length)))) + suffix_length]);
+ try best_common.appendSlice(allocator, short_text[@as(usize, @intCast(j)) .. @as(usize, @intCast(j)) + prefix_length]);
best_long_text_a = long_text[0 .. i - suffix_length];
best_long_text_b = long_text[i + prefix_length ..];
- best_short_text_a = short_text[0..@intCast(usize, j - @intCast(isize, suffix_length))];
- best_short_text_b = short_text[@intCast(usize, j + @intCast(isize, prefix_length))..];
+ best_short_text_a = short_text[0..@as(usize, @intCast(j - @as(isize, @intCast(suffix_length))))];
+ best_short_text_b = short_text[@as(usize, @intCast(j + @as(isize, @intCast(prefix_length))))..];
}
}
if (best_common.items.len * 2 >= long_text.len) {
@@ -432,24 +432,24 @@ fn diffBisect(
after: []const u8,
deadline: u64,
) DiffError!DiffList {
- const before_length = @intCast(isize, before.len);
- const after_length = @intCast(isize, after.len);
- const max_d = @intCast(isize, (before.len + after.len + 1) / 2);
+ const before_length = @as(isize, @intCast(before.len));
+ const after_length = @as(isize, @intCast(after.len));
+ const max_d = @as(isize, @intCast((before.len + after.len + 1) / 2));
const v_offset = max_d;
const v_length = 2 * max_d;
- var v1 = try ArrayListUnmanaged(isize).initCapacity(allocator, @intCast(usize, v_length));
- v1.items.len = @intCast(usize, v_length);
- var v2 = try ArrayListUnmanaged(isize).initCapacity(allocator, @intCast(usize, v_length));
- v2.items.len = @intCast(usize, v_length);
+ var v1 = try ArrayListUnmanaged(isize).initCapacity(allocator, @as(usize, @intCast(v_length)));
+ v1.items.len = @as(usize, @intCast(v_length));
+ var v2 = try ArrayListUnmanaged(isize).initCapacity(allocator, @as(usize, @intCast(v_length)));
+ v2.items.len = @as(usize, @intCast(v_length));
var x: usize = 0;
while (x < v_length) : (x += 1) {
v1.items[x] = -1;
v2.items[x] = -1;
}
- v1.items[@intCast(usize, v_offset + 1)] = 0;
- v2.items[@intCast(usize, v_offset + 1)] = 0;
+ v1.items[@as(usize, @intCast(v_offset + 1))] = 0;
+ v2.items[@as(usize, @intCast(v_offset + 1))] = 0;
const delta = before_length - after_length;
// If the total number of characters is odd, then the front path will
// collide with the reverse path.
@@ -464,7 +464,7 @@ fn diffBisect(
var d: isize = 0;
while (d < max_d) : (d += 1) {
// Bail out if deadline is reached.
- if (@intCast(u64, std.time.milliTimestamp()) > deadline) {
+ if (@as(u64, @intCast(std.time.milliTimestamp())) > deadline) {
break;
}
@@ -474,20 +474,20 @@ fn diffBisect(
var k1_offset = v_offset + k1;
var x1: isize = 0;
if (k1 == -d or (k1 != d and
- v1.items[@intCast(usize, k1_offset - 1)] < v1.items[@intCast(usize, k1_offset + 1)]))
+ v1.items[@as(usize, @intCast(k1_offset - 1))] < v1.items[@as(usize, @intCast(k1_offset + 1))]))
{
- x1 = v1.items[@intCast(usize, k1_offset + 1)];
+ x1 = v1.items[@as(usize, @intCast(k1_offset + 1))];
} else {
- x1 = v1.items[@intCast(usize, k1_offset - 1)] + 1;
+ x1 = v1.items[@as(usize, @intCast(k1_offset - 1))] + 1;
}
var y1 = x1 - k1;
while (x1 < before_length and
- y1 < after_length and before[@intCast(usize, x1)] == after[@intCast(usize, y1)])
+ y1 < after_length and before[@as(usize, @intCast(x1))] == after[@as(usize, @intCast(y1))])
{
x1 += 1;
y1 += 1;
}
- v1.items[@intCast(usize, k1_offset)] = x1;
+ v1.items[@as(usize, @intCast(k1_offset))] = x1;
if (x1 > before_length) {
// Ran off the right of the graph.
k1end += 2;
@@ -496,9 +496,9 @@ fn diffBisect(
k1start += 2;
} else if (front) {
var k2_offset = v_offset + delta - k1;
- if (k2_offset >= 0 and k2_offset < v_length and v2.items[@intCast(usize, k2_offset)] != -1) {
+ if (k2_offset >= 0 and k2_offset < v_length and v2.items[@as(usize, @intCast(k2_offset))] != -1) {
// Mirror x2 onto top-left coordinate system.
- const x2 = before_length - v2.items[@intCast(usize, k2_offset)];
+ const x2 = before_length - v2.items[@as(usize, @intCast(k2_offset))];
if (x1 >= x2) {
// Overlap detected.
return dmp.diffBisectSplit(allocator, before, after, x1, y1, deadline);
@@ -513,21 +513,21 @@ fn diffBisect(
const k2_offset = v_offset + k2;
var x2: isize = 0;
if (k2 == -d or (k2 != d and
- v2.items[@intCast(usize, k2_offset - 1)] < v2.items[@intCast(usize, k2_offset + 1)]))
+ v2.items[@as(usize, @intCast(k2_offset - 1))] < v2.items[@as(usize, @intCast(k2_offset + 1))]))
{
- x2 = v2.items[@intCast(usize, k2_offset + 1)];
+ x2 = v2.items[@as(usize, @intCast(k2_offset + 1))];
} else {
- x2 = v2.items[@intCast(usize, k2_offset - 1)] + 1;
+ x2 = v2.items[@as(usize, @intCast(k2_offset - 1))] + 1;
}
var y2: isize = x2 - k2;
while (x2 < before_length and y2 < after_length and
- before[@intCast(usize, before_length - x2 - 1)] ==
- after[@intCast(usize, after_length - y2 - 1)])
+ before[@as(usize, @intCast(before_length - x2 - 1))] ==
+ after[@as(usize, @intCast(after_length - y2 - 1))])
{
x2 += 1;
y2 += 1;
}
- v2.items[@intCast(usize, k2_offset)] = x2;
+ v2.items[@as(usize, @intCast(k2_offset))] = x2;
if (x2 > before_length) {
// Ran off the left of the graph.
k2end += 2;
@@ -536,11 +536,11 @@ fn diffBisect(
k2start += 2;
} else if (!front) {
const k1_offset = v_offset + delta - k2;
- if (k1_offset >= 0 and k1_offset < v_length and v1.items[@intCast(usize, k1_offset)] != -1) {
- const x1 = v1.items[@intCast(usize, k1_offset)];
+ if (k1_offset >= 0 and k1_offset < v_length and v1.items[@as(usize, @intCast(k1_offset))] != -1) {
+ const x1 = v1.items[@as(usize, @intCast(k1_offset))];
const y1 = v_offset + x1 - k1_offset;
// Mirror x2 onto top-left coordinate system.
- x2 = before_length - v2.items[@intCast(usize, k2_offset)];
+ x2 = before_length - v2.items[@as(usize, @intCast(k2_offset))];
if (x1 >= x2) {
// Overlap detected.
return dmp.diffBisectSplit(allocator, before, after, x1, y1, deadline);
@@ -574,10 +574,10 @@ fn diffBisectSplit(
y: isize,
deadline: u64,
) DiffError!DiffList {
- const text1a = text1[0..@intCast(usize, x)];
- const text2a = text2[0..@intCast(usize, y)];
- const text1b = text1[@intCast(usize, x)..];
- const text2b = text2[@intCast(usize, y)..];
+ const text1a = text1[0..@as(usize, @intCast(x))];
+ const text2a = text2[0..@as(usize, @intCast(y))];
+ const text1b = text1[@as(usize, @intCast(x))..];
+ const text2b = text2[@as(usize, @intCast(y))..];
// Compute both diffs serially.
var diffs = try dmp.diffInternal(allocator, text1a, text2a, false, deadline);
@@ -726,24 +726,24 @@ fn diffLinesToCharsMunge(
// Walk the text, pulling out a Substring for each line.
// text.split('\n') would would temporarily double our memory footprint.
// Modifying text would create many large strings to garbage collect.
- while (line_end < @intCast(isize, text.len) - 1) {
+ while (line_end < @as(isize, @intCast(text.len)) - 1) {
line_end = b: {
- break :b @intCast(isize, std.mem.indexOf(u8, text[@intCast(usize, line_start)..], "\n") orelse
- break :b @intCast(isize, text.len - 1)) + line_start;
+ break :b @as(isize, @intCast(std.mem.indexOf(u8, text[@as(usize, @intCast(line_start))..], "\n") orelse
+ break :b @as(isize, @intCast(text.len - 1)))) + line_start;
};
- line = text[@intCast(usize, line_start) .. @intCast(usize, line_start) + @intCast(usize, line_end + 1 - line_start)];
+ line = text[@as(usize, @intCast(line_start)) .. @as(usize, @intCast(line_start)) + @as(usize, @intCast(line_end + 1 - line_start))];
if (line_hash.get(line)) |value| {
- try chars.append(allocator, @intCast(u8, value));
+ try chars.append(allocator, @as(u8, @intCast(value)));
} else {
if (line_array.items.len == max_lines) {
// Bail out at 255 because char 256 == char 0.
- line = text[@intCast(usize, line_start)..];
- line_end = @intCast(isize, text.len);
+ line = text[@as(usize, @intCast(line_start))..];
+ line_end = @as(isize, @intCast(text.len));
}
try line_array.append(allocator, line);
try line_hash.put(allocator, line, line_array.items.len - 1);
- try chars.append(allocator, @intCast(u8, line_array.items.len - 1));
+ try chars.append(allocator, @as(u8, @intCast(line_array.items.len - 1)));
}
line_start = line_end + 1;
}
@@ -980,18 +980,18 @@ fn diffCleanupSemantic(allocator: std.mem.Allocator, diffs: *DiffList) DiffError
var length_insertions2: usize = 0;
var length_deletions2: usize = 0;
while (pointer < diffs.items.len) {
- if (diffs.items[@intCast(usize, pointer)].operation == .equal) { // Equality found.
+ if (diffs.items[@as(usize, @intCast(pointer))].operation == .equal) { // Equality found.
try equalities.append(allocator, pointer);
length_insertions1 = length_insertions2;
length_deletions1 = length_deletions2;
length_insertions2 = 0;
length_deletions2 = 0;
- last_equality = diffs.items[@intCast(usize, pointer)].text;
+ last_equality = diffs.items[@as(usize, @intCast(pointer))].text;
} else { // an insertion or deletion
- if (diffs.items[@intCast(usize, pointer)].operation == .insert) {
- length_insertions2 += diffs.items[@intCast(usize, pointer)].text.len;
+ if (diffs.items[@as(usize, @intCast(pointer))].operation == .insert) {
+ length_insertions2 += diffs.items[@as(usize, @intCast(pointer))].text.len;
} else {
- length_deletions2 += diffs.items[@intCast(usize, pointer)].text.len;
+ length_deletions2 += diffs.items[@as(usize, @intCast(pointer))].text.len;
}
// Eliminate an equality that is smaller or equal to the edits on both
// sides of it.
@@ -1002,11 +1002,11 @@ fn diffCleanupSemantic(allocator: std.mem.Allocator, diffs: *DiffList) DiffError
// Duplicate record.
try diffs.insert(
allocator,
- @intCast(usize, equalities.items[equalities.items.len - 1]),
+ @as(usize, @intCast(equalities.items[equalities.items.len - 1])),
Diff.init(.delete, try allocator.dupe(u8, last_equality.?)),
);
// Change second copy to insert.
- diffs.items[@intCast(usize, equalities.items[equalities.items.len - 1] + 1)].operation = .insert;
+ diffs.items[@as(usize, @intCast(equalities.items[equalities.items.len - 1] + 1))].operation = .insert;
// Throw away the equality we just deleted.
_ = equalities.pop();
if (equalities.items.len > 0) {
@@ -1038,46 +1038,46 @@ fn diffCleanupSemantic(allocator: std.mem.Allocator, diffs: *DiffList) DiffError
// Only extract an overlap if it is as big as the edit ahead or behind it.
pointer = 1;
while (pointer < diffs.items.len) {
- if (diffs.items[@intCast(usize, pointer - 1)].operation == .delete and
- diffs.items[@intCast(usize, pointer)].operation == .insert)
+ if (diffs.items[@as(usize, @intCast(pointer - 1))].operation == .delete and
+ diffs.items[@as(usize, @intCast(pointer))].operation == .insert)
{
- const deletion = diffs.items[@intCast(usize, pointer - 1)].text;
- const insertion = diffs.items[@intCast(usize, pointer)].text;
+ const deletion = diffs.items[@as(usize, @intCast(pointer - 1))].text;
+ const insertion = diffs.items[@as(usize, @intCast(pointer))].text;
var overlap_length1: usize = diffCommonOverlap(deletion, insertion);
var overlap_length2: usize = diffCommonOverlap(insertion, deletion);
if (overlap_length1 >= overlap_length2) {
- if (@floatFromInt(f32, overlap_length1) >= @floatFromInt(f32, deletion.len) / 2.0 or
- @floatFromInt(f32, overlap_length1) >= @floatFromInt(f32, insertion.len) / 2.0)
+ if (@as(f32, @floatFromInt(overlap_length1)) >= @as(f32, @floatFromInt(deletion.len)) / 2.0 or
+ @as(f32, @floatFromInt(overlap_length1)) >= @as(f32, @floatFromInt(insertion.len)) / 2.0)
{
// Overlap found.
// Insert an equality and trim the surrounding edits.
try diffs.insert(
allocator,
- @intCast(usize, pointer),
+ @as(usize, @intCast(pointer)),
Diff.init(.equal, try allocator.dupe(u8, insertion[0..overlap_length1])),
);
- diffs.items[@intCast(usize, pointer - 1)].text =
+ diffs.items[@as(usize, @intCast(pointer - 1))].text =
try allocator.dupe(u8, deletion[0 .. deletion.len - overlap_length1]);
- diffs.items[@intCast(usize, pointer + 1)].text =
+ diffs.items[@as(usize, @intCast(pointer + 1))].text =
try allocator.dupe(u8, insertion[overlap_length1..]);
pointer += 1;
}
} else {
- if (@floatFromInt(f32, overlap_length2) >= @floatFromInt(f32, deletion.len) / 2.0 or
- @floatFromInt(f32, overlap_length2) >= @floatFromInt(f32, insertion.len) / 2.0)
+ if (@as(f32, @floatFromInt(overlap_length2)) >= @as(f32, @floatFromInt(deletion.len)) / 2.0 or
+ @as(f32, @floatFromInt(overlap_length2)) >= @as(f32, @floatFromInt(insertion.len)) / 2.0)
{
// Reverse overlap found.
// Insert an equality and swap and trim the surrounding edits.
try diffs.insert(
allocator,
- @intCast(usize, pointer),
+ @as(usize, @intCast(pointer)),
Diff.init(.equal, try allocator.dupe(u8, deletion[0..overlap_length2])),
);
- diffs.items[@intCast(usize, pointer - 1)].operation = .insert;
- diffs.items[@intCast(usize, pointer - 1)].text =
+ diffs.items[@as(usize, @intCast(pointer - 1))].operation = .insert;
+ diffs.items[@as(usize, @intCast(pointer - 1))].text =
try allocator.dupe(u8, insertion[0 .. insertion.len - overlap_length2]);
- diffs.items[@intCast(usize, pointer + 1)].operation = .delete;
- diffs.items[@intCast(usize, pointer + 1)].text =
+ diffs.items[@as(usize, @intCast(pointer + 1))].operation = .delete;
+ diffs.items[@as(usize, @intCast(pointer + 1))].text =
try allocator.dupe(u8, deletion[overlap_length2..]);
pointer += 1;
}
@@ -1097,7 +1097,7 @@ pub fn diffCleanupSemanticLossless(
) DiffError!void {
var pointer: usize = 1;
// Intentionally ignore the first and last element (don't need checking).
- while (pointer < @intCast(isize, diffs.items.len) - 1) {
+ while (pointer < @as(isize, @intCast(diffs.items.len)) - 1) {
if (diffs.items[pointer - 1].operation == .equal and
diffs.items[pointer + 1].operation == .equal)
{