public void Generate(int amount, int max) { int record; df.OpenSaveStream("MainFile.txt"); for (int i = 0; i < amount; i++) { record = random.Next(1, max); df.SaveRecord(record, "MainFile.txt"); } df.FlushRecordBuffer("MainFile.txt"); df.CloseStream("MainFile.txt"); df.ZeroWriteOp(); }
public static void FibonacciMerge(DiskFunctionality df, RunInfo ri, string tape1, string tape2, string tape3, bool show, bool showDiv) { int phases = 0; int input1Runs = ri.GetRuns(tape1), input2Runs = ri.GetRuns(tape2); string input1 = tape1, input2 = tape2, output = tape3; Console.WriteLine("Phase " + phases + " finished. Tape content:"); if (show) { df.OpenReadStream(input1); df.OpenReadStream(input2); Console.WriteLine("\n" + input1 + " content:"); df.ShowFileContent(input1, showDiv); Console.WriteLine("\n" + input2 + " content:"); df.ShowFileContent(input2, showDiv); df.CloseStream(input1); df.CloseStream(input2); } df.OpenReadStream(input1); df.OpenReadStream(input2); df.OpenSaveStream(output); while (true) { if (input1Runs > input2Runs) { for (int i = 0; i < input2Runs; i++) { MergeRuns(df, input1, input2, output); } input1Runs -= input2Runs; df.FlushRecordBuffer(output); df.CloseStream(output); df.CloseStream(input2); phases++; Console.WriteLine("Phase " + phases + " finished. Tape content:"); if (show) { df.OpenReadStream(output); Console.WriteLine("\n" + input1 + " content:"); df.ShowFileContent(input1, showDiv); Console.WriteLine("\n" + output + " content:"); df.ShowFileContent(output, showDiv); df.CloseStream(output); } swap(ref input2, ref output); df.OpenSaveStream(output); df.OpenReadStream(input2); } else if (input1Runs < input2Runs) { for (int i = 0; i < input1Runs; i++) { MergeRuns(df, input1, input2, output); } input2Runs -= input1Runs; df.FlushRecordBuffer(output); df.CloseStream(output); df.CloseStream(input1); phases++; Console.WriteLine("Phase " + phases + " finished. Tape content:"); if (show) { df.OpenReadStream(output); Console.WriteLine("\n" + input2 + " content:"); df.ShowFileContent(input2, showDiv); Console.WriteLine("\n" + output + " content:"); df.ShowFileContent(output, showDiv); df.CloseStream(output); } swap(ref input1, ref output); df.OpenSaveStream(output); df.OpenReadStream(input1); } else if (input1Runs == 1 && input2Runs == 1) { MergeRuns(df, input1, input2, output); df.CloseStream(input1); df.CloseStream(input2); df.FlushRecordBuffer(output); df.CloseStream(output); phases++; Console.WriteLine("\n" + "File after sorting:"); df.OpenReadStream(output); df.ShowFileContent(output, true); df.CloseStream(output); Console.WriteLine("Number of phases: " + phases); return; } } }
public static RunInfo DivideBetweenTapes(DiskFunctionality df, string main, string tape1, string tape2) { int record = -1, previousRecord; int whichTape = 1, tape1Runs = 0, tape2Runs = 0, whichFibonacci = 0; int fibbNumber = GetFibonacciNumber(whichFibonacci); df.OpenReadStream(main); df.OpenSaveStream(tape1); df.OpenSaveStream(tape2); while (true) { previousRecord = record; record = df.ReadRecord(main); if (record == -1) { break; } if (whichTape == 1) { if (Compare(previousRecord, record)) { df.SaveRecord(record, tape1); } else { tape1Runs++; if (tape1Runs == fibbNumber) { df.SaveRecord(record, tape2); whichTape = 2; whichFibonacci++; fibbNumber = GetFibonacciNumber(whichFibonacci); } else { df.SaveRecord(record, tape1); } } } else { if (Compare(previousRecord, record)) { df.SaveRecord(record, tape2); } else { tape2Runs++; if (tape2Runs == fibbNumber) { df.SaveRecord(record, tape1); whichTape = 1; whichFibonacci++; fibbNumber = GetFibonacciNumber(whichFibonacci); } else { df.SaveRecord(record, tape2); } } } } if (whichTape == 1)// dummy runs { tape1Runs = GetFibonacciNumber(whichFibonacci); } else { tape2Runs = GetFibonacciNumber(whichFibonacci); } df.FlushRecordBuffer(tape1); df.FlushRecordBuffer(tape2); df.CloseStream(main); df.CloseStream(tape1); df.CloseStream(tape2); Console.WriteLine("Divide finished. Sorting..."); return(new RunInfo(tape1Runs, tape2Runs)); }