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

View File

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

View File

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