{% extends "base_wrapper_template" %}

{% block arguments %}
    uint8_t* d_keys_input1,
    uint8_t* d_keys_input2,
    uint8_t* d_keys_output,
    {% if value_type %}
    uint8_t* d_values_input1,
    uint8_t* d_values_input2,
    uint8_t* d_values_output,
    {% endif %}
    uint64_t input1_size,
    uint64_t input2_size
{% endblock %}

{% block setup %}
    using compare_op_type = typename std::conditional<
        std::is_same<key_type, rocprim::half>::value,
        half_less,
        rocprim::less<key_type>>::type;
    compare_op_type compare_op;
{% endblock %}

{% block algorithm_call %}
    HIP_CHECK(rocprim::merge<tuning_config>(
        d_temporary_storage, temporary_storage_bytes,
        reinterpret_cast<key_type*>(d_keys_input1),
        reinterpret_cast<key_type*>(d_keys_input2),
        reinterpret_cast<key_type*>(d_keys_output),
        {% if value_type %}
        reinterpret_cast<value_type*>(d_values_input1),
        reinterpret_cast<value_type*>(d_values_input2),
        reinterpret_cast<value_type*>(d_values_output),
        {% endif %}
        input1_size, input2_size,
        compare_op, stream, false));
{% endblock %}

{% block storage_query %}
{{ self.algorithm_call() }}
{% endblock %}