2013-02-15 3 views
-1

Есть ли какой-либо проект или библиотека с открытым исходным кодом, которая имеет возможность сравнивать две строки в пути GNU diff, но без запуска внешнего процесса и работы с буферами памяти вместо файлов?Сравните две строки (аналогично тому, как это делает GNU diff)

То есть, что-то выглядит как гипотетическая функция:

comparison_result* diff(wchar_t *text1, wchar_t *text2); 

Я смотрел на GNU diffutils' source code, надеясь, что он будет использовать такую ​​функцию внутри, но, к сожалению, она читает файлы поблочна, вместо того, чтобы читать их в буфер памяти и сравнивать их. Сам код довольно запутан, и я не могу это понять очень хорошо, не говоря уже о его переписывании.

Есть ли такая функция в проекте с открытым исходным кодом?

+0

[Это может помочь] (http://en.wikipedia.org/wiki/Diff#Algorithm). –

ответ

2

Исходный код для программ/функций diffutils действительно трудно адаптировать для этой цели, учитывая, что он использует несколько частичной буферизации файлов во время алгоритма сравнения.

Однако функциональность, выполняемая diff, на самом деле не является революционной или труднопроизносимой. И он был воспроизведен в других библиотеках. Например, библиотека google-diff-match-patch из google-кода, это API немного грубо, но, похоже, это делает работу.

Другая возможность заключается в том, чтобы записывать ваши данные в буферы в памяти FILE*, а затем использовать функции diffutils, чтение и запись в эти буферы в памяти. Вы можете создать такие буферы с помощью fmemopen.

+0

Ухоженный, я не знал про fmemopen. Но в Visual Studio это кажется недоступным. Доступен ли он в MinGW (я на Windows)? – sashoalm

+0

google-diff-match-patch - вот что мне нужно, спасибо! – sashoalm