// Description: An associative container for arbitrary data.
// Documentation: undocumented.txt
#ifndef PASTELSYS_ANYSTORAGE_H
#define PASTELSYS_ANYSTORAGE_H
#include <boost/any.hpp>
#include <string>
#include <unordered_map>
namespace Pastel
{
class AnyStorage
{
private:
typedef std::unordered_map<std::string, boost::any>
DataSet;
using ConstIterator = DataSet::const_iterator;
public:
template <typename Type>
void set(const std::string& name, const Type& data)
{
dataSet_.insert(std::make_pair(name, boost::any(data)));
}
template <typename Type>
Type get(const std::string& name, const Type& defaultReturn = Type())
{
ConstIterator iter = dataSet_.find(name);
if (iter == dataSet_.end())
{
return defaultReturn;
}
try
{
return boost::any_cast<Type>(iter->second);
}
catch(boost::bad_any_cast&)
{
// Absorb.
}
return defaultReturn;
}
private:
std::unordered_map<std::string, boost::any> dataSet_;
};
}
#endif