/*
 * include/41/iomp.h.var
 */


//===----------------------------------------------------------------------===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is dual licensed under the MIT and the University of Illinois Open
// Source Licenses. See LICENSE.txt for details.
//
//===----------------------------------------------------------------------===//


#ifndef __IOMP_H
#   define __IOMP_H

#   define KMP_VERSION_MAJOR    $KMP_VERSION_MAJOR
#   define KMP_VERSION_MINOR    $KMP_VERSION_MINOR
#   define KMP_VERSION_BUILD    $KMP_VERSION_BUILD
#   define KMP_BUILD_DATE       "$KMP_BUILD_DATE"

#   ifdef __cplusplus
        extern "C" {
#   endif

#       define kmp_set_stacksize            kmpc_set_stacksize
#       define kmp_set_stacksize_s          kmpc_set_stacksize_s
#       define kmp_set_blocktime            kmpc_set_blocktime
#       define kmp_set_library              kmpc_set_library
#       define kmp_set_defaults             kmpc_set_defaults
#       define kmp_set_affinity_mask_proc   kmpc_set_affinity_mask_proc
#       define kmp_unset_affinity_mask_proc kmpc_unset_affinity_mask_proc
#       define kmp_get_affinity_mask_proc   kmpc_get_affinity_mask_proc

#       define kmp_malloc                   kmpc_malloc
#       define kmp_calloc                   kmpc_calloc
#       define kmp_realloc                  kmpc_realloc
#       define kmp_free                     kmpc_free

#   if defined(_WIN32)
#       define __KAI_KMPC_CONVENTION __cdecl
#   else
#       define __KAI_KMPC_CONVENTION
#   endif

#   include <stdlib.h>
    /* kmp API functions */
    extern int    __KAI_KMPC_CONVENTION  kmp_get_stacksize          (void);
    extern void   __KAI_KMPC_CONVENTION  kmp_set_stacksize          (int);
    extern size_t __KAI_KMPC_CONVENTION  kmp_get_stacksize_s        (void);
    extern void   __KAI_KMPC_CONVENTION  kmp_set_stacksize_s        (size_t);
    extern int    __KAI_KMPC_CONVENTION  kmp_get_blocktime          (void);
    extern int    __KAI_KMPC_CONVENTION  kmp_get_library            (void);
    extern void   __KAI_KMPC_CONVENTION  kmp_set_blocktime          (int);
    extern void   __KAI_KMPC_CONVENTION  kmp_set_library            (int);
    extern void   __KAI_KMPC_CONVENTION  kmp_set_library_serial     (void);
    extern void   __KAI_KMPC_CONVENTION  kmp_set_library_turnaround (void);
    extern void   __KAI_KMPC_CONVENTION  kmp_set_library_throughput (void);
    extern void   __KAI_KMPC_CONVENTION  kmp_set_defaults           (char const *);

    /* affinity API functions */
    typedef void * kmp_affinity_mask_t;

    extern int    __KAI_KMPC_CONVENTION  kmp_set_affinity             (kmp_affinity_mask_t *);
    extern int    __KAI_KMPC_CONVENTION  kmp_get_affinity             (kmp_affinity_mask_t *);
    extern int    __KAI_KMPC_CONVENTION  kmp_get_affinity_max_proc    (void);
    extern void   __KAI_KMPC_CONVENTION  kmp_create_affinity_mask     (kmp_affinity_mask_t *);
    extern void   __KAI_KMPC_CONVENTION  kmp_destroy_affinity_mask    (kmp_affinity_mask_t *);
    extern int    __KAI_KMPC_CONVENTION  kmp_set_affinity_mask_proc   (int, kmp_affinity_mask_t *);
    extern int    __KAI_KMPC_CONVENTION  kmp_unset_affinity_mask_proc (int, kmp_affinity_mask_t *);
    extern int    __KAI_KMPC_CONVENTION  kmp_get_affinity_mask_proc   (int, kmp_affinity_mask_t *);

    extern void * __KAI_KMPC_CONVENTION  kmp_malloc  (size_t);
    extern void * __KAI_KMPC_CONVENTION  kmp_calloc  (size_t, size_t);
    extern void * __KAI_KMPC_CONVENTION  kmp_realloc (void *, size_t);
    extern void   __KAI_KMPC_CONVENTION  kmp_free    (void *);

    extern void   __KAI_KMPC_CONVENTION  kmp_set_warnings_on(void);
    extern void   __KAI_KMPC_CONVENTION  kmp_set_warnings_off(void);

    /* schedule kind constants */
    typedef enum kmp_cancel_kind_t {
        kmp_cancel_parallel  = 1,
        kmp_cancel_loop = 2,
        kmp_cancel_sections  = 3,
        kmp_cancel_taskgroup = 4
    } kmp_cancel_kind_t;

    extern int    __KAI_KMPC_CONVENTION  kmp_get_cancellation_status(kmp_cancel_kind_t);

#   undef __KAI_KMPC_CONVENTION

    /* Warning:
       The following typedefs are not standard, deprecated and will be removed in a future release.
    */
    typedef int     omp_int_t;
    typedef double  omp_wtime_t;

#   ifdef __cplusplus
        }
#   endif

#endif /* __IOMP_H */

