41 String::CharPointerType
text;
69 if (ca != cb || ca == 0)
81 int indexA = 0, indexB = 0;
83 b.text,
b.length, indexB);
87 if (indexA > 0 && indexB > 0)
96 StringRegion (
b.text + (indexB + len),
b.start + indexB + len,
b.length - indexB - len));
106 String::CharPointerType
b,
const int lenB,
int& indexInB)
noexcept
108 if (lenA == 0 || lenB == 0)
115 auto scratchSpace =
sizeof (
int) * (2 + 2 * (
size_t) lenB);
117 if (scratchSpace < 4096)
120 auto* scratch = (
int*) alloca (scratchSpace);
131 String::CharPointerType
b,
const int lenB,
int& indexInB,
132 const size_t scratchSpace,
int*
const lines)
noexcept
137 auto* l1 = l0 + lenB + 1;
139 int loopsWithoutImprovement = 0;
142 for (
int i = 0;
i < lenA; ++
i)
144 auto ca =
a.getAndAdvance();
147 for (
int j = 0;
j < lenB; ++
j)
149 if (ca != b2.getAndAdvance())
155 auto len = l0[
j] + 1;
158 if (len > bestLength)
160 loopsWithoutImprovement = 0;
168 if (++loopsWithoutImprovement > 100)
174 indexInA -= bestLength - 1;
175 indexInB -= bestLength - 1;
180 String::CharPointerType
b,
int lenB,
int& indexInB)
noexcept
238 for (
int i =
r.nextInt (numElementsInArray (buffer) - 1); --
i >= 0;)
240 if (
r.nextInt (10) == 0)
244 buffer[
i] = (juce_wchar) (1 +
r.nextInt (0x10ffff - 1));
246 while (! CharPointer_UTF16::canRepresent (buffer[
i]));
252 return CharPointer_UTF32 (buffer);
255 void testDiff (
const String&
a,
const String&
b)
262 void runTest()
override
264 beginTest (
"TextDiff");
266 auto r = getRandom();
268 testDiff (String(), String());
269 testDiff (
"x", String());
270 testDiff (String(),
"x");
273 testDiff (
"xxx",
"x");
274 testDiff (
"x",
"xxx");
276 for (
int i = 1000; --
i >= 0;)
278 auto s = createString (
r);
279 testDiff (
s, createString (
r));
280 testDiff (
s + createString (
r),
s + createString (
r));
285static DiffTests diffTests;
#define noexcept
Definition DistrhoDefines.h:72
uint8_t a
Definition Spc_Cpu.h:141
Definition juce_HeapBlock.h:87
Definition juce_Random.h:35
Definition juce_String.h:53
Definition juce_TextDiff.h:37
TextDiff(const String &original, const String &target)
Definition juce_TextDiff.cpp:199
Array< Change > changes
Definition juce_TextDiff.h:71
String appliedTo(String text) const
Definition juce_TextDiff.cpp:204
Definition juce_UnitTest.h:70
struct huft * t
Definition inflate.c:943
int * td
Definition inflate.c:934
register unsigned j
Definition inflate.c:1576
register unsigned i
Definition inflate.c:1575
unsigned s
Definition inflate.c:1555
virtual ASIOError start()=0
#define JUCE_BEGIN_IGNORE_WARNINGS_MSVC(warnings)
Definition juce_CompilerWarnings.h:198
#define JUCE_END_IGNORE_WARNINGS_MSVC
Definition juce_CompilerWarnings.h:199
Definition juce_UnitTestCategories.h:27
JOCTET * buffer
Definition juce_JPEGLoader.cpp:302
Definition carla_juce.cpp:31
wchar_t juce_wchar
Definition juce_CharacterFunctions.h:42
void zeromem(void *memory, size_t numBytes) noexcept
Definition juce_Memory.h:28
static bool diff(const std::string fn1, const std::string fn2)
Definition playertest.cpp:161
png_uint_32 length
Definition png.c:2247
Definition juce_TextDiff.h:54
String appliedTo(const String &original) const noexcept
Definition juce_TextDiff.cpp:217
int length
Definition juce_TextDiff.h:58
int start
Definition juce_TextDiff.h:57
String insertedText
Definition juce_TextDiff.h:55
bool isDeletion() const noexcept
Definition juce_TextDiff.cpp:212
Definition juce_TextDiff.cpp:32
StringRegion(const String &s) noexcept
Definition juce_TextDiff.cpp:33
int length
Definition juce_TextDiff.cpp:42
StringRegion(String::CharPointerType t, int s, int len) noexcept
Definition juce_TextDiff.cpp:36
int start
Definition juce_TextDiff.cpp:42
String::CharPointerType text
Definition juce_TextDiff.cpp:41
void incrementStart() noexcept
Definition juce_TextDiff.cpp:39
Definition juce_TextDiff.cpp:27
static int findCommonSuffix(String::CharPointerType a, int lenA, int &indexInA, String::CharPointerType b, int lenB, int &indexInB) noexcept
Definition juce_TextDiff.cpp:179
@ maxComplexity
Definition juce_TextDiff.cpp:29
@ minLengthToMatch
Definition juce_TextDiff.cpp:28
static void addInsertion(TextDiff &td, String::CharPointerType text, int index, int length)
Definition juce_TextDiff.cpp:45
static void diffSkippingCommonStart(TextDiff &td, StringRegion a, StringRegion b)
Definition juce_TextDiff.cpp:62
static void diffRecursively(TextDiff &td, StringRegion a, StringRegion b)
Definition juce_TextDiff.cpp:79
static int findLongestCommonSubstring(String::CharPointerType a, const int lenA, int &indexInA, String::CharPointerType b, const int lenB, int &indexInB) noexcept
Definition juce_TextDiff.cpp:105
static int findLongestCommonSubstring(String::CharPointerType a, const int lenA, int &indexInA, String::CharPointerType b, const int lenB, int &indexInB, const size_t scratchSpace, int *const lines) noexcept
Definition juce_TextDiff.cpp:130
static void addDeletion(TextDiff &td, int index, int length)
Definition juce_TextDiff.cpp:54
const char * text
Definition swell-functions.h:167
return c
Definition crypt.c:175
int r
Definition crypt.c:458
int result
Definition process.c:1455
typedef int(UZ_EXP MsgFn)()
#define const
Definition zconf.h:137