bool OGRPLScenesDataV1Dataset::ParseItemTypes(json_object* poObj, CPLString& osNext) { json_object* poItemTypes = CPL_json_object_object_get(poObj, "item_types"); if( poItemTypes == nullptr || json_object_get_type(poItemTypes) != json_type_array ) { CPLError(CE_Failure, CPLE_AppDefined, "Missing item_types object, or not of type array"); return false; } const auto nCatalogsLength = json_object_array_length(poItemTypes); for( auto i=decltype(nCatalogsLength){0}; i<nCatalogsLength; i++ ) { json_object* poItemType = json_object_array_get_idx(poItemTypes, i); ParseItemType(poItemType); } // Is there a next page ? osNext = ""; json_object* poLinks = CPL_json_object_object_get(poObj, "_links"); if( poLinks && json_object_get_type(poLinks) == json_type_object ) { json_object* poNext = CPL_json_object_object_get(poLinks, "_next"); if( poNext && json_object_get_type(poNext) == json_type_string ) { osNext = json_object_get_string(poNext); } } return true; }
OGRLayer *OGRPLScenesDataV1Dataset::GetLayerByName(const char* pszName) { // Prevent GetLayerCount() from calling EstablishLayerList() bool bLayerListInitializedBackup = m_bLayerListInitialized; m_bLayerListInitialized = true; OGRLayer* poRet = GDALDataset::GetLayerByName(pszName); m_bLayerListInitialized = bLayerListInitializedBackup; if( poRet != nullptr ) return poRet; CPLString osURL(m_osBaseURL + "item-types/" + pszName); json_object* poObj = RunRequest(osURL); if( poObj == nullptr ) return nullptr; poRet = ParseItemType(poObj); json_object_put(poObj); return poRet; }
ParseExp::Result ParseExp::ParseExpImpl(POETCode* input, POETCode* bop, POETCode* inherit, int *p_lineno) { if (inherit == 0) { POETCode* p_uop = exp_uop->get_entry().get_code(); for (POETCode* cur = 0; ((cur=get_head(p_uop))!=0); p_uop = get_tail(p_uop)) { POETCode* p_input = MatchOp(cur, input); if (p_input != 0) { Result resOfRest = ParseItemType(p_input, p_lineno); if (resOfRest.first != 0) { if (buildUop->get_entry().get_code()!=0) { XformVar* xvar = dynamic_cast<XformVar*>(buildUop->get_entry().get_code()); if (xvar == 0) INCORRECT_XVAR(buildUop); inherit = xvar->eval(PAIR(cur,resOfRest.first),false); } else { CodeVar* cvar = dynamic_cast<CodeVar*>(parseUop->get_entry().get_code()); if (cvar == 0) INCORRECT_CVAR(parseUop); inherit = CODE_REF(cvar, PAIR(cur,resOfRest.first)); } input = resOfRest.second; } break; } } } if (inherit == 0) { Result res = ParseItemType(input, p_lineno); inherit = res.first; input = res.second; } if (inherit == 0) { return Result(0,input); } if (get_tail(input) != 0) { POETCode* p_bop = bop; for (POETCode* cur_bop=0; (cur_bop = get_head(p_bop)) != 0; p_bop = get_tail(p_bop) ) { for (POETCode* cur = 0; (cur = get_head(cur_bop)) != 0; cur_bop = get_tail(cur_bop)) { POETCode* p_input = MatchOp(cur, input); if (p_input != 0) { Result resOfTail = ParseExpImpl(p_input,get_tail(p_bop),0, p_lineno); if (resOfTail.first != 0) { POETCode* first1 = 0; if (buildBop->get_entry().get_code()!=0) { XformVar* xvar = dynamic_cast<XformVar*>(buildBop->get_entry().get_code()); if (xvar == 0) INCORRECT_XVAR(buildBop); first1 = xvar->eval(TUPLE3(cur,inherit,resOfTail.first),false); } else { CodeVar* cvar = dynamic_cast<CodeVar*>(parseBop->get_entry().get_code()); if (cvar == 0) INCORRECT_XVAR(parseBop); first1=CODE_REF(cvar,TUPLE3(cur,inherit,resOfTail.first)); } return ParseExpImpl(resOfTail.second,bop,first1, p_lineno); } return Result(inherit,input); } } } } return Result(inherit, input) ; }