static void set_global_variable(persist_context &ctx, const vconfig &pcfg) { if (pcfg["from_local"].empty()) { clear_global_variable(ctx, pcfg); } else { std::string global = pcfg["to_global"]; std::string local = pcfg["from_local"]; config val; const config &vars = resources::gamedata->get_variables(); size_t arraylen = vars.child_count(local); if (arraylen == 0) { try { val = pack_scalar(global,resources::gamedata->get_variable(local)); } catch(const invalid_variablename_exception&) { val = config(); } } else { for (size_t i = 0; i < arraylen; i++) val.add_child(global,vars.child(local,i)); } ctx.set_var(global, val, pcfg["immediate"].to_bool()); } }
config persist_file_context::get_var(const std::string &global) const { config ret; const config *active = get_node(cfg_, namespace_); if (active && (active->has_child("variables"))) { const config &cfg = active->child("variables"); size_t arrsize = cfg.child_count(global); if (arrsize > 0) { for (size_t i = 0; i < arrsize; i++) ret.add_child(global,cfg.child(global,i)); } else { ret = pack_scalar(global,cfg[global]); } } else { ret = pack_scalar(global,""); } return ret; }
config persist_file_context::get_var(const std::string &global) const { config ret; // if (cfg_.empty()) { // load_persist_data(namespace_,cfg_,false); // } config &cfg = active_->cfg_.child("variables"); if (cfg) { size_t arrsize = cfg.child_count(global); if (arrsize > 0) { for (size_t i = 0; i < arrsize; i++) ret.add_child(global,cfg.child(global,i)); } else { ret = pack_scalar(global,cfg[global]); } } else { ret = pack_scalar(global,""); } return ret; }
static inline void pack_value(msgpack_packer *pk, const JsonValue value) { switch (value->type) { case JSON_VALUE_SCALAR: pack_scalar(pk, value->via.scalar); break; case MSGPACK_BINARY: (* pk->callback)(pk->data, value->via.msg.data, value->via.msg.size); break; } }