// // ToyJSONParseUtils.cpp // SteveMaggieCpp // // Created by Katarzyna Kalinowska-Górska on 19.05.2017. // // #include #include "ToyJSONParseUtils.h" bool ToyJSONParseUtils::hasMemberBool(const Value& json, const char* memberName) { return json.IsObject() && json.HasMember(memberName) && json[memberName].IsBool(); } bool ToyJSONParseUtils::hasMemberInt(const Value& json, const char* memberName) { return json.IsObject() && json.HasMember(memberName) && json[memberName].IsInt(); } bool ToyJSONParseUtils::hasMemberFloat(const Value& json, const char* memberName) { return json.IsObject() && json.HasMember(memberName) && (json[memberName].IsFloat() || json[memberName].IsInt()); } bool ToyJSONParseUtils::hasMemberString(const Value& json, const char* memberName) { return json.IsObject() && json.HasMember(memberName) && json[memberName].IsString(); } bool ToyJSONParseUtils::hasMemberArray(const Value& json, const char* memberName) { return json.IsObject() && json.HasMember(memberName) && json[memberName].IsArray(); } bool ToyJSONParseUtils::hasMemberObject(const Value& json, const char* memberName) { return json.IsObject() && json.HasMember(memberName) && json[memberName].IsObject(); } bool ToyJSONParseUtils::hasMemberPoint(const Value& json, const char* memberName) { return json.IsObject() && json.HasMember(memberName) && ToyJSONParseUtils::isPoint(json[memberName]); } cocos2d::Point ToyJSONParseUtils::getMemberPoint(const Value& json, const char* memberName) { return ToyJSONParseUtils::getPoint(json[memberName]); } bool ToyJSONParseUtils::isPoint(const Value& json) { return ToyJSONParseUtils::hasMemberFloat(json, "x") && ToyJSONParseUtils::hasMemberFloat(json, "y"); } cocos2d::Point ToyJSONParseUtils::getPoint(const Value& json) { auto x = json["x"].GetFloat(); auto y = json["y"].GetFloat(); return cocos2d::Point(x,y); } bool ToyJSONParseUtils::hasMemberSize(const Value& json, const char* memberName) { return json.HasMember(memberName) && ToyJSONParseUtils::isSize(json[memberName]); } cocos2d::Point ToyJSONParseUtils::getMemberSize(const Value& json, const char* memberName) { return ToyJSONParseUtils::getSize(json[memberName]); } bool ToyJSONParseUtils::isSize(const Value& json) { return json.IsObject() && ((ToyJSONParseUtils::hasMemberFloat(json, "w") && ToyJSONParseUtils::hasMemberFloat(json, "h")) || (ToyJSONParseUtils::hasMemberFloat(json, "width") && ToyJSONParseUtils::hasMemberFloat(json, "height"))); } cocos2d::Size ToyJSONParseUtils::getSize(const Value& json) { auto w = -1, h = -1; if(ToyJSONParseUtils::hasMemberFloat(json, "w")){ w = json["w"].GetFloat(); h = json["h"].GetFloat(); } else { w = json["width"].GetFloat(); h = json["height"].GetFloat(); } return cocos2d::Size(w,h); } bool ToyJSONParseUtils::hasMemberRect(const Value& json, const char* memberName) { return json.HasMember(memberName) && ToyJSONParseUtils::isRect(json[memberName]); } cocos2d::Rect ToyJSONParseUtils::getMemberRect(const Value& json, const char* memberName) { return ToyJSONParseUtils::getRect(json[memberName]); } bool ToyJSONParseUtils::isRect(const Value& json) { return json.IsObject() && ToyJSONParseUtils::hasMemberFloat(json, "x") && ToyJSONParseUtils::hasMemberFloat(json, "y") && ToyJSONParseUtils::hasMemberFloat(json, "w") && ToyJSONParseUtils::hasMemberFloat(json, "h"); } cocos2d::Rect ToyJSONParseUtils::getRect(const Value& json) { auto x = json["x"].GetFloat(); auto y = json["y"].GetFloat(); auto w = json["w"].GetFloat(); auto h = json["h"].GetFloat(); return cocos2d::Rect(x,y,w,h); } bool ToyJSONParseUtils::hasMemberColor3B(const Value& json, const char* memberName) { return json.HasMember(memberName) && ToyJSONParseUtils::isColor3B(json[memberName]); } cocos2d::Color3B ToyJSONParseUtils::getMemberColor3B(const Value& json, const char* memberName) { return ToyJSONParseUtils::getColor3B(json[memberName]); } bool ToyJSONParseUtils::isColor3B(const Value& json) { return json.IsObject() && ToyJSONParseUtils::hasMemberInt(json, "r") && ToyJSONParseUtils::hasMemberInt(json, "g") && ToyJSONParseUtils::hasMemberInt(json, "b"); } cocos2d::Color3B ToyJSONParseUtils::getColor3B(const Value& json) { auto r = json["r"].GetInt(); auto g = json["g"].GetInt(); auto b = json["b"].GetInt(); return cocos2d::Color3B(r,g,b); } bool ToyJSONParseUtils::hasMemberColor4F(const Value& json, const char* memberName) { return json.HasMember(memberName) && ToyJSONParseUtils::isColor4F(json[memberName]); } cocos2d::Color4F ToyJSONParseUtils::getMemberColor4F(const Value& json, const char* memberName) { return ToyJSONParseUtils::getColor4F(json[memberName]); } bool ToyJSONParseUtils::isColor4F(const Value& json) { return json.IsObject() && ToyJSONParseUtils::hasMemberFloat(json, "r") && ToyJSONParseUtils::hasMemberFloat(json, "g") && ToyJSONParseUtils::hasMemberFloat(json, "b") && ToyJSONParseUtils::hasMemberFloat(json, "a"); } cocos2d::Color4F ToyJSONParseUtils::getColor4F(const Value& json) { auto r = json["r"].GetFloat(); auto g = json["g"].GetFloat(); auto b = json["b"].GetFloat(); auto a = json["a"].GetFloat(); return cocos2d::Color4F(r,g,b,a); } bool ToyJSONParseUtils::checkMemberBool(const Value& json, const char* memberName, bool boolValue) { return ToyJSONParseUtils::hasMemberBool(json, memberName) && json[memberName].GetBool() == boolValue; } bool ToyJSONParseUtils::checkMemberInt(const Value& json, const char* memberName, int intValue) { return ToyJSONParseUtils::hasMemberInt(json, memberName) && json[memberName].GetInt() == intValue; } bool ToyJSONParseUtils::checkMemberFloat(const Value& json, const char* memberName, float floatValue) { return ToyJSONParseUtils::hasMemberInt(json, memberName) && json[memberName].GetFloat() == floatValue; } bool ToyJSONParseUtils::checkMemberString(const Value& json, const char* memberName, std::string expectedValue) { return ToyJSONParseUtils::hasMemberString(json, memberName) && expectedValue == json[memberName].GetString(); } std::vector ToyJSONParseUtils::parseStringArray(const Value& json) { std::vector values; if(json.IsArray()){ for(const auto& value : json.GetArray()){ if(value.IsString()){ values.push_back(value.GetString()); } } } else if(json.IsString()){ values.push_back(json.GetString()); } return values; } std::vector ToyJSONParseUtils::parseFloatArray(const Value& json) { std::vector values; if(json.IsArray()){ for(const auto& value : json.GetArray()){ if(value.IsFloat() || value.IsInt()){ values.push_back(value.GetFloat()); } } } else if(json.IsFloat() || json.IsInt()){ values.push_back(json.GetFloat()); } return values; } std::vector ToyJSONParseUtils::parseIntArray(const Value& json) { std::vector values; if(json.IsArray()){ for(const auto& value : json.GetArray()){ if(value.IsInt()){ values.push_back(value.GetInt()); } } } else if(json.IsInt()){ values.push_back(json.GetInt()); } return values; } std::vector ToyJSONParseUtils::parsePointArray(const Value& json) { std::vector values; if(json.IsArray()){ for(const auto& value : json.GetArray()){ if(ToyJSONParseUtils::isPoint(value)){ values.push_back(ToyJSONParseUtils::getPoint(value)); } } } else if(ToyJSONParseUtils::isPoint(json)){ values.push_back(ToyJSONParseUtils::getPoint(json)); } return values; } std::vector ToyJSONParseUtils::parseSizeArray(const Value& json) { std::vector values; if(json.IsArray()){ for(const auto& value : json.GetArray()){ if(ToyJSONParseUtils::isSize(value)){ values.push_back(ToyJSONParseUtils::getSize(value)); } } } else if(ToyJSONParseUtils::isSize(json)){ values.push_back(ToyJSONParseUtils::getSize(json)); } return values; } std::vector ToyJSONParseUtils::parseRectArray(const Value& json) { std::vector values; if(json.IsArray()){ for(const auto& value : json.GetArray()){ if(ToyJSONParseUtils::isRect(value)){ values.push_back(ToyJSONParseUtils::getRect(value)); } } } else if(ToyJSONParseUtils::isRect(json)){ values.push_back(ToyJSONParseUtils::getRect(json)); } return values; } std::vector ToyJSONParseUtils::parseMemberStringArray(const Value& json, const char* memberName) { if(ToyJSONParseUtils::hasMemberArray(json, memberName)){ return ToyJSONParseUtils::parseStringArray(json[memberName]); } return std::vector(); } std::vector ToyJSONParseUtils::parseMemberFloatArray(const Value& json, const char* memberName) { if(ToyJSONParseUtils::hasMemberArray(json, memberName)){ return ToyJSONParseUtils::parseFloatArray(json[memberName]); } return std::vector(); } std::vector ToyJSONParseUtils::parseMemberIntArray(const Value& json, const char* memberName) { if(ToyJSONParseUtils::hasMemberArray(json, memberName)){ return ToyJSONParseUtils::parseIntArray(json[memberName]); } return std::vector(); } std::vector ToyJSONParseUtils::parseMemberPointArray(const Value& json, const char* memberName) { if(ToyJSONParseUtils::hasMemberArray(json, memberName)){ return ToyJSONParseUtils::parsePointArray(json[memberName]); } return std::vector(); } //std::vector ToyJSONParseUtils::parseValueArray(const Value& json, rapidjson::CrtAllocator* allocator){ // std::vector vec; // auto array = json.GetArray(); // for(int i = 0; i < array.Size(); ++i){ // const rapidjson::Value* action = &array[i]; // rapidjson::Value* actionCopy = new rapidjson::Value(); // actionCopy->CopyFrom(action, allocator); // vec.push_back(actionCopy); // } // return vec; //}