| ... | @@ -662,10 +662,15 @@ pub fn order(comptime T: type, lhs: []const T, rhs: []const T) math.Order { | ... | @@ -662,10 +662,15 @@ pub fn order(comptime T: type, lhs: []const T, rhs: []const T) math.Order { |
| 662 | | 662 | |
| 663 | /// Compares two many-item pointers with NUL-termination lexicographically. | 663 | /// Compares two many-item pointers with NUL-termination lexicographically. |
| 664 | pub fn orderZ(comptime T: type, lhs: [*:0]const T, rhs: [*:0]const T) math.Order { | 664 | pub fn orderZ(comptime T: type, lhs: [*:0]const T, rhs: [*:0]const T) math.Order { |
| | 665 | return boundedOrderZ(T, lhs, rhs, std.math.maxInt(usize)); |
| | 666 | } |
| | 667 | |
| | 668 | /// Compares two many-item pointers with NUL-termination lexicographically until some specified bound. |
| | 669 | pub fn boundedOrderZ(comptime T: type, lhs: [*:0]const T, rhs: [*:0]const T, bound: usize) math.Order { |
| 665 | if (lhs == rhs) return .eq; | 670 | if (lhs == rhs) return .eq; |
| 666 | var i: usize = 0; | 671 | var i: usize = 0; |
| 667 | while (lhs[i] == rhs[i] and lhs[i] != 0) : (i += 1) {} | 672 | while (lhs[i] == rhs[i] and lhs[i] != 0 and i < bound) : (i += 1) {} |
| 668 | return math.order(lhs[i], rhs[i]); | 673 | return if (i < bound) math.order(lhs[i], rhs[i]) else .eq; |
| 669 | } | 674 | } |
| 670 | | 675 | |
| 671 | test order { | 676 | test order { |