Files
MP-SPDZ/Tools/CodeLocations.cpp
2025-12-24 13:47:42 +11:00

65 lines
1.7 KiB
C++

/*
* CodeLocations.cpp
*
*/
#include "CodeLocations.h"
#include "Processor/OnlineOptions.h"
CodeLocations CodeLocations::singleton;
void CodeLocations::maybe_output(const char* file, int line,
const char* function)
{
if (OnlineOptions::singleton.code_locations)
singleton.output(file, line, function);
}
void CodeLocations::output(const char* file, int line,
const char* function)
{
location_type location({file, line, function});
lock.lock();
bool always = OnlineOptions::singleton.has_option("all_locations");
if (always or done.find(location) == done.end())
{
if (not always)
cerr << "first ";
cerr << "call to " << file << ":" << line << ", " << function
<< endl;
}
done.insert(location);
lock.unlock();
}
LocationScope::LocationScope(const char* file, int line, const char* function) :
file(file), function(function), line(line)
{
output_scope = OnlineOptions::singleton.has_option("location_scope");
time_scope = OnlineOptions::singleton.has_option("location_time");
if (output_scope)
cerr << "call to " << file << ":" << line << ", " << function
<< endl;
else
CodeLocations::maybe_output(file, line, function);
if (time_scope)
timer.start();
}
LocationScope::~LocationScope()
{
if (output_scope or time_scope)
{
stringstream desc;
desc << file << ":" << line << ", " << function;
if (time_scope)
{
auto time = timer.elapsed() * 1e6;
cerr << "after " << time << " microseconds, ";
}
cerr << "leaving " << desc.str() << endl;
}
}