/*
 * Copyright (c) 2004-2008 The Trustees of Indiana University and Indiana
 *                         University Research and Technology
 *                         Corporation.  All rights reserved.
 * Copyright (c) 2004-2005 The University of Tennessee and The University
 *                         of Tennessee Research Foundation.  All rights
 *                         reserved.
 * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
 *                         University of Stuttgart.  All rights reserved.
 * Copyright (c) 2004-2005 The Regents of the University of California.
 *                         All rights reserved.
 * Copyright (c) 2011-2020 Cisco Systems, Inc.  All rights reserved
 * Copyright (c) 2011      Los Alamos National Security, LLC.
 *                         All rights reserved.
 * Copyright (c) 2017-2020 Intel, Inc.  All rights reserved.
 * Copyright (c) 2021-2022 Nanook Consulting.  All rights reserved.
 * $COPYRIGHT$
 *
 * Additional copyrights may follow
 *
 * $HEADER$
 */
/** @file:
 *
 * The PRTE Resource MAPping Subsystem (RMAPS)
 *
 * The resource mapping subsystem is responsible for mapping processes
 * to specific nodes/cpus within a given job. In many systems, this
 * functionality will not be supported - the system will map processes
 * wherever it chooses and does not allow the user to specify the
 * mapping. RMAPS components, therefore, provide services for those
 * systems that do permit such mappings.
 *
 * RMAPS checks the MCA parameters to see if a mapping algorithm has
 * been specified.  If the user selected a mapping algorithm, the
 * indicated RMAPS component will take information from the registry
 * to determine the number of applications/processes to be run, and
 * the identified resources that have been allocated to this job. The
 * selected RMAP component will then assign processes to resources
 * according to its algorithm, with the results stored on the
 * appropriate job segment - the assigned nodename for each process is
 * stored in that respective process' container on the segment.
 *
 */

#ifndef PRTE_MCA_RMAPS_H
#define PRTE_MCA_RMAPS_H

#include "prte_config.h"
#include "types.h"

#include "src/mca/mca.h"
#include "src/pmix/pmix-internal.h"

#include "src/runtime/prte_globals.h"

#include "src/mca/rmaps/rmaps_types.h"

BEGIN_C_DECLS

/*
 * rmaps module functions
 */

/**
 * RMAPS module functions - these are not accessible to the outside world,
 * but are defined here by convention
 */

/* map a job - used by the HNP to compute the #procs on each node.
 * This is passed to the backend daemons as a regex which they
 * use to create an prte_job_map_t for the job */
typedef int (*prte_rmaps_base_module_map_fn_t)(prte_job_t *jdata,
                                               prte_rmaps_options_t *options);

/*
 * rmaps module version 4.0.0
 */
struct prte_rmaps_base_module_4_0_0_t {
    /** Mapping function pointer */
    prte_rmaps_base_module_map_fn_t map_job;
};
/** Convenience typedef */
typedef struct prte_rmaps_base_module_4_0_0_t prte_rmaps_base_module_4_0_0_t;
/** Convenience typedef */
typedef prte_rmaps_base_module_4_0_0_t prte_rmaps_base_module_t;

/*
 * rmaps component
 */

/**
 * rmaps component version 3.0.0
 */
typedef pmix_mca_base_component_t prte_rmaps_base_component_t;

END_C_DECLS

#endif
