/*
 * Copyright (c) 2015      Mellanox Technologies, Inc.
 *                         All rights reserved.
 * $COPYRIGHT$
 *
 * Additional copyrights may follow
 *
 * $HEADER$
 */

#ifndef OSHMEM_INFO_H
#define OSHMEM_INFO_H

#include "oshmem_config.h"
#include "oshmem/types.h"
#include "oshmem/constants.h"

/*
 * Environment variables
 */
#define OSHMEM_ENV_SYMMETRIC_SIZE      "SMA_SYMMETRIC_SIZE"
#define OSHMEM_ENV_DEBUG               "SMA_DEBUG"
#define OSHMEM_ENV_INFO                "SMA_INFO"
#define OSHMEM_ENV_VERSION             "SMA_VERSION"

/**
 * \internal
 * oshmem_info_t structure.
 */
struct oshmem_info_t {
    /**< print the library version at start-up */
    bool print_version;
    /**< print helpful text about all these environment variables */
    bool print_info;
    /**< enable debugging messages */
    bool debug;
    /**< number of bytes to allocate for symmetric heap */
    size_t symmetric_heap_size;
};

/**
 * \internal
 * Convenience typedef
 */
typedef struct oshmem_info_t oshmem_info_t;


BEGIN_C_DECLS

/**
 * Global instance for oshmem_info_env
 */
OSHMEM_DECLSPEC extern oshmem_info_t oshmem_shmem_info_env;

/**
 * This function is invoked during oshmem_shmem_init() and sets up
 * oshmem_shmem_info_env handling.
 */
int oshmem_info_init(void);

/**
 * This functions is called during oshmem_shmem_finalize() and shuts
 * down oshmem_shmem_info_env handling.
 */
int oshmem_info_finalize(void);

END_C_DECLS

#endif /* OSHMEM_INFO_H */