本文整理汇总了C#中Differences类的典型用法代码示例。如果您正苦于以下问题:C# Differences类的具体用法?C# Differences怎么用?C# Differences使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
Differences类属于命名空间,在下文中一共展示了Differences类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Fragment
public Fragment(Differences.FragmentType ThisType, string Part, int Location)
{
sb = new StringBuilder();
Type = ThisType;
Position = Location;
sb.Append(Part);
}
示例2: ScriptDifferences
private ExecutionBlock ScriptDifferences(Differences differences)
{
var work = new Work();
work.BuildFromDifferences(differences, Options.Default, true);
ExecutionBlock block = work.ExecutionBlock;
return block;
}
示例3: BuildDiffCode
/// <summary>
/// Build a code that can be used to transform one version of a file into another.
/// </summary>
public static string BuildDiffCode(Differences differences)
{
var sb = new StringBuilder();
int pos = 0;
int del = 0;
string ins = "";
foreach (Fragment frag in differences) {
if (frag.Type == Differences.FragmentType.Unchanged) {
pos += del;
pos -= ins.Length;
if (del > 0 || ins.Length > 0) {
WriteDiffCode(sb, pos-del, del, ins);
}
pos += frag.Length;
del = 0;
ins = "";
} else if (frag.Type == Differences.FragmentType.Deleted) {
del += frag.Length;
} else if (frag.Type == Differences.FragmentType.Inserted) {
pos += frag.Length;
ins += frag.SplitPart;
} else {
throw new Exception("broken frag type");
}
}
// Don't forget the last one!
if (del > 0 || ins.Length > 0) {
WriteDiffCode(sb, pos - del, del, ins);
}
return sb.ToString();
}
示例4: GetClosestMatch
public virtual AttributeNode GetClosestMatch(AttributeNode/*!*/ nd1, AttributeList/*!*/ list1, AttributeList list2, int list1pos, ref int list2start,
TrivialHashtable/*!*/ matchedNodes, out Differences closestDifferences, out int list2pos) {
closestDifferences = null; list2pos = -1;
if (list2 == null) return null;
if (nd1 == null || list1 == null || matchedNodes == null || list1pos < 0 || list1pos >= list1.Count || list2start < 0 || list2start >= list2.Count) {
Debug.Assert(false); return null;
}
AttributeNode closest = null;
Differences winnerSoFar = null;
for (int j = list2start, m = list2.Count; j < m; j++){
AttributeNode nd2 = list2[j];
if (list2start == j) list2start++;
if (nd2 == null) continue;
if (matchedNodes[nd2.UniqueKey] != null) continue;
Differences diff = this.GetDifferences(nd1, nd2);
if (diff == null){Debug.Assert(false); continue;}
if (diff.Similarity <= 0.5){
//Not a good enough match
if (list2start == j+1) list2start--; //The next call to GetClosestMatch will start looking at list2start, so this node will be considered then
continue; //ignore it for the rest of this call
}
if (winnerSoFar != null && winnerSoFar.Similarity >= diff.Similarity) continue;
winnerSoFar = closestDifferences = diff;
closest = nd2;
list2pos = j;
if (diff.NumberOfDifferences == 0) return closest; //Perfect match, no need to look for other matches
}
if (closest != null){
//^ assert winnerSoFar != null;
//closest is closer to nd1 than any other node in list2, but this is no good if some other node in list1 has a better claim on closest
for (int i = list1pos+1, n = list1.Count; i < n; i++){
AttributeNode nd1alt = list1[i];
if (nd1alt == null) continue;
if (matchedNodes[nd1alt.UniqueKey] != null) continue;
Differences diff = this.GetDifferences(nd1alt, closest);
if (diff == null){Debug.Assert(false); continue;}
if (diff.Similarity <= winnerSoFar.Similarity) continue;
//nd1alt has a better claim on closest. See if it wants closest.
Differences diff2;
int j, k = list2start;
AttributeNode nd2alt = this.GetClosestMatch(nd1alt, list1, list2, i, ref k, matchedNodes, out diff2, out j);
if (nd2alt != closest){
Debug.Assert(nd2alt != null && diff2 != null && diff2.Similarity >= diff.Similarity);
continue; //nd1alt prefers nd2alt to closest, so closest is still available
}
//nd1alt wants closest, take it out of the running
matchedNodes[closest.UniqueKey] = nd1alt;
//Now that closest is out of the running, try again
k = list2start;
AttributeNode newClosest = this.GetClosestMatch(nd1, list1, list2, i, ref k, matchedNodes, out winnerSoFar, out list2pos);
//put closest back in the running so that the next call to this routine will pick it up
matchedNodes[closest.UniqueKey] = closest;
closest = newClosest;
break;
}
}
closestDifferences = winnerSoFar;
return closest;
}
示例5: Page_Load
protected void Page_Load(object sender, EventArgs e)
{
string left = File.ReadAllText(Server.MapPath("~/Examples/DeOfficiis.txt"));
//string left = File.ReadAllText(Server.MapPath("~/Examples/DeOfficiis_Recombined.txt"));
string right = File.ReadAllText(Server.MapPath("~/Examples/DeOfficiis_Altered.txt"));
//string right = File.ReadAllText(Server.MapPath("~/Examples/DeOfficiis_Minor_Altered.txt"));
//string right = File.ReadAllText(Server.MapPath("~/Examples/TotallyDifferent.txt"));
GC.Collect(3, GCCollectionMode.Forced); // give the algorithm a fair shot...
var sw = new System.Diagnostics.Stopwatch();
sw.Start();
var differences = new Differences(left, right, Differences.PerWord);
sw.Stop();
Repeater1.DataSource = from d in differences
select new Fragment(d.Type,
HttpContext.Current.Server.HtmlEncode(d.SplitPart).Replace("\n", "<br/>"), d.Position);
Repeater1.DataBind();
Response.Write("DocDiff took " + sw.Elapsed.TotalSeconds + " seconds<br/>");
// This gives a code to convert LEFT into RIGHT
// Is a revision repository, the older file would be RIGHT, and the newer be LEFT.
sw.Reset();
sw.Start();
byte[] final_out = DiffCode.StorageDiffCode(differences);
sw.Stop();
Response.Write("DocDiff-code took " + sw.Elapsed.TotalSeconds + " seconds<br/>");
double sizePc = ((double)final_out.Length / right.Length) * 100.0;
Response.Write("<br/>DocDiff code size: " + (final_out.Length / 1024) + "KiB which is " + sizePc.ToString("0.0") + "% of the resulting file");
Response.Write("<br/>diff code contains " + differences.Count() + " alterations.");
sw.Reset();
sw.Start();
File.WriteAllText(Server.MapPath("~/Examples/DeOfficiis_Recombined.txt"),
DiffCode.BuildRevision(left, DiffCode.BuildDiffCode(differences)));
sw.Stop();
Response.Write("<br/>Rebuild and write took " + sw.Elapsed.TotalSeconds + " seconds<br/>");
}
示例6: LogChanges
private void LogChanges(string zipFilePath, Differences differences)
{
Console.WriteLine("In {0}...", zipFilePath);
Logger.Info("In {0}...", zipFilePath);
var added = differences.Added;
var changed = differences.Changed;
var removed = differences.Removed;
int numberOfDifferences = added.Count + changed.Count + removed.Count;
if (numberOfDifferences > 0)
{
Console.WriteLine("Number of differences = {0}.", numberOfDifferences);
Logger.Info("Number of differences = {0}.", numberOfDifferences);
}
if (added.Any())
{
Console.WriteLine("Added...");
Logger.Info("Added...");
added.Keys.ToList().ForEach(k => { Console.WriteLine(k); Logger.Info(k); });
}
if (changed.Any())
{
Console.WriteLine("Changed...");
Logger.Info("Changed...");
changed.Keys.ToList().ForEach(k => { Console.WriteLine(k); Logger.Info(k); });
}
if (removed.Any())
{
Console.WriteLine("Removed...");
Logger.Info("Removed...");
removed.Keys.ToList().ForEach(k => { Console.WriteLine(k); Logger.Info(k); });
}
}
示例7: GetMemberDifferences
public virtual Differences GetMemberDifferences(Member member1, Member member2) {
if (member1 == null || member2 == null) return new Differences(member1, member2);
if (this.memberDifferencesMapFor == null) this.memberDifferencesMapFor = new TrivialHashtable();
TrivialHashtable map = this.memberDifferencesMapFor[member1.UniqueKey] as TrivialHashtable;
if (map == null) this.memberDifferencesMapFor[member1.UniqueKey] = map = new TrivialHashtable();
Differences differences = map[member2.UniqueKey] as Differences;
if (differences == null){
map[member2.UniqueKey] = differences = new Differences(member1, member2);
if (member1 == member2) differences.NumberOfSimilarities++;
}
return differences;
}
示例8: VisitQueryUpdate
public virtual Differences VisitQueryUpdate(QueryUpdate update1, QueryUpdate update2){
Differences differences = new Differences(update1, update2);
if (update1 == null || update2 == null){
if (update1 != update2) differences.NumberOfDifferences++; else differences.NumberOfSimilarities++;
return differences;
}
QueryUpdate changes = (QueryUpdate)update2.Clone();
QueryUpdate deletions = (QueryUpdate)update2.Clone();
QueryUpdate insertions = (QueryUpdate)update2.Clone();
// update1.Context;
// update1.Source;
// update1.UpdateList;
if (differences.NumberOfDifferences == 0){
differences.Changes = null;
differences.Deletions = null;
differences.Insertions = null;
}else{
differences.Changes = changes;
differences.Deletions = deletions;
differences.Insertions = insertions;
}
return differences;
}
示例9: VisitQueryTypeFilter
public virtual Differences VisitQueryTypeFilter(QueryTypeFilter filter1, QueryTypeFilter filter2){
Differences differences = new Differences(filter1, filter2);
if (filter1 == null || filter2 == null){
if (filter1 != filter2) differences.NumberOfDifferences++; else differences.NumberOfSimilarities++;
return differences;
}
QueryTypeFilter changes = (QueryTypeFilter)filter2.Clone();
QueryTypeFilter deletions = (QueryTypeFilter)filter2.Clone();
QueryTypeFilter insertions = (QueryTypeFilter)filter2.Clone();
// filter1.Constraint;
// filter1.Source;
if (differences.NumberOfDifferences == 0){
differences.Changes = null;
differences.Deletions = null;
differences.Insertions = null;
}else{
differences.Changes = changes;
differences.Deletions = deletions;
differences.Insertions = insertions;
}
return differences;
}
示例10: VisitQuerySingleton
public virtual Differences VisitQuerySingleton(QuerySingleton singleton1, QuerySingleton singleton2){
Differences differences = new Differences(singleton1, singleton2);
if (singleton1 == null || singleton2 == null){
if (singleton1 != singleton2) differences.NumberOfDifferences++; else differences.NumberOfSimilarities++;
return differences;
}
QuerySingleton changes = (QuerySingleton)singleton2.Clone();
QuerySingleton deletions = (QuerySingleton)singleton2.Clone();
QuerySingleton insertions = (QuerySingleton)singleton2.Clone();
//singleton1.Source;
if (differences.NumberOfDifferences == 0){
differences.Changes = null;
differences.Deletions = null;
differences.Insertions = null;
}else{
differences.Changes = changes;
differences.Deletions = deletions;
differences.Insertions = insertions;
}
return differences;
}
示例11: VisitQueryQuantifiedExpression
public virtual Differences VisitQueryQuantifiedExpression(QueryQuantifiedExpression qqe1, QueryQuantifiedExpression qqe2){
Differences differences = new Differences(qqe1, qqe2);
if (qqe1 == null || qqe2 == null){
if (qqe1 != qqe2) differences.NumberOfDifferences++; else differences.NumberOfSimilarities++;
return differences;
}
QueryQuantifiedExpression changes = (QueryQuantifiedExpression)qqe2.Clone();
QueryQuantifiedExpression deletions = (QueryQuantifiedExpression)qqe2.Clone();
QueryQuantifiedExpression insertions = (QueryQuantifiedExpression)qqe2.Clone();
// qqe1.Expression;
// qqe1.Left;
// qqe1.Right;
if (differences.NumberOfDifferences == 0){
differences.Changes = null;
differences.Deletions = null;
differences.Insertions = null;
}else{
differences.Changes = changes;
differences.Deletions = deletions;
differences.Insertions = insertions;
}
return differences;
}
示例12: VisitQueryRollback
public virtual Differences VisitQueryRollback(QueryRollback qr1, QueryRollback qr2){
Differences differences = new Differences(qr1, qr2);
if (qr1 == null || qr2 == null){
if (qr1 != qr2) differences.NumberOfDifferences++; else differences.NumberOfSimilarities++;
}else
differences.Changes = null;
return differences;
}
示例13: VisitQueryGroupBy
public virtual Differences VisitQueryGroupBy(QueryGroupBy groupby1, QueryGroupBy groupby2){
Differences differences = new Differences(groupby1, groupby2);
if (groupby1 == null || groupby2 == null){
if (groupby1 != groupby2) differences.NumberOfDifferences++; else differences.NumberOfSimilarities++;
return differences;
}
QueryGroupBy changes = (QueryGroupBy)groupby2.Clone();
QueryGroupBy deletions = (QueryGroupBy)groupby2.Clone();
QueryGroupBy insertions = (QueryGroupBy)groupby2.Clone();
// groupby1.AggregateList;
// groupby1.GroupContext;
// groupby1.GroupList;
// groupby1.Having;
// groupby1.HavingContext;
// groupby1.Source;
if (differences.NumberOfDifferences == 0){
differences.Changes = null;
differences.Deletions = null;
differences.Insertions = null;
}else{
differences.Changes = changes;
differences.Deletions = deletions;
differences.Insertions = insertions;
}
return differences;
}
示例14: VisitQueryExists
public virtual Differences VisitQueryExists(QueryExists exists1, QueryExists exists2){
Differences differences = new Differences(exists1, exists2);
if (exists1 == null || exists2 == null){
if (exists1 != exists2) differences.NumberOfDifferences++; else differences.NumberOfSimilarities++;
return differences;
}
QueryExists changes = (QueryExists)exists2.Clone();
QueryExists deletions = (QueryExists)exists2.Clone();
QueryExists insertions = (QueryExists)exists2.Clone();
// exists1.Source;
if (differences.NumberOfDifferences == 0){
differences.Changes = null;
differences.Deletions = null;
differences.Insertions = null;
}else{
differences.Changes = changes;
differences.Deletions = deletions;
differences.Insertions = insertions;
}
return differences;
}
示例15: VisitQueryDistinct
public virtual Differences VisitQueryDistinct(QueryDistinct distinct1, QueryDistinct distinct2){
Differences differences = new Differences(distinct1, distinct2);
if (distinct1 == null || distinct2 == null){
if (distinct1 != distinct2) differences.NumberOfDifferences++; else differences.NumberOfSimilarities++;
return differences;
}
QueryDistinct changes = (QueryDistinct)distinct2.Clone();
QueryDistinct deletions = (QueryDistinct)distinct2.Clone();
QueryDistinct insertions = (QueryDistinct)distinct2.Clone();
// distinct1.Context;
// distinct1.Group;
// distinct1.GroupTarget;
// distinct1.Source;
if (differences.NumberOfDifferences == 0){
differences.Changes = null;
differences.Deletions = null;
differences.Insertions = null;
}else{
differences.Changes = changes;
differences.Deletions = deletions;
differences.Insertions = insertions;
}
return differences;
}