/*
 * Copyright (c) 2021-2022, NVIDIA CORPORATION.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#pragma once

#include <string>

namespace cugraph::ops::gnn::utils {

/**
 * @brief Print the values contained in an array to stdout (host or device)
 *
 * @param[in]  in         input array to be printed [len = `len`]
 * @param[in]  n          number of elements in input array
 * @param[in]  name       name of the array to be printed
 * @param[in]  prec       optional precision. If >0, number of decimal points
 *
 * @{
 */
void print_a(char const* in, size_t n, const std::string& name, int prec = 0);
void print_a(int8_t const* in, size_t n, const std::string& name, int prec = 0);
void print_a(uint8_t const* in, size_t n, const std::string& name, int prec = 0);
void print_a(int16_t const* in, size_t n, const std::string& name, int prec = 0);
void print_a(uint16_t const* in, size_t n, const std::string& name, int prec = 0);
void print_a(int32_t const* in, size_t n, const std::string& name, int prec = 0);
void print_a(uint32_t const* in, size_t n, const std::string& name, int prec = 0);
void print_a(int64_t const* in, size_t n, const std::string& name, int prec = 0);
void print_a(uint64_t const* in, size_t n, const std::string& name, int prec = 0);
void print_a(float const* in, size_t n, const std::string& name, int prec = 0);
void print_a(double const* in, size_t n, const std::string& name, int prec = 0);
/** @} */

}  // namespace cugraph::ops::gnn::utils
