17 #ifndef JUBATUS_CORE_COMMON_JSONCONFIG_CAST_HPP_
18 #define JUBATUS_CORE_COMMON_JSONCONFIG_CAST_HPP_
25 #include "jubatus/util/data/unordered_map.h"
26 #include "jubatus/util/lang/shared_ptr.h"
27 #include "jubatus/util/lang/demangle.h"
34 namespace jsonconfig {
36 typedef std::vector<jubatus::util::lang::shared_ptr<config_error> >
41 void append(
const std::string& name) {
56 jubatus::util::data::serialization::named_value<T>&
v) {
74 const jubatus::util::text::json::json&
get()
const {
86 jubatus::util::lang::shared_ptr<config_error>(
new T(e)));
102 template <
typename T>
105 template <
typename T>
107 if (js.
get().type() == jubatus::util::text::json::json::Object) {
110 std::set<std::string> members(collector.
get_members().begin(),
112 for (jubatus::util::text::json::json::const_iterator it = js.
get().begin();
113 it != js.
get().end(); ++it) {
114 const std::string& key = it->first;
115 if (members.count(key) == 0) {
132 jubatus::util::text::json::json::json_type_t t) {
133 if (js.
get().type() != t) {
146 if (js.
get().type() != jubatus::util::text::json::json::Float
147 && js.
get().type() != jubatus::util::text::json::json::Integer) {
150 jubatus::util::text::json::json::Float,
163 #define GENERATE_CONFIG_SERIALIZE_DEF(typ, json_typ) \
165 inline void serialize(json_config_iarchive_cast& js, typ& v) { \
166 if (detail::check_json_type( \
167 js, jubatus::util::text::json::json::json_typ)) { \
168 v = jubatus::util::text::json::json_cast<typ>(js.get()); \
177 #define GENERATE_CONFIG_SERIALIZE_FLOAT_DEF(typ) \
179 inline void serialize(json_config_iarchive_cast& js, typ& v) { \
180 if (detail::check_json_float(js)) { \
181 v = jubatus::util::text::json::json_cast<typ>(js.get()); \
188 template <typename T>
195 size_t size = js.get_config().size();
196 std::vector<T>
v(size);
197 for (
size_t i = 0; i < size; ++i) {
203 template <
typename K,
typename V>
215 tmp[it.key()] = value;
220 template <
typename K,
typename V>
223 jubatus::util::data::unordered_map<K, V>& m) {
228 jubatus::util::data::unordered_map<K, V> tmp;
234 tmp[it.key()] = value;
239 template <
typename T>
242 jubatus::util::data::serialization::named_value<
243 jubatus::util::data::optional<T> >& v) {
244 using jubatus::util::text::json::json;
252 v.v = jubatus::util::data::optional<T>();
256 template <
typename T>
258 jubatus::util::data::serialization::named_value<T>& v) {
274 jubatus::util::text::json::json& v) {
283 template <
typename T>
289 template <
typename T>
316 if (!errors.empty()) {
327 #endif // JUBATUS_CORE_COMMON_JSONCONFIG_CAST_HPP_
T config_cast_check(const config &c)
void serialize(member_collector &mem, jubatus::util::data::serialization::named_value< T > &v)
void push_error(const T &e)
bool check_json_float(json_config_iarchive_cast &js)
bool contain(const std::string &key) const
json_config_iarchive_cast(const config &js, config_error_list *errors)
json_config_iarchive_cast(const config &js)
std::vector< std::string > members_
void serialize(json_config_iarchive_cast &js, config &v)
void append(const std::string &name)
config_error_list * errors() const
#define JUBATUS_EXCEPTION(e)
config_error_list * errors_
const std::vector< std::string > & get_members() const
bool check_json_type(json_config_iarchive_cast &js, jubatus::util::text::json::json::json_type_t t)
void json_from_config(const config &conf, T &v)
#define GENERATE_CONFIG_SERIALIZE_DEF(typ, json_typ)
const jubatus::util::text::json::json & get() const
const config & get_config() const
T config_cast(const config &c)
GENERATE_CONFIG_SERIALIZE_FLOAT_DEF(float) GENERATE_CONFIG_SERIALIZE_FLOAT_DEF(double) template< typename T > inline void serialize(json_config_iarchive_cast &js
const std::string & path() const
const jubatus::util::text::json::json & get() const
std::vector< jubatus::util::lang::shared_ptr< config_error > > config_error_list