/* Copyright 2018-2019 The MathWorks, Inc. */

/**
 * @file
 * External C-API interfaces for Dubins motion primitive calculations (TBB-accelerated).
 * To fully support code generation, note that this file needs to be fully
 * compliant with the C89/C90 (ANSI) standard.
 */

#ifndef AUTONOMOUSCODEGEN_DUBINS_TBB_API_H_
#define AUTONOMOUSCODEGEN_DUBINS_TBB_API_H_

#ifdef BUILDING_LIBMWAUTONOMOUSCODEGEN
#include "autonomouscodegen/autonomouscodegen_util.hpp"
#else
/* To deal with the fact that PackNGo has no include file hierarchy during test */
#include "autonomouscodegen_util.hpp"
#endif


/**
 * @copydoc autonomousDubinsSegmentsCodegen_real64
 *
 * This function uses TBB to parallelize the computation.
 */
EXTERN_C AUTONOMOUS_CODEGEN_API void autonomousDubinsSegmentsCodegen_tbb_real64(
    const real64_T* startPose,
    const uint32_T numStartPoses,
    const real64_T* goalPose,
    const uint32_T numGoalPoses,
    const real64_T turningRadius,
    const boolean_T* allPathTypes,
    const boolean_T isOptimal,
    const uint32_T nlhs,
    real64_T* distance,
    real64_T* segmentLen,
    real64_T* segmentType);


/**
 * @copydoc autonomousDubinsDistanceCodegen_real64
 *
 * This function uses TBB to parallelize the computation.
 */
EXTERN_C AUTONOMOUS_CODEGEN_API void autonomousDubinsDistanceCodegen_tbb_real64(
    const real64_T* startPose,
    const uint32_T numStartPoses,
    const real64_T* goalPose,
    const uint32_T numGoalPoses,
    const real64_T turningRadius,
    real64_T* distance);

#endif /* AUTONOMOUSCODEGEN_DUBINS_TBB_API_H_ */