#pragma once

#ifdef ARB_MPI_ENABLED
#include <mpi.h>

namespace pyarb {
// A shim is required for MPI_Comm, because OpenMPI defines it as a pointer to
// a forward-declared type, which pybind11 won't allow as an argument.
// MPICH and its derivatives use an integer.

struct mpi_comm_shim {
    MPI_Comm comm = MPI_COMM_WORLD;

    mpi_comm_shim() = default;
    mpi_comm_shim(MPI_Comm c): comm(c) {}

    mpi_comm_shim(pybind11::object o);
};

bool can_convert_to_mpi_comm(pybind11::object o);
MPI_Comm convert_to_mpi_comm(pybind11::object o);

} // namespace pyarb
#endif