#pragma once
#include <map>
// return std::map's value with specified key.
// return default_value if key is not found.
template <typename target_string_t, typename K, typename V>
target_string_t ValueOr(const std::map<K, V>& data, const K& key,
const target_string_t& default_value = target_string_t()) {
auto iter = data.find(key);
if (iter != data.end())
return iter->second;
else
return default_value;
}
#pragma once
#include <atomic>
template<typename Integer>
class Incrementer {
std::atomic<Integer> value_;
public:
explicit Incrementer(Integer initial_value = 0) : value_(initial_value) {}
Integer TakeAndIncrement() { return value_++; }
void Reset(Integer initial_value = 0) { value_ = initial_value; }
};