]> matita.cs.unibo.it Git - helm.git/blob - helm/DEVEL/mathml_editor/src/Diff.hh
* this is a large commit
[helm.git] / helm / DEVEL / mathml_editor / src / Diff.hh
1
2 #ifndef __Diff_hh__
3 #define __Diff_hh__
4
5 #include <GdomeSmartDOM.hh>
6
7 #define XMLNS_NS_URI "http://www.w3.org/2000/xmlns/"
8 #define DDIFF_NS_URI "http://helm.cs.unibo.it/2002/DDIFF"
9
10 namespace GdomeSmartDOMExt
11 {
12  
13   using namespace GdomeSmartDOM;
14
15   class Diff
16   {
17   public:
18     typedef bool (*flatNodeEq)(const Node&, const Node&);
19     static bool defaultFlatNodeEq(const Node&, const Node&);
20
21   private:
22     Diff(const Node& n, const Document& d, flatNodeEq e) : dest(n), doc(d), eq(e) { };
23
24   public:
25     static Diff diff(const Document&, const Document&, flatNodeEq = defaultFlatNodeEq);
26     static Diff diff(const Element&, const Element&, flatNodeEq = defaultFlatNodeEq);
27
28     Document document(void) const { return doc; };
29     Node     node(void) const { return dest; };
30
31     void patch(void) const;
32
33     struct BADDiff
34     {
35       BADDiff(const std::string& s) : msg(s) { };
36       const std::string msg;
37     };
38
39   private:
40     Node diffNodes(const Node&, const Node&) const;
41     bool diffChildren(const Node&, const Node&, const Node&) const;
42     void sameChunk(const Node&, unsigned long) const;
43     void patchRootNode(const Node&, const Element&) const;
44     void patchChildren(const Node&, const Element&) const;
45
46     Document   doc;
47     Node       dest;
48     flatNodeEq eq;
49   };
50
51 }
52
53 #endif // __ddiff_hh__