本文整理汇总了C++中json::Value::has方法的典型用法代码示例。如果您正苦于以下问题:C++ Value::has方法的具体用法?C++ Value::has怎么用?C++ Value::has使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类json::Value
的用法示例。
在下文中一共展示了Value::has方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: read
void Session::read(const JSON::Value &value) {
creationTime =
value.has("created") ?
(uint64_t)Time::parse(value.getString("created")) : 0;
lastUsed =
value.has("last_used") ?
(uint64_t)Time::parse(value.getString("last_used")) : 0;
user = value.getString("user", "");
ip = value.has("ip") ? IPAddress(value.getString("ip")) : IPAddress();
}
示例2: exportImage
void hake::exportImage(Path from, Path to, Json::Value& asset, bool premultiplyAlpha) {
if (!Files::exists(to.parent())) Files::createDirectories(to.parent());
if (!premultiplyAlpha && (!asset.has("scale") || asset["scale"].number() == 1 || asset["scale"].number() == 0) && !asset.has("background")) KhaExporter::copyFile(from, to);
else {
int w;
int h;
int comp;
u8* image = stbi_load(from.toString().c_str(), &w, &h, &comp, 4);
if (image == nullptr) throw std::runtime_error("Could not read image.");
if (premultiplyAlpha) {
for (int y = 0; y < h; ++y) {
for (int x = 0; x < w; ++x) {
float alpha = image[y * w * 4 + x * 4 + 3] / 255.0f;
image[y * w * 4 + x * 4 + 0] = k_round(image[y * w * 4 + x * 4 + 0] * alpha);
image[y * w * 4 + x * 4 + 1] = k_round(image[y * w * 4 + x * 4 + 1] * alpha);
image[y * w * 4 + x * 4 + 2] = k_round(image[y * w * 4 + x * 4 + 2] * alpha);
}
}
}
if (asset.has("scale") && asset["scale"].number() != 0 && asset["scale"].number() != 1) {
image = (u8*)scale((u32*)image, w, h, w * asset["scale"].number(), h * asset["scale"].number());
w *= asset["scale"].number();
h *= asset["scale"].number();
}
// BufferedImage outImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_4BYTE_ABGR);
// Graphics2D g2d = (Graphics2D)outImage.getGraphics();
// if (asset.circle) {
// RenderingHints hints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
// g2d.addRenderingHints(hints);
// g2d.setColor(new Color(1.0f, 1.0f, 1.0f, 0.0f));
// g2d.fillRect(0, 0, image.getWidth(null), image.getHeight(null));
// g2d.setColor(Color.BLACK);
// g2d.fillOval(0, 0, image.getWidth(null), image.getHeight(null));
// g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP));
// }
// g2d.drawImage(image, 0, 0, null);
// g2d.dispose();
if (asset.has("background")) {
int red = asset["background"]["red"].number();
int green = asset["background"]["green"].number();
int blue = asset["background"]["blue"].number();
image = removeColor(image, w, h, red, green, blue);
}
stbi_write_png(to.toString().c_str(), w, h, 4, image, 0);
}
}
示例3: CompareJson
void CompareJson(json::Value& lhs, json::Value& rhs, json::Value& output) {
std::string lstr, rstr;
if (rhs.type() != lhs.type()) return;
switch (lhs.type()) {
case json::Value::tString:
lstr = lhs.getString();
rstr = rhs.getString();
if (!lstr.empty() && lstr[0] == '$' && lstr.back() == '$') {
size_t slash = lstr.find('/');
std::string cat = lstr.substr(1, slash - 1);
std::string name = lstr.substr(slash + 1, lstr.length() - slash - 2);
output[cat][name] = rstr;
}
break;
case json::Value::tArray:
for (size_t i = 0; i < lhs.length(); ++i) {
if (i < rhs.length()) {
CompareJson(lhs[i], rhs[i], output);
}
}
break;
case json::Value::tObject:
for (auto it = lhs.begin(); it != lhs.end(); ++it) {
if (rhs.has(it.key())) {
CompareJson(*it, rhs[it.key()], output);
}
}
break;
}
}
示例4: load
void Node::load(Json::Value const& value)
{
auto& valuePosition=value.at("P");
auto& valueScale=value.at("S");
auto& valueRotation=value.at("R");
if(valuePosition.isArray())
{
position=vec3{
valuePosition.at<Float>(0, 0.0f),
valuePosition.at<Float>(1, 0.0f),
valuePosition.at<Float>(2, 0.0f)};
}
if(valueScale.isArray())
{
scale=vec3{
valueScale.at<Float>(0, 1.0f),
valueScale.at<Float>(1, 1.0f),
valueScale.at<Float>(2, 1.0f)};
}
if(valueRotation.isArray())
{
rotation=vec3{
valueRotation.at<Float>(0, 0.0f),
valueRotation.at<Float>(1, 0.0f),
valueRotation.at<Float>(2, 0.0f)
};
}
if(value.has("G"))
{
auto scene=this->scene();
// TODO Fallback geometry (& meshes) for debugging (or leave blank and decide in renderer).
geometry=value.at<String>("G", "");
if(!scene->renderer->geometryExists(geometry))
{
// TODO Resource manager / resolve path from current script.
String pathModel{XEAR_PATH_MODEL};
if(!pathModel.empty())
pathModel+="/";
auto data=data::Geometry<>::unserialize(pathModel+geometry+".av");
scene->renderer->geometryCreate(geometry, *data);
}
}
auto& valueChildren=value.at("C");
if(valueChildren.isArray())
{
for(auto& child : valueChildren)
{
auto nodeName=child.at<String>("N", "");
if(nodeName.empty())
continue;
Node* node=nullptr;
auto nodeType=child.at<Int>("T", 1);
if((Int)NodeType::MESH==nodeType)
{
auto tmp=make_unique<scene::Mesh>(nodeName);
node=tmp.get();
children.push_back(move(tmp));
}
else
{
auto tmp=make_unique<scene::Node>(NODE_TYPES[nodeType], nodeName);
node=tmp.get();
children.push_back(move(tmp));
}
node->parent=this;
node->load(child);
node->load();
}
}
dbgi2("Loaded [" << *this << "].");
}