private static void SearchAndRemovePackage(SourceComparer sourceComparer, Package package)
 {
     if (sourceComparer.SourceB.Equals(package.SourceA) && sourceComparer.SourceB.Equals(package.SourceB))
     {
         sourceComparer.Packages.Remove(sourceComparer.Packages.Find(p => p.Name.Equals(package.Name)));
     }
 }
예제 #2
0
        public SourceSortType(string id, string label, SortType sortType, IComparer <Source> comparer)
        {
            this.id        = id;
            this.label     = label;
            this.sort_type = sortType;

            this.comparer            = new SourceComparer();
            this.comparer.Comparer   = comparer;
            this.comparer.Descending = sort_type == SortType.Descending;
        }
예제 #3
0
        public static async Task Main(string[] args)
        {
            var totalTimeStopwatch = Stopwatch.StartNew();

            //// Load files
            var loadFileStopWatch = Stopwatch.StartNew();

            Console.WriteLine($"Loading file data...");

            var loader   = new FileLoader();
            var rawFiles = loader.LoadAllFiles(@"C:\projects\linux", filename => filename.EndsWith(".c", StringComparison.OrdinalIgnoreCase) || filename.EndsWith(".h", StringComparison.OrdinalIgnoreCase)).ToArray();

            loadFileStopWatch.Stop();

            Console.WriteLine($"{rawFiles.Length} files loaded into memory");
            Console.WriteLine($"Loading files took {loadFileStopWatch.ElapsedMilliseconds}ms");

            var filesToProcess = rawFiles.ToArray();

            Console.WriteLine($"Processing files to statements from {filesToProcess.Length} files...");

            var toStatementsStopwatch = Stopwatch.StartNew();

            var fileParser = new FileParser();

            var sourceFiles = fileParser.ParseFiles(filesToProcess);

            Console.WriteLine($"Processing files to statements done after {toStatementsStopwatch.ElapsedMilliseconds}ms ...");

            //// Find duplicates

            var findDuplicatesTimer = Stopwatch.StartNew();

            // Sort by path to ensure we always test the same files
            var sourceFileArray = sourceFiles.OrderBy(sf => sf.FullPath).Take(100).ToArray();

            Console.WriteLine($"Finding duplicates in {sourceFileArray.Length} files...");

            var sourceComparer  = new SourceComparer();
            var duplicateResult = sourceComparer.FindDuplicates(sourceFileArray);

            findDuplicatesTimer.Stop();

            Console.WriteLine($"{duplicateResult.uniqueDuplicates} unique duplicate statements found with a total of {duplicateResult.duplicateInstances} instances");

            Console.WriteLine($"Finding duplicates in {sourceFileArray.Length} files done after {findDuplicatesTimer.ElapsedMilliseconds}ms...");

            //// All done

            totalTimeStopwatch.Stop();

            Console.WriteLine($"Total processing time {totalTimeStopwatch.ElapsedMilliseconds}ms");

            Console.ReadKey(false);
        }