/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
/*
 *  (C) 2006 by Argonne National Laboratory.
 *      See COPYRIGHT in top-level directory.
 *
 *  Portions of this code were written by Intel Corporation.
 *  Copyright (C) 2011-2012 Intel Corporation.  Intel provides this material
 *  to Argonne National Laboratory subject to Software Grant and Corporate
 *  Contributor License Agreement dated February 8, 2012.
 */
#ifndef PTL_IMPL_H_INCLUDED
#define PTL_IMPL_H_INCLUDED

#include <mpidimpl.h>
#include "portals4.h"

#define MPIDI_PTL_CASE_STR(x) case x: return #x

static inline const char *MPIDI_PTL_strerror(int ret)
{
    switch (ret) {
        MPIDI_PTL_CASE_STR(PTL_OK);
        MPIDI_PTL_CASE_STR(PTL_ARG_INVALID);
        MPIDI_PTL_CASE_STR(PTL_CT_NONE_REACHED);
        MPIDI_PTL_CASE_STR(PTL_EQ_DROPPED);
        MPIDI_PTL_CASE_STR(PTL_EQ_EMPTY);
        MPIDI_PTL_CASE_STR(PTL_FAIL);
        MPIDI_PTL_CASE_STR(PTL_IN_USE);
        MPIDI_PTL_CASE_STR(PTL_INTERRUPTED);
        MPIDI_PTL_CASE_STR(PTL_IGNORED);
        MPIDI_PTL_CASE_STR(PTL_LIST_TOO_LONG);
        MPIDI_PTL_CASE_STR(PTL_NO_INIT);
        MPIDI_PTL_CASE_STR(PTL_NO_SPACE);
        MPIDI_PTL_CASE_STR(PTL_PID_IN_USE);
        MPIDI_PTL_CASE_STR(PTL_PT_FULL);
        MPIDI_PTL_CASE_STR(PTL_PT_EQ_NEEDED);
        MPIDI_PTL_CASE_STR(PTL_PT_IN_USE);
    default:
        return "UNKNOWN";
    }
}

#define MPIDI_PTL_ERR  MPIR_ERR_CHKANDJUMP4

#define MPIDI_PTL_CHK_STATUS(STATUS,STR)                        \
    do {                                                                \
        MPIDI_PTL_ERR(STATUS!=PTL_OK,                           \
                              mpi_errno,                                \
                              MPI_ERR_OTHER,                            \
                              "**"#STR,                                 \
                              "**"#STR" %s %d %s %s",                   \
                              __FILE__,                                 \
                              __LINE__,                                 \
                              FCNAME,                                   \
                              MPIDI_PTL_strerror(STATUS));      \
    } while (0)

#endif /* PTL_IMPL_H_INCLUDED */
