public static void Copy(string src, Tape dest) { using (StreamReader reader = new StreamReader(src)) { string line; while ((line = reader.ReadLine()) != null) { dest.Append(line); } } }
public static void Merge(Tape dest, CyclicList<Tape> tapes) { //Log.WriteMergeMessage("Merge start"); //Log.WriteMergeMessage("A: " + tapes[0].ShowFile(), 5); //Log.WriteMergeMessage("B: " + tapes[1].ShowFile(), 5); dest.Clean(); tapes.Prepare(); double a1 = (double)tapes.Current.GetNextValue(); double b1 = -1; while (!tapes.Current.IsFinished) { double? nextValue = tapes.Next.GetNextValue(); double b2; if (nextValue != null) b2 = (double)nextValue; else break; // przepisz resztę taśmy if (b2 >= b1) // czy ciągle na tym samym run-ie { if (b2 <= a1) { b1 = b2; dest.Append(b1); } else { dest.Append(a1); tapes.MoveNext(); b1 = a1; a1 = b2; } } else // przepisz resztę run-a { b1 = b2; double a2 = a1; var value = tapes.Current.GetNextValue(); if (value != null) a1 = (double)value; else { dest.Append(a2); tapes.MoveNext(); break; } while (a1 >= a2) { dest.Append(a2); a2 = a1; double? d = tapes.Current.GetNextValue(); if (d != null) a1 = (double)d; else break; } dest.Append(a2); tapes.Next.StepBack(); } } double? v; //dest.Append(a1); tapes.Current.StepBack(); while ((v = tapes.Current.GetNextValue()) != null) { dest.Append((double)v); } //Log.WriteMergeMessage("Result:", 5); Log.WriteMergeMessage("C: " + dest.ShowFile()); //Log.WriteMergeMessage("Merge end"); }