manfred-exz
12/27/2017 - 1:58 AM

algorithm_utils

#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; }
};