We don't need templates at all, this is not CRTP?

This commit is contained in:
Daniel J. Hofmann 2016-02-17 16:41:50 -08:00 committed by Patrick Niklaus
parent bde8ec1dbd
commit c88eeb89c6
3 changed files with 27 additions and 46 deletions

View File

@ -18,12 +18,10 @@ namespace engine
namespace api namespace api
{ {
namespace detail class BaseAPI
{
template <typename ChildT> class BaseAPI_
{ {
public: public:
BaseAPI_(const datafacade::BaseDataFacade &facade_, const BaseParameters &parameters_) BaseAPI(const datafacade::BaseDataFacade &facade_, const BaseParameters &parameters_)
: facade(facade_), parameters(parameters_) : facade(facade_), parameters(parameters_)
{ {
} }
@ -59,12 +57,9 @@ template <typename ChildT> class BaseAPI_
const datafacade::BaseDataFacade &facade; const datafacade::BaseDataFacade &facade;
const BaseParameters &parameters; const BaseParameters &parameters;
}; };
}
// Only expose non-templated version } // ns api
using BaseAPI = detail::BaseAPI_<std::true_type>; } // ns engine
} } // ns osrm
}
}
#endif #endif

View File

@ -24,15 +24,11 @@ namespace engine
namespace api namespace api
{ {
namespace detail class RouteAPI final : public BaseAPI
{ {
template <typename ChildT> class RouteAPI_ : public BaseAPI_<RouteAPI_<ChildT>>
{
using BaseT = BaseAPI_<RouteAPI_<ChildT>>;
public: public:
RouteAPI_(const datafacade::BaseDataFacade &facade_, const RouteParameters &parameters_) RouteAPI(const datafacade::BaseDataFacade &facade_, const RouteParameters &parameters_)
: BaseT(facade_, parameters_), parameters(parameters_) : BaseAPI(facade_, parameters_), parameters(parameters_)
{ {
} }
@ -53,7 +49,7 @@ template <typename ChildT> class RouteAPI_ : public BaseAPI_<RouteAPI_<ChildT>>
raw_route.alt_source_traversed_in_reverse, raw_route.alt_source_traversed_in_reverse,
raw_route.alt_target_traversed_in_reverse); raw_route.alt_target_traversed_in_reverse);
} }
response.values["waypoints"] = BaseT::MakeWaypoints(raw_route.segment_end_coordinates); response.values["waypoints"] = BaseAPI::MakeWaypoints(raw_route.segment_end_coordinates);
response.values["routes"] = std::move(routes); response.values["routes"] = std::move(routes);
response.values["code"] = "ok"; response.values["code"] = "ok";
} }
@ -90,15 +86,16 @@ template <typename ChildT> class RouteAPI_ : public BaseAPI_<RouteAPI_<ChildT>>
const bool reversed_target = target_traversed_in_reverse[idx]; const bool reversed_target = target_traversed_in_reverse[idx];
auto leg_geometry = guidance::assembleGeometry( auto leg_geometry = guidance::assembleGeometry(
BaseT::facade, path_data, phantoms.source_phantom, phantoms.target_phantom); BaseAPI::facade, path_data, phantoms.source_phantom, phantoms.target_phantom);
auto leg = guidance::assembleLeg(BaseT::facade, path_data, leg_geometry, phantoms.source_phantom, auto leg = guidance::assembleLeg(BaseAPI::facade, path_data, leg_geometry,
phantoms.target_phantom, reversed_source, reversed_target); phantoms.source_phantom, phantoms.target_phantom,
reversed_source, reversed_target);
if (parameters.steps) if (parameters.steps)
{ {
leg.steps = guidance::assembleSteps(BaseT::facade, leg.steps = guidance::assembleSteps(
path_data, leg_geometry, phantoms.source_phantom, phantoms.target_phantom, BaseAPI::facade, path_data, leg_geometry, phantoms.source_phantom,
reversed_source, reversed_target); phantoms.target_phantom, reversed_source, reversed_target);
} }
leg_geometries.push_back(std::move(leg_geometry)); leg_geometries.push_back(std::move(leg_geometry));
@ -123,13 +120,9 @@ template <typename ChildT> class RouteAPI_ : public BaseAPI_<RouteAPI_<ChildT>>
const RouteParameters &parameters; const RouteParameters &parameters;
}; };
}
// Expose non-templated version } // ns api
using RouteAPI = detail::RouteAPI_<std::true_type>; } // ns engine
} // ns osrm
}
}
}
#endif #endif

View File

@ -24,15 +24,11 @@ namespace engine
namespace api namespace api
{ {
namespace detail class TableAPI final : public BaseAPI
{ {
template <typename ChildT> class TableAPI_ : public BaseAPI_<TableAPI_<ChildT>>
{
using BaseT = BaseAPI_<TableAPI_<ChildT>>;
public: public:
TableAPI_(const datafacade::BaseDataFacade &facade_, const TableParameters &parameters_) TableAPI(const datafacade::BaseDataFacade &facade_, const TableParameters &parameters_)
: BaseT(facade_, parameters_), parameters(parameters_) : BaseAPI(facade_, parameters_), parameters(parameters_)
{ {
} }
@ -69,7 +65,7 @@ template <typename ChildT> class TableAPI_ : public BaseAPI_<TableAPI_<ChildT>>
for (; phantom_iter != phantoms.end() && coordinate_iter != parameters.coordinates.end(); for (; phantom_iter != phantoms.end() && coordinate_iter != parameters.coordinates.end();
++phantom_iter, ++coordinate_iter) ++phantom_iter, ++coordinate_iter)
{ {
json_waypoints.values.push_back(BaseT::MakeWaypoint(*coordinate_iter, *phantom_iter)); json_waypoints.values.push_back(BaseAPI::MakeWaypoint(*coordinate_iter, *phantom_iter));
} }
return json_waypoints; return json_waypoints;
} }
@ -83,7 +79,7 @@ template <typename ChildT> class TableAPI_ : public BaseAPI_<TableAPI_<ChildT>>
{ {
BOOST_ASSERT(idx < phantoms.size() && idx < parameters.coordinates.size()); BOOST_ASSERT(idx < phantoms.size() && idx < parameters.coordinates.size());
json_waypoints.values.push_back( json_waypoints.values.push_back(
BaseT::MakeWaypoint(parameters.coordinates[idx], phantoms[idx])); BaseAPI::MakeWaypoint(parameters.coordinates[idx], phantoms[idx]));
} }
return json_waypoints; return json_waypoints;
} }
@ -106,12 +102,9 @@ template <typename ChildT> class TableAPI_ : public BaseAPI_<TableAPI_<ChildT>>
const TableParameters &parameters; const TableParameters &parameters;
}; };
}
// Expose non-templated version } // ns api
using TableAPI = detail::TableAPI_<std::true_type>; } // ns engine
} } // ns osrm
}
}
#endif #endif