21 #include <unordered_map>
30 void Record(
const void* item,
const char* fmt, ...) {
38 void RecordArgs(
const void* item,
const char* fmt, va_list args) {
40 vsnprintf(buffer,
sizeof(buffer), fmt, args);
41 map_[item].emplace_back(buffer);
47 auto it =
map_.find(item);
51 for (
const auto& explanation : it->second)
52 out->push_back(explanation);
56 std::unordered_map<const void*, std::vector<std::string>>
map_;
65 void Record(
const void* item,
const char* fmt, ...) {
74 void RecordArgs(
const void* item,
const char* fmt, va_list args) {
A class used to record a list of explanation strings associated with a given 'item' pointer.
void LookupAndAppend(const void *item, std::vector< std::string > *out)
Lookup the explanations recorded for |item|, and append them to |*out|, if any.
void Record(const void *item, const char *fmt,...)
Record an explanation for |item| if this instance is enabled.
void RecordArgs(const void *item, const char *fmt, va_list args)
Same as Record(), but uses a va_list to pass formatting arguments.
std::unordered_map< const void *, std::vector< std::string > > map_
Convenience wrapper for an Explanations pointer, which can be null if no explanations need to be reco...
void RecordArgs(const void *item, const char *fmt, va_list args)
Explanations * explanations_
Explanations * ptr() const
OptionalExplanations(Explanations *explanations)
void Record(const void *item, const char *fmt,...)
void LookupAndAppend(const void *item, std::vector< std::string > *out)