68 lines
1.8 KiB
C++
68 lines
1.8 KiB
C++
#ifndef DIFF_H__
|
|
#define DIFF_H__
|
|
|
|
#include "Xml.h"
|
|
class DiffOpt {
|
|
public:
|
|
DiffOpt(){
|
|
m_tagOnly = false;
|
|
m_debug = 0;
|
|
m_context = 0;
|
|
m_compare = NULL;
|
|
};
|
|
bool m_tagOnly;
|
|
int m_debug;
|
|
int m_context;
|
|
|
|
int m_eltSize;
|
|
int (*m_compare)(void *arg1, void *arg2);
|
|
};
|
|
|
|
class Diff{
|
|
public:
|
|
// m_op is negative, zero or positive
|
|
// meaning deleted, same or added
|
|
char m_op;
|
|
int32_t m_index1;
|
|
int32_t m_index2;
|
|
int32_t m_length;
|
|
};
|
|
|
|
// Diff 2 xml or html files on stdout
|
|
void diffXmlFiles(char *file1, char *file2, DiffOpt *opt=NULL);
|
|
void printXmlDiff(Xml *xml1, Xml *xml2, DiffOpt *opt=NULL);
|
|
|
|
// longest common subsequence of 2 xml objects
|
|
int32_t lcsXml(int32_t *lcsBuf1, // xml1 indexes of nodes in lcs
|
|
int32_t *lcsBuf2, // xml2 indexes of nodes in lcs
|
|
int32_t *lcsLenBuf, // number of consecutive nodes in each lcsBuf
|
|
int32_t lcsBufLen, // max number of sequence matches we can fit
|
|
Xml *xml1, Xml *xml2, // the xml structures to compare
|
|
DiffOpt *opt,
|
|
const int32_t start1 = 0,
|
|
const int32_t start2 = 0,
|
|
const int32_t n1 = -1, // limit on number of nodes in xml1 and xml2
|
|
const int32_t n2 = -1,
|
|
const int32_t rlevel = 0); // level of recursion
|
|
|
|
|
|
int64_testCommonSubseq(int32_t *outbuf1, // out1 indexes of nodes in lcs
|
|
int32_t *outbuf2, // xml2 indexes of nodes in lcs
|
|
int32_t *outlen, // number of consecutive nodes lcsBuf
|
|
int32_t outbuflen, // Size of output bufs (elts not bytes)
|
|
char *seq1, //int32_t seq1Len,
|
|
char *seq2, //int32_t seq2Len,
|
|
const DiffOpt *opt,
|
|
const int32_t start1,
|
|
const int32_t start2,
|
|
const int32_t argN1, // elt count for seq and seq2
|
|
const int32_t argN2,
|
|
const int32_t rlevel=0);
|
|
|
|
|
|
int xmlNodeCompare(Xml *xml1, const int32_t index1,
|
|
Xml *xml2, const int32_t index2,
|
|
const DiffOpt *opt);
|
|
|
|
#endif
|