diff options
Diffstat (limited to 'src/samples/Dtf/DDiff/IDiffEngine.cs')
-rw-r--r-- | src/samples/Dtf/DDiff/IDiffEngine.cs | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/samples/Dtf/DDiff/IDiffEngine.cs b/src/samples/Dtf/DDiff/IDiffEngine.cs new file mode 100644 index 00000000..9895d6ff --- /dev/null +++ b/src/samples/Dtf/DDiff/IDiffEngine.cs | |||
@@ -0,0 +1,68 @@ | |||
1 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. | ||
2 | |||
3 | using System; | ||
4 | using System.IO; | ||
5 | using System.Collections; | ||
6 | |||
7 | namespace WixToolset.Dtf.Samples.DDiff | ||
8 | { | ||
9 | public interface IDiffEngine | ||
10 | { | ||
11 | float GetDiffQuality(string diffInput1, string diffInput2, string[] options, IDiffEngineFactory diffFactory); | ||
12 | |||
13 | bool GetDiff(string diffInput1, string diffInput2, string[] options, TextWriter diffOutput, string linePrefix, IDiffEngineFactory diffFactory); | ||
14 | |||
15 | IDiffEngine Clone(); | ||
16 | } | ||
17 | |||
18 | public interface IDiffEngineFactory | ||
19 | { | ||
20 | IDiffEngine GetDiffEngine(string diffInput1, string diffInput2, string[] options); | ||
21 | } | ||
22 | |||
23 | public class BestQualityDiffEngineFactory : IDiffEngineFactory | ||
24 | { | ||
25 | public virtual IDiffEngine GetDiffEngine(string diffInput1, string diffInput2, string[] options) | ||
26 | { | ||
27 | float bestDiffQuality = 0; | ||
28 | IDiffEngine bestDiffEngine = null; | ||
29 | |||
30 | foreach(IDiffEngine diffEngine in diffEngines) | ||
31 | { | ||
32 | float diffQuality = diffEngine.GetDiffQuality(diffInput1, diffInput2, options, this); | ||
33 | if(diffQuality > bestDiffQuality) | ||
34 | { | ||
35 | bestDiffQuality = diffQuality; | ||
36 | bestDiffEngine = diffEngine; | ||
37 | } | ||
38 | } | ||
39 | return (bestDiffEngine != null ? bestDiffEngine.Clone() : null); | ||
40 | } | ||
41 | |||
42 | public BestQualityDiffEngineFactory() : this(null) { } | ||
43 | public BestQualityDiffEngineFactory(IDiffEngine[] diffEngines) | ||
44 | { | ||
45 | this.diffEngines = (diffEngines != null ? new ArrayList(diffEngines) : new ArrayList()); | ||
46 | } | ||
47 | |||
48 | protected IList diffEngines; | ||
49 | |||
50 | public virtual void Add(IDiffEngine diffEngine) | ||
51 | { | ||
52 | diffEngines.Add(diffEngine); | ||
53 | } | ||
54 | |||
55 | public virtual void Remove(IDiffEngine diffEngine) | ||
56 | { | ||
57 | diffEngines.Remove(diffEngine); | ||
58 | } | ||
59 | |||
60 | public IList DiffEngines | ||
61 | { | ||
62 | get | ||
63 | { | ||
64 | return ArrayList.ReadOnly(diffEngines); | ||
65 | } | ||
66 | } | ||
67 | } | ||
68 | } | ||