Пример #1
0
        RuntimeStats Exec(string[] input)
        {
            var stats     = new RuntimeStats();
            var registers = new Dictionary <string, int>();

            foreach (var line in input)
            {
                var instruction = Parse(line);
                var regV        = registers.GetOrDefault(instruction.CondRegister);
                var opV         = instruction.CondValue;
                if (!instruction.CondOp(regV, opV))
                {
                    continue;
                }

                regV = registers.GetOrDefault(instruction.Register);
                opV  = instruction.Value;
                var result = instruction.Op(regV, opV);
                registers[instruction.Register] = result;

                if (stats.LifetimeMaxGegisterValue < result)
                {
                    stats.LifetimeMaxGegisterValue = result;
                }
            }

            foreach (var v in registers.Values)
            {
                if (stats.FinalMaxRegisterValue < v)
                {
                    stats.FinalMaxRegisterValue = v;
                }
            }

            return(stats);
        }
Пример #2
0
        static int Main(string[] args)
        {
            var directories = new List <DirectoryInfo>();
            var switches    = new List <string>();

            var maybeSwitch = true;

            foreach (var arg in args)
            {
                if (maybeSwitch)
                {
                    if (arg.StartsWithAny("-", "/"))
                    {
                        switches.Add(arg);
                        continue;
                    }

                    maybeSwitch = false;
                }

                var directory = new DirectoryInfo(arg);

                if (!directory.Exists)
                {
                    Console.WriteLine($"[Error] Directory {arg} not found - Aborting!");
                    return((int)CLI.ExitCode.DirectoryNotFound);
                }

                directories.Add(directory);
            }

            // add current directory if none passed
            if (!directories.Any())
            {
                directories.Add(new DirectoryInfo(Environment.CurrentDirectory));
            }

            var configuration = new Configuration();

            CLI.ProcessCommandLine(switches, configuration);
            var stats = new RuntimeStats();

            DuplicateFileMerger.ProcessFolders(directories, configuration, stats);
            Console.WriteLine();
            Console.WriteLine("Statistics");
            Console.WriteLine();
            Console.WriteLine("         HardLinks  SymbolicLinks");
            Console.WriteLine($"Created  {stats.HardLinkStats.Created,9:N0}  {stats.SymbolicLinkStats.Created,13:N0}");
            Console.WriteLine($"Removed  {stats.HardLinkStats.Removed,9:N0}  {stats.SymbolicLinkStats.Removed,13:N0}");
            Console.WriteLine($"Deleted  {stats.HardLinkStats.Deleted,9:N0}  {stats.SymbolicLinkStats.Deleted,13:N0}");
            Console.WriteLine($"Seen     {stats.HardLinkStats.Seen,9:N0}  {stats.SymbolicLinkStats.Seen,13:N0}");
            Console.WriteLine();
            Console.WriteLine($"Folders Total : {stats.FolderCount:N0}");
            Console.WriteLine($"Files Total   : {stats.FileCount:N0}");
            Console.WriteLine($"Bytes Total   : {stats.BytesTotal:N0} ({FilesizeFormatter.FormatIEC(stats.BytesTotal,"N1")})");


#if DEBUG
            Console.WriteLine("READY.");
            Console.ReadKey();
#endif

            return((int)CLI.ExitCode.Success);
        }