bool QGeoRoutingManagerEngineNokia::checkEngineSupport(const QGeoRouteRequest &request, QGeoRouteRequest::TravelModes travelModes) const { QList<QGeoRouteRequest::FeatureType> featureTypeList = request.featureTypes(); QGeoRouteRequest::FeatureTypes featureTypeFlag = QGeoRouteRequest::NoFeature; QGeoRouteRequest::FeatureWeights featureWeightFlag = QGeoRouteRequest::NeutralFeatureWeight; for (int i = 0; i < featureTypeList.size(); ++i) { featureTypeFlag |= featureTypeList.at(i); featureWeightFlag |= request.featureWeight(featureTypeList.at(i)); } if ((featureTypeFlag & supportedFeatureTypes()) != featureTypeFlag) return false; if ((featureWeightFlag & supportedFeatureWeights()) != featureWeightFlag) return false; if ((request.maneuverDetail() & supportedManeuverDetails()) != request.maneuverDetail()) return false; if ((request.segmentDetail() & supportedSegmentDetails()) != request.segmentDetail()) return false; if ((request.routeOptimization() & supportedRouteOptimizations()) != request.routeOptimization()) return false; if ((travelModes & supportedTravelModes()) != travelModes) return false; return true; }
bool QGeoRoutingManagerEngineNokia::checkEngineSupport(const QGeoRouteRequest &request, QGeoRouteRequest::TravelModes travelModes) const { QList<QGeoRouteRequest::FeatureType> featureTypeList = request.featureTypes(); QGeoRouteRequest::FeatureTypes featureTypeFlag = QGeoRouteRequest::NoFeature; QGeoRouteRequest::FeatureWeights featureWeightFlag = QGeoRouteRequest::NeutralFeatureWeight; for (int i = 0; i < featureTypeList.size(); ++i) { featureTypeFlag |= featureTypeList.at(i); featureWeightFlag |= request.featureWeight(featureTypeList.at(i)); } if ((featureTypeFlag & supportedFeatureTypes()) != featureTypeFlag) return false; if ((featureWeightFlag & supportedFeatureWeights()) != featureWeightFlag) return false; if ((request.maneuverDetail() & supportedManeuverDetails()) != request.maneuverDetail()) return false; if ((request.segmentDetail() & supportedSegmentDetails()) != request.segmentDetail()) return false; if ((request.routeOptimization() & supportedRouteOptimizations()) != request.routeOptimization()) return false; if ((travelModes & supportedTravelModes()) != travelModes) return false; // Count the number of set bits (= number of travel modes) (popcount) int count = 0; for (unsigned bits = travelModes; bits; bits >>= 1) count += (bits & 1); // We only allow one travel mode at a time if (count != 1) return false; return true; }