X-Git-Url: https://git.street.me.uk/andy/viking.git/blobdiff_plain/d2e33e78a1d8deef4043b44802adc3ab51977698..a129aa51e2160d7bda45e8b57ee7a8f28e83a84b:/src/vikroutingengine.c?ds=inline diff --git a/src/vikroutingengine.c b/src/vikroutingengine.c index 7099dfdf..894b011e 100644 --- a/src/vikroutingengine.c +++ b/src/vikroutingengine.c @@ -142,6 +142,11 @@ vik_routing_engine_class_init ( VikRoutingEngineClass *klass ) routing_class = VIK_ROUTING_ENGINE_CLASS ( klass ); routing_class->find = NULL; + routing_class->supports_direction = NULL; + routing_class->get_cmd_from_directions = NULL; + + routing_class->refine = NULL; + routing_class->supports_refine = NULL; pspec = g_param_spec_string ("id", "Identifier", @@ -257,3 +262,86 @@ vik_routing_engine_get_format ( VikRoutingEngine *self ) return priv->format; } + +/** + * vik_routing_engine_supports_direction: + * + * Returns: %TRUE if this engine supports the route finding based on directions + */ +gboolean +vik_routing_engine_supports_direction ( VikRoutingEngine *self ) +{ + VikRoutingEngineClass *klass; + + g_return_val_if_fail ( VIK_IS_ROUTING_ENGINE (self), FALSE ); + klass = VIK_ROUTING_ENGINE_GET_CLASS( self ); + g_return_val_if_fail ( klass->supports_direction != NULL, FALSE ); + + return klass->supports_direction( self ); +} + +/** + * vik_routing_engine_get_cmd_from_directions: + * @self: routing engine + * @start: the start direction + * @end: the end direction + * + * Compute a "cmd" for acquire framework. + * + * Returns: the computed cmd + */ +gchar * +vik_routing_engine_get_cmd_from_directions ( VikRoutingEngine *self, const gchar *start, const gchar *end ) +{ + VikRoutingEngineClass *klass; + + g_return_val_if_fail ( VIK_IS_ROUTING_ENGINE (self), NULL ); + klass = VIK_ROUTING_ENGINE_GET_CLASS( self ); + g_return_val_if_fail ( klass->get_cmd_from_directions != NULL, NULL ); + + return klass->get_cmd_from_directions( self, start, end ); +} + +/** + * vik_routing_engine_refine: + * @self: self object + * @vtl: layer where to create new track + * @vt: the simple route to refine + * + * Retrieve a route refining the @vt track/route. + * + * A refined route is computed from @vt. + * The route is computed from first trackpoint to last trackpoint, + * and going via all intermediate trackpoints. + * + * Returns: indicates success or not. + */ +int +vik_routing_engine_refine ( VikRoutingEngine *self, VikTrwLayer *vtl, VikTrack *vt ) +{ + VikRoutingEngineClass *klass; + + g_return_val_if_fail ( VIK_IS_ROUTING_ENGINE (self), 0 ); + klass = VIK_ROUTING_ENGINE_GET_CLASS ( self ); + g_return_val_if_fail ( klass->refine != NULL, 0 ); + + return klass->refine ( self, vtl, vt ); +} + +/** + * vik_routing_engine_supports_refine: + * @self: routing engine + * + * Returns: %TRUE if this engine supports the refine of track + */ +gboolean +vik_routing_engine_supports_refine ( VikRoutingEngine *self ) +{ + VikRoutingEngineClass *klass; + + g_return_val_if_fail ( VIK_IS_ROUTING_ENGINE (self), FALSE ); + klass = VIK_ROUTING_ENGINE_GET_CLASS ( self ); + g_return_val_if_fail ( klass->supports_refine != NULL, FALSE ); + + return klass->supports_refine ( self ); +}