#include "utils.h"
#include <cstdio>
#include <cstdlib>
#include <iostream>
namespace internal {
FatalLogMessage::~FatalLogMessage() {
fprintf(stderr, "Fatal error: %s\n", str().c_str());
exit(EXIT_FAILURE);
}
}
Timer::Timer() : t1_(std::chrono::high_resolution_clock::now()) {}
double Timer::elapsed() {
auto t2 = std::chrono::high_resolution_clock::now();
std::chrono::duration<double> elapsed = t2 - t1_;
return elapsed.count();
}
namespace {
void usage_and_exit(const std::string& progname) {
std::cout << "Expecting " << progname << " [flags] <BF file>\n";
std::cout << "\nSupported flags:\n";
std::cout << " --verbose enable verbose output\n";
exit(EXIT_SUCCESS);
}
}
void parse_command_line(int argc, const char** argv, std::string* bf_file_path,
bool* verbose) {
*verbose = false;
int arg_i = 1;
for (; arg_i < argc; ++arg_i) {
std::string arg = argv[arg_i];
if (!(arg.size() > 2 && arg[0] == '-' && arg[1] == '-')) {
break;
} else if (arg == "--verbose") {
*verbose = true;
} else if (arg == "--help") {
usage_and_exit(argv[0]);
} else {
usage_and_exit(argv[0]);
}
}
if (arg_i >= argc) {
usage_and_exit(argv[0]);
}
*bf_file_path = argv[arg_i];
}