//===- Support/GICHelper.h -- Helper functions for GMP, ISL, and Cloog -----===/
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// Helper functions for gmp, isl and Cloog objects.
//
//===----------------------------------------------------------------------===//
//
#ifndef POLLY_SUPPORT_GIC_HELPER_H
#define POLLY_SUPPORT_GIC_HELPER_H

#include "llvm/ADT/APInt.h"
#include <gmp.h>

struct isl_map;
struct isl_union_map;
struct isl_set;
struct isl_union_set;
struct isl_schedule;
struct isl_multi_aff;
struct isl_pw_multi_aff;
struct isl_aff;
struct isl_pw_aff;

namespace polly {

/// @brief Convert APInt to mpz.
///
/// @param v      The mpz_t object your want to hold the result.
/// @param apint  The APInt you want to convert.
void MPZ_from_APInt (mpz_t v, const llvm::APInt apint, bool is_signed = true);

/// @brief Convert mpz to APInt.
///
/// @param mpz    The mpz_t you want to convert.
llvm::APInt APInt_from_MPZ (const mpz_t mpz);

/// @brief Get c++ string from Isl objects.
//@{
std::string stringFromIslObj(/*__isl_keep*/ isl_map *map);
std::string stringFromIslObj(/*__isl_keep*/ isl_union_map *umap);
std::string stringFromIslObj(/*__isl_keep*/ isl_set *set);
std::string stringFromIslObj(/*__isl_keep*/ isl_union_set *uset);
std::string stringFromIslObj(/*__isl_keep*/ isl_schedule *schedule);
std::string stringFromIslObj(/*__isl_keep*/ isl_multi_aff *maff);
std::string stringFromIslObj(/*__isl_keep*/ isl_pw_multi_aff *pma);
std::string stringFromIslObj(/*__isl_keep*/ isl_aff *aff);
std::string stringFromIslObj(/*__isl_keep*/ isl_pw_aff *pwaff);

//@}
} //end namespace polly

#endif
