\hypertarget{mca_8h}{\section{opal/mca/mca.h File Reference}
\label{mca_8h}\index{opal/mca/mca.\+h@{opal/mca/mca.\+h}}
}


Top-\/level interface for {\itshape all} M\+C\+A components.  


{\ttfamily \#include \char`\"{}opal\+\_\+config.\+h\char`\"{}}\\*
\subsection*{Data Structures}
\begin{DoxyCompactItemize}
\item 
struct \hyperlink{structmca__base__module__2__0__0__t}{mca\+\_\+base\+\_\+module\+\_\+2\+\_\+0\+\_\+0\+\_\+t}
\begin{DoxyCompactList}\small\item\em Common type for all M\+C\+A modules. \end{DoxyCompactList}\item 
struct \hyperlink{structmca__base__component__2__0__0__t}{mca\+\_\+base\+\_\+component\+\_\+2\+\_\+0\+\_\+0\+\_\+t}
\begin{DoxyCompactList}\small\item\em Common type for all M\+C\+A components. \end{DoxyCompactList}\item 
struct \hyperlink{structmca__base__component__data__2__0__0__t}{mca\+\_\+base\+\_\+component\+\_\+data\+\_\+2\+\_\+0\+\_\+0\+\_\+t}
\begin{DoxyCompactList}\small\item\em Meta data for M\+C\+A v2.\+0.\+0 components. \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\hypertarget{mca_8h_a563588ef6851dd075f1f1eda9530209d}{\#define \hyperlink{mca_8h_a563588ef6851dd075f1f1eda9530209d}{M\+C\+A\+\_\+\+B\+A\+S\+E\+\_\+\+M\+A\+X\+\_\+\+T\+Y\+P\+E\+\_\+\+N\+A\+M\+E\+\_\+\+L\+E\+N}~31}\label{mca_8h_a563588ef6851dd075f1f1eda9530209d}

\begin{DoxyCompactList}\small\item\em Maximum length of M\+C\+A framework string names. \end{DoxyCompactList}\item 
\hypertarget{mca_8h_a7ac25c8c619e42ae48ab3d846e2490b9}{\#define \hyperlink{mca_8h_a7ac25c8c619e42ae48ab3d846e2490b9}{M\+C\+A\+\_\+\+B\+A\+S\+E\+\_\+\+M\+A\+X\+\_\+\+C\+O\+M\+P\+O\+N\+E\+N\+T\+\_\+\+N\+A\+M\+E\+\_\+\+L\+E\+N}~63}\label{mca_8h_a7ac25c8c619e42ae48ab3d846e2490b9}

\begin{DoxyCompactList}\small\item\em Maximum length of M\+C\+A component string names. \end{DoxyCompactList}\item 
\hypertarget{mca_8h_abce55d42155adb672d0827661673aecb}{\#define \hyperlink{mca_8h_abce55d42155adb672d0827661673aecb}{M\+C\+A\+\_\+\+B\+A\+S\+E\+\_\+\+M\+E\+T\+A\+D\+A\+T\+A\+\_\+\+P\+A\+R\+A\+M\+\_\+\+N\+O\+N\+E}~(uint32\+\_\+t)0x00}\label{mca_8h_abce55d42155adb672d0827661673aecb}

\begin{DoxyCompactList}\small\item\em No Metadata flags. \end{DoxyCompactList}\item 
\hypertarget{mca_8h_a897241f36af010e7e120521a966d845e}{\#define \hyperlink{mca_8h_a897241f36af010e7e120521a966d845e}{M\+C\+A\+\_\+\+B\+A\+S\+E\+\_\+\+M\+E\+T\+A\+D\+A\+T\+A\+\_\+\+P\+A\+R\+A\+M\+\_\+\+C\+H\+E\+C\+K\+P\+O\+I\+N\+T}~(uint32\+\_\+t)0x02}\label{mca_8h_a897241f36af010e7e120521a966d845e}

\begin{DoxyCompactList}\small\item\em Checkpoint enabled Component. \end{DoxyCompactList}\item 
\hypertarget{mca_8h_a6c09e6a26512dff59066090647b97d47}{\#define \hyperlink{mca_8h_a6c09e6a26512dff59066090647b97d47}{M\+C\+A\+\_\+\+B\+A\+S\+E\+\_\+\+M\+E\+T\+A\+D\+A\+T\+A\+\_\+\+P\+A\+R\+A\+M\+\_\+\+D\+E\+B\+U\+G}~(uint32\+\_\+t)0x04}\label{mca_8h_a6c09e6a26512dff59066090647b97d47}

\begin{DoxyCompactList}\small\item\em Debug enabled/only Component. \end{DoxyCompactList}\item 
\#define \hyperlink{mca_8h_aa69e6104b36e9a3c0395a438aa3a8c6c}{M\+C\+A\+\_\+\+B\+A\+S\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+M\+A\+J\+O\+R}~2
\begin{DoxyCompactList}\small\item\em Macro for framework author convenience. \end{DoxyCompactList}\item 
\hypertarget{mca_8h_accbe7b963d6ba497b2c118f36be9db13}{\#define {\bfseries M\+C\+A\+\_\+\+B\+A\+S\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+M\+I\+N\+O\+R}~0}\label{mca_8h_accbe7b963d6ba497b2c118f36be9db13}

\item 
\hypertarget{mca_8h_a5245d98c41b429f9e6a7729a6fed92e4}{\#define {\bfseries M\+C\+A\+\_\+\+B\+A\+S\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+R\+E\+L\+E\+A\+S\+E}~0}\label{mca_8h_a5245d98c41b429f9e6a7729a6fed92e4}

\item 
\hypertarget{mca_8h_ac8ef3d5aa107b22fda7d6e14e6f2f789}{\#define {\bfseries M\+C\+A\+\_\+\+B\+A\+S\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+2\+\_\+0\+\_\+0}~\hyperlink{mca_8h_aa69e6104b36e9a3c0395a438aa3a8c6c}{M\+C\+A\+\_\+\+B\+A\+S\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+M\+A\+J\+O\+R}, M\+C\+A\+\_\+\+B\+A\+S\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+M\+I\+N\+O\+R, M\+C\+A\+\_\+\+B\+A\+S\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+R\+E\+L\+E\+A\+S\+E}\label{mca_8h_ac8ef3d5aa107b22fda7d6e14e6f2f789}

\end{DoxyCompactItemize}
\subsection*{Typedefs}
\begin{DoxyCompactItemize}
\item 
\hypertarget{mca_8h_a754b82edf8c7a63b09f7ee5270031bdd}{typedef struct \\*
\hyperlink{structmca__base__module__2__0__0__t}{mca\+\_\+base\+\_\+module\+\_\+2\+\_\+0\+\_\+0\+\_\+t} \hyperlink{mca_8h_a754b82edf8c7a63b09f7ee5270031bdd}{mca\+\_\+base\+\_\+module\+\_\+t}}\label{mca_8h_a754b82edf8c7a63b09f7ee5270031bdd}

\begin{DoxyCompactList}\small\item\em Unversioned convenience typedef; use this name in frameworks/components to stay forward source-\/compatible. \end{DoxyCompactList}\item 
\hypertarget{mca_8h_af3972ceee45d353bbb838b85d96ee004}{typedef struct \\*
\hyperlink{structmca__base__module__2__0__0__t}{mca\+\_\+base\+\_\+module\+\_\+2\+\_\+0\+\_\+0\+\_\+t} \hyperlink{mca_8h_af3972ceee45d353bbb838b85d96ee004}{mca\+\_\+base\+\_\+module\+\_\+2\+\_\+0\+\_\+0\+\_\+t}}\label{mca_8h_af3972ceee45d353bbb838b85d96ee004}

\begin{DoxyCompactList}\small\item\em Versioned convenience typedef. \end{DoxyCompactList}\item 
typedef int($\ast$ \hyperlink{mca_8h_a6aca606ea7da1da0b6c05ce977554cb5}{mca\+\_\+base\+\_\+open\+\_\+component\+\_\+1\+\_\+0\+\_\+0\+\_\+fn\+\_\+t} )(void)
\begin{DoxyCompactList}\small\item\em M\+C\+A component open function. \end{DoxyCompactList}\item 
typedef int($\ast$ \hyperlink{mca_8h_af9cfdc546ddf2c82149da948d99d7c72}{mca\+\_\+base\+\_\+close\+\_\+component\+\_\+1\+\_\+0\+\_\+0\+\_\+fn\+\_\+t} )(void)
\begin{DoxyCompactList}\small\item\em M\+C\+A component close function. \end{DoxyCompactList}\item 
typedef int($\ast$ \hyperlink{mca_8h_a0c87c383cb2b0badf8fa1de8bab9adf8}{mca\+\_\+base\+\_\+query\+\_\+component\+\_\+2\+\_\+0\+\_\+0\+\_\+fn\+\_\+t} )(\hyperlink{structmca__base__module__2__0__0__t}{mca\+\_\+base\+\_\+module\+\_\+2\+\_\+0\+\_\+0\+\_\+t} $\ast$$\ast$module, int $\ast$priority)
\begin{DoxyCompactList}\small\item\em M\+C\+A component query function. \end{DoxyCompactList}\item 
typedef int($\ast$ \hyperlink{mca_8h_af5e28cc04e7da75057a2019386cdc5a1}{mca\+\_\+base\+\_\+register\+\_\+component\+\_\+params\+\_\+2\+\_\+0\+\_\+0\+\_\+fn\+\_\+t} )(void)
\begin{DoxyCompactList}\small\item\em M\+C\+A component parameter registration function. \end{DoxyCompactList}\item 
\hypertarget{mca_8h_a8ec1d0b303938c31727745037481d1bf}{typedef struct \\*
\hyperlink{structmca__base__component__2__0__0__t}{mca\+\_\+base\+\_\+component\+\_\+2\+\_\+0\+\_\+0\+\_\+t} \hyperlink{mca_8h_a8ec1d0b303938c31727745037481d1bf}{mca\+\_\+base\+\_\+component\+\_\+t}}\label{mca_8h_a8ec1d0b303938c31727745037481d1bf}

\begin{DoxyCompactList}\small\item\em Unversioned convenience typedef; use this name in frameworks/components to stay forward source-\/compatible. \end{DoxyCompactList}\item 
\hypertarget{mca_8h_a4307778c547c69bd263391f97e23c24e}{typedef struct \\*
\hyperlink{structmca__base__component__2__0__0__t}{mca\+\_\+base\+\_\+component\+\_\+2\+\_\+0\+\_\+0\+\_\+t} \hyperlink{mca_8h_a4307778c547c69bd263391f97e23c24e}{mca\+\_\+base\+\_\+component\+\_\+2\+\_\+0\+\_\+0\+\_\+t}}\label{mca_8h_a4307778c547c69bd263391f97e23c24e}

\begin{DoxyCompactList}\small\item\em Versioned convenience typedef. \end{DoxyCompactList}\item 
\hypertarget{mca_8h_a3f50c74a7f411b5a7c193fefa7eea1f6}{typedef struct \\*
\hyperlink{structmca__base__component__data__2__0__0__t}{mca\+\_\+base\+\_\+component\+\_\+data\+\_\+2\+\_\+0\+\_\+0\+\_\+t} \hyperlink{mca_8h_a3f50c74a7f411b5a7c193fefa7eea1f6}{mca\+\_\+base\+\_\+component\+\_\+data\+\_\+t}}\label{mca_8h_a3f50c74a7f411b5a7c193fefa7eea1f6}

\begin{DoxyCompactList}\small\item\em Unversioned convenience typedef; use this name in frameworks/components to stay forward source-\/compatible. \end{DoxyCompactList}\item 
\hypertarget{mca_8h_acd3970e4cbaa315172ad7e73dd66caa2}{typedef struct \\*
\hyperlink{structmca__base__component__data__2__0__0__t}{mca\+\_\+base\+\_\+component\+\_\+data\+\_\+2\+\_\+0\+\_\+0\+\_\+t} \hyperlink{mca_8h_acd3970e4cbaa315172ad7e73dd66caa2}{mca\+\_\+base\+\_\+component\+\_\+data\+\_\+2\+\_\+0\+\_\+0\+\_\+t}}\label{mca_8h_acd3970e4cbaa315172ad7e73dd66caa2}

\begin{DoxyCompactList}\small\item\em Versioned convenience typedef. \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Enumerations}
\begin{DoxyCompactItemize}
\item 
enum \{ \\*
\hyperlink{mca_8h_a0944a4353780132eeab7b06e3e42291da256e2a70658520249c9d120546ae7111}{M\+C\+A\+\_\+\+S\+U\+C\+C\+E\+S\+S} = 0, 
\hyperlink{mca_8h_a0944a4353780132eeab7b06e3e42291da780532a1875837b78901f1b8e0418ad4}{M\+C\+A\+\_\+\+E\+R\+R\+O\+R} = -\/1, 
\hyperlink{mca_8h_a0944a4353780132eeab7b06e3e42291daf61985a5e769140fa7147b74fe33660f}{M\+C\+A\+\_\+\+E\+R\+R\+\_\+\+O\+U\+T\+\_\+\+O\+F\+\_\+\+R\+E\+S\+O\+U\+R\+C\+E} = -\/2, 
\hyperlink{mca_8h_a0944a4353780132eeab7b06e3e42291da2f11b6c51d4aa8dfcc65c3826c6244ef}{M\+C\+A\+\_\+\+E\+R\+R\+\_\+\+T\+E\+M\+P\+\_\+\+O\+U\+T\+\_\+\+O\+F\+\_\+\+R\+E\+S\+O\+U\+R\+C\+E} = -\/3, 
\\*
\hyperlink{mca_8h_a0944a4353780132eeab7b06e3e42291dae25a60e39084ca9b3bf3a5038dcdb5f9}{M\+C\+A\+\_\+\+E\+R\+R\+\_\+\+B\+A\+D\+\_\+\+P\+A\+R\+A\+M} = -\/5, 
\hyperlink{mca_8h_a0944a4353780132eeab7b06e3e42291da4c72e79a7c76a1da6f5bd05743305bc6}{M\+C\+A\+\_\+\+E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+I\+M\+P\+L\+E\+M\+E\+N\+T\+E\+D} = -\/10, 
\hyperlink{mca_8h_a0944a4353780132eeab7b06e3e42291da879cb94538a224393a176e8a5e9c13af}{M\+C\+A\+\_\+\+E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+S\+U\+P\+P\+O\+R\+T\+E\+D} = -\/11, 
\hyperlink{mca_8h_a0944a4353780132eeab7b06e3e42291daf789b58632e33f0b46118eec17e02bcf}{M\+C\+A\+\_\+\+M\+A\+X\+\_\+\+E\+R\+R\+O\+R} = -\/20
 \}
\begin{DoxyCompactList}\small\item\em M\+C\+A return codes. \end{DoxyCompactList}\end{DoxyCompactItemize}


\subsection{Detailed Description}
Top-\/level interface for {\itshape all} M\+C\+A components. 

Historical notes\+:

Open M\+P\+I originally used a v1.\+0.\+0 of the M\+C\+A component structs, but did not have a version number in the struct name. If I recall correctly, this is because we simply didn't think through (or never envisioned) changing the M\+C\+A base component struct itself. Oops.

We made some changes in the base struct in Open M\+P\+I v1.\+3, and decided the following at the same time\+:


\begin{DoxyItemize}
\item Bump the M\+C\+A version number to 2.\+0.\+0 and add some \char`\"{}reserved\char`\"{} space at the end of the struct.
\item The major M\+C\+A version number is essentially tied to the space that the struct occupies; if we make future changes in the struct by just using some of the reserved space, it may be possible to just increment the minor version number (depending on the scope of the change). If we need to add more space to the struct, we'll increment the major version number.
\item The M\+C\+A base component struct now has a version number in it (starting with Open M\+P\+I v1.\+3, it is 2.\+0.\+0).
\item As was an unstated assumption in prior versions of Open M\+P\+I, the unversioned versions of struct names (both in the M\+C\+A base and in individual framework bases) are intended for components who want to be forward source-\/compatible. That is, the unversioned struct name always represents the most recent interface version. If you need to use an older version, you can explicitly use that older struct version name. Please note, however, the Open M\+P\+I developers may not generally provide older versions of framework interface structs unless they know if someone outside of the Open M\+P\+I community needs it.

$\ast$$\ast$$\ast$\+I\+F Y\+O\+U N\+E\+E\+D B\+A\+C\+K\+W\+A\+R\+D\+S S\+O\+U\+R\+C\+E O\+R B\+I\+N\+A\+R\+Y C\+O\+M\+P\+A\+T\+I\+B\+I\+L\+I\+T\+Y, you must let us know!$\ast$$\ast$$\ast$
\item We are currently only aware of one external developer making Open M\+P\+I components for the v1.\+2 series. He already knows that there are major changes coming in the v1.\+3 series, and does not expect to be able to use his v1.\+2 D\+S\+O binaries in v1.\+3. As such, we are breaking backwards binary compatibility in v1.\+3\+: there is no possibility of loading an M\+C\+A v1.\+0 binary component in Open M\+P\+I v1.\+3 or beyond (source compatibility is much easier -- the binary \char`\"{}refuse to load M\+C\+A components $<$v2.\+0.\+0\char`\"{} policy is enforced in mca\+\_\+base\+\_\+component\+\_\+find.\+c).

$\ast$$\ast$$\ast$\+I\+F Y\+O\+U N\+E\+E\+D B\+A\+C\+K\+W\+A\+R\+D\+S B\+I\+N\+A\+R\+Y C\+O\+M\+P\+A\+T\+I\+B\+I\+L\+I\+T\+Y, please let us know!$\ast$$\ast$$\ast$
\item Note that we decided that framework version numbers are {\itshape not} related to the M\+C\+A version number. It is permissible to bump the M\+C\+A version number and leave all the framework version numbers they same. Specifically\+: a component is uniquely identified by its (M\+C\+A version, framework version, component version) tuple. So a component that is simply compiled with two different M\+C\+A base versions is still considered \char`\"{}different\char`\"{} because the tuple first member is different.
\item Per the discussion above, we decided to have M\+C\+A v2.\+0 no longer load $<$v2.\+0.\+0 components, and therefore avoided the \char`\"{}how to upcast
  a component in memory\char`\"{} issue. After v2.\+0.\+0, it is slightly easier because the M\+C\+A component structs have \char`\"{}reserved\char`\"{} space at the end that may account for future version data fields. 
\end{DoxyItemize}

\subsection{Macro Definition Documentation}
\hypertarget{mca_8h_aa69e6104b36e9a3c0395a438aa3a8c6c}{\index{mca.\+h@{mca.\+h}!M\+C\+A\+\_\+\+B\+A\+S\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+M\+A\+J\+O\+R@{M\+C\+A\+\_\+\+B\+A\+S\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+M\+A\+J\+O\+R}}
\index{M\+C\+A\+\_\+\+B\+A\+S\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+M\+A\+J\+O\+R@{M\+C\+A\+\_\+\+B\+A\+S\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+M\+A\+J\+O\+R}!mca.\+h@{mca.\+h}}
\subsubsection[{M\+C\+A\+\_\+\+B\+A\+S\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+M\+A\+J\+O\+R}]{\setlength{\rightskip}{0pt plus 5cm}\#define M\+C\+A\+\_\+\+B\+A\+S\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+M\+A\+J\+O\+R~2}}\label{mca_8h_aa69e6104b36e9a3c0395a438aa3a8c6c}


Macro for framework author convenience. 

This macro is used by frameworks defining their component types, indicating that they subscribe to the M\+C\+A version 2.\+0.\+0. See component header files (e.\+g., \hyperlink{coll_8h}{coll.\+h}) for examples of its usage. 

\subsection{Typedef Documentation}
\hypertarget{mca_8h_af9cfdc546ddf2c82149da948d99d7c72}{\index{mca.\+h@{mca.\+h}!mca\+\_\+base\+\_\+close\+\_\+component\+\_\+1\+\_\+0\+\_\+0\+\_\+fn\+\_\+t@{mca\+\_\+base\+\_\+close\+\_\+component\+\_\+1\+\_\+0\+\_\+0\+\_\+fn\+\_\+t}}
\index{mca\+\_\+base\+\_\+close\+\_\+component\+\_\+1\+\_\+0\+\_\+0\+\_\+fn\+\_\+t@{mca\+\_\+base\+\_\+close\+\_\+component\+\_\+1\+\_\+0\+\_\+0\+\_\+fn\+\_\+t}!mca.\+h@{mca.\+h}}
\subsubsection[{mca\+\_\+base\+\_\+close\+\_\+component\+\_\+1\+\_\+0\+\_\+0\+\_\+fn\+\_\+t}]{\setlength{\rightskip}{0pt plus 5cm}typedef int($\ast$ mca\+\_\+base\+\_\+close\+\_\+component\+\_\+1\+\_\+0\+\_\+0\+\_\+fn\+\_\+t)(void)}}\label{mca_8h_af9cfdc546ddf2c82149da948d99d7c72}


M\+C\+A component close function. 


\begin{DoxyRetVals}{Return values}
{\em M\+C\+A\+\_\+\+S\+U\+C\+C\+E\+S\+S} & The component successfully shut down.\\
\hline
{\em any\+\_\+other\+\_\+value} & Some error occurred, but is likely to be ignored.\\
\hline
\end{DoxyRetVals}
This function is invoked on a component after all of its modules have been finalized (according to the rules of its framework) and the component will never be used in the process again; the component may be unloaded from the process memory after the close function has been invoked.

This function is typically used to release any resources still in use by the component.

If the component has no resources to free, it may provide N\+U\+L\+L for this function. In this case, the M\+C\+A will act as if it called the close function and it returned M\+C\+A\+\_\+\+S\+U\+C\+C\+E\+S\+S. \hypertarget{mca_8h_a6aca606ea7da1da0b6c05ce977554cb5}{\index{mca.\+h@{mca.\+h}!mca\+\_\+base\+\_\+open\+\_\+component\+\_\+1\+\_\+0\+\_\+0\+\_\+fn\+\_\+t@{mca\+\_\+base\+\_\+open\+\_\+component\+\_\+1\+\_\+0\+\_\+0\+\_\+fn\+\_\+t}}
\index{mca\+\_\+base\+\_\+open\+\_\+component\+\_\+1\+\_\+0\+\_\+0\+\_\+fn\+\_\+t@{mca\+\_\+base\+\_\+open\+\_\+component\+\_\+1\+\_\+0\+\_\+0\+\_\+fn\+\_\+t}!mca.\+h@{mca.\+h}}
\subsubsection[{mca\+\_\+base\+\_\+open\+\_\+component\+\_\+1\+\_\+0\+\_\+0\+\_\+fn\+\_\+t}]{\setlength{\rightskip}{0pt plus 5cm}typedef int($\ast$ mca\+\_\+base\+\_\+open\+\_\+component\+\_\+1\+\_\+0\+\_\+0\+\_\+fn\+\_\+t)(void)}}\label{mca_8h_a6aca606ea7da1da0b6c05ce977554cb5}


M\+C\+A component open function. 


\begin{DoxyRetVals}{Return values}
{\em M\+C\+A\+\_\+\+S\+U\+C\+C\+E\+S\+S} & (or O\+P\+A\+L\+\_\+\+S\+U\+C\+C\+E\+S\+S or O\+R\+T\+E\+\_\+\+S\+U\+C\+C\+E\+S\+S or O\+M\+P\+I\+\_\+\+S\+U\+C\+C\+E\+S\+S) This component can be used in the process.\\
\hline
{\em O\+P\+A\+L\+\_\+\+E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+A\+V\+A\+I\+L\+A\+B\+L\+E} & Silently ignore this component for the duration of the process (it may even be unloaded from the process).\\
\hline
{\em anything\+\_\+else} & The M\+C\+A base will print an error message ignore this component for the duration of the process (it may even be unloaded from the process).\\
\hline
\end{DoxyRetVals}
All M\+C\+A components can have an \char`\"{}open\char`\"{} function that is invoked once per process, when the component is located and loaded. This function should register any M\+C\+A parameters (using \hyperlink{mca__base__param_8h_a66fd2603b63658f054f7a6a54891c0c2}{mca\+\_\+base\+\_\+param\+\_\+register\+\_\+int()} and \hyperlink{mca__base__param_8h_a475d552a8bfa1f2690d9b5add80cda31}{mca\+\_\+base\+\_\+param\+\_\+register\+\_\+string()}) that will be used by the component. Parameter registrations should occur in this function because the ompi\+\_\+info command can be used by users to display all available M\+C\+A parameters (and their default values). However, the ompi\+\_\+info command {\itshape only} invokes this open function on all components (i.\+e., no other component A\+P\+I methods).

This function can also be used to allocate any resources necessary for the component (e.\+g., heap memory).

This function should return M\+C\+A\+\_\+\+S\+U\+C\+C\+E\+S\+S if it wishes to remain loaded in the process. Any other return value will cause the M\+C\+A base to unload the component. Although most components do not use this mechanism to force themselves to be unloaded (because if they are immediately unloaded, ompi\+\_\+info will not display them), the mechanism is available should the need arise.

If the component a) has no M\+C\+A parameters to register, b) no resources to allocate, and c) can always be used in a process (albiet perhaps not selected), it may provide N\+U\+L\+L for this function. In this cause, the M\+C\+A will act as if it called the open function and it returned M\+C\+A\+\_\+\+S\+U\+C\+C\+E\+S\+S. \hypertarget{mca_8h_a0c87c383cb2b0badf8fa1de8bab9adf8}{\index{mca.\+h@{mca.\+h}!mca\+\_\+base\+\_\+query\+\_\+component\+\_\+2\+\_\+0\+\_\+0\+\_\+fn\+\_\+t@{mca\+\_\+base\+\_\+query\+\_\+component\+\_\+2\+\_\+0\+\_\+0\+\_\+fn\+\_\+t}}
\index{mca\+\_\+base\+\_\+query\+\_\+component\+\_\+2\+\_\+0\+\_\+0\+\_\+fn\+\_\+t@{mca\+\_\+base\+\_\+query\+\_\+component\+\_\+2\+\_\+0\+\_\+0\+\_\+fn\+\_\+t}!mca.\+h@{mca.\+h}}
\subsubsection[{mca\+\_\+base\+\_\+query\+\_\+component\+\_\+2\+\_\+0\+\_\+0\+\_\+fn\+\_\+t}]{\setlength{\rightskip}{0pt plus 5cm}typedef int($\ast$ mca\+\_\+base\+\_\+query\+\_\+component\+\_\+2\+\_\+0\+\_\+0\+\_\+fn\+\_\+t)({\bf mca\+\_\+base\+\_\+module\+\_\+2\+\_\+0\+\_\+0\+\_\+t} $\ast$$\ast$module, int $\ast$priority)}}\label{mca_8h_a0c87c383cb2b0badf8fa1de8bab9adf8}


M\+C\+A component query function. 


\begin{DoxyRetVals}{Return values}
{\em O\+P\+A\+L\+\_\+\+S\+U\+C\+C\+E\+S\+S} & The component successfully queried.\\
\hline
{\em any\+\_\+other\+\_\+value} & Some error occurred, but is likely to be ignored.\\
\hline
\end{DoxyRetVals}

\begin{DoxyParams}{Parameters}
{\em module} & The module to be used if this component is selected.\\
\hline
{\em priority} & The priority of this component.\\
\hline
\end{DoxyParams}
This function is used by the mca\+\_\+base\+\_\+select function to find the highest priority component to select. Frameworks are free to implement their own query function, but must also implment their own select function as a result. \hypertarget{mca_8h_af5e28cc04e7da75057a2019386cdc5a1}{\index{mca.\+h@{mca.\+h}!mca\+\_\+base\+\_\+register\+\_\+component\+\_\+params\+\_\+2\+\_\+0\+\_\+0\+\_\+fn\+\_\+t@{mca\+\_\+base\+\_\+register\+\_\+component\+\_\+params\+\_\+2\+\_\+0\+\_\+0\+\_\+fn\+\_\+t}}
\index{mca\+\_\+base\+\_\+register\+\_\+component\+\_\+params\+\_\+2\+\_\+0\+\_\+0\+\_\+fn\+\_\+t@{mca\+\_\+base\+\_\+register\+\_\+component\+\_\+params\+\_\+2\+\_\+0\+\_\+0\+\_\+fn\+\_\+t}!mca.\+h@{mca.\+h}}
\subsubsection[{mca\+\_\+base\+\_\+register\+\_\+component\+\_\+params\+\_\+2\+\_\+0\+\_\+0\+\_\+fn\+\_\+t}]{\setlength{\rightskip}{0pt plus 5cm}typedef int($\ast$ mca\+\_\+base\+\_\+register\+\_\+component\+\_\+params\+\_\+2\+\_\+0\+\_\+0\+\_\+fn\+\_\+t)(void)}}\label{mca_8h_af5e28cc04e7da75057a2019386cdc5a1}


M\+C\+A component parameter registration function. 


\begin{DoxyRetVals}{Return values}
{\em M\+C\+A\+\_\+\+S\+U\+C\+C\+E\+S\+S} & This component successfully registered its parameters and can be used in this process.\\
\hline
{\em anything\+\_\+else} & The M\+C\+A will ignore this component for the duration of the process.\\
\hline
\end{DoxyRetVals}
If a component has a non-\/\+N\+U\+L\+L parameter registration function, it will be invoked to register all M\+C\+A parameters associated with the component. This function is invoked {\itshape before} the component \char`\"{}open\char`\"{} function is invoked.

The registration function should not allocate any resources that need to be freed (aside from registering M\+C\+A parameters). Specifically, strings that are passed to the M\+C\+A parameter registration functions are all internally copied; there's no need for the caller to keep them after registering a parameter. Hence, it is possible that the registration function will be the {\itshape only} function invoked on a component; component authors should take care that no resources are leaked in this case.

This function should return M\+C\+A\+\_\+\+S\+U\+C\+C\+E\+S\+S if it wishes to remain loaded in the process. Any other return value will cause the M\+C\+A base to unload the component. Although most components do not use this mechanism to force themselves to be unloaded (because if they are immediately unloaded, ompi\+\_\+info will not display them), the mechanism is available should the need arise.

If the component a) has no M\+C\+A parameters to register, b) no resources to allocate, and c) can always be used in a process (albiet perhaps not selected), it may provide N\+U\+L\+L for this function. In this cause, the M\+C\+A will act as if it called the registration function and it returned M\+C\+A\+\_\+\+S\+U\+C\+C\+E\+S\+S. 

\subsection{Enumeration Type Documentation}
\hypertarget{mca_8h_a0944a4353780132eeab7b06e3e42291d}{\subsubsection[{anonymous enum}]{\setlength{\rightskip}{0pt plus 5cm}anonymous enum}}\label{mca_8h_a0944a4353780132eeab7b06e3e42291d}


M\+C\+A return codes. 

\begin{Desc}
\item[Enumerator]\par
\begin{description}
\index{M\+C\+A\+\_\+\+S\+U\+C\+C\+E\+S\+S@{M\+C\+A\+\_\+\+S\+U\+C\+C\+E\+S\+S}!mca.\+h@{mca.\+h}}\index{mca.\+h@{mca.\+h}!M\+C\+A\+\_\+\+S\+U\+C\+C\+E\+S\+S@{M\+C\+A\+\_\+\+S\+U\+C\+C\+E\+S\+S}}\item[{\em 
\hypertarget{mca_8h_a0944a4353780132eeab7b06e3e42291da256e2a70658520249c9d120546ae7111}{M\+C\+A\+\_\+\+S\+U\+C\+C\+E\+S\+S}\label{mca_8h_a0944a4353780132eeab7b06e3e42291da256e2a70658520249c9d120546ae7111}
}]Success. \index{M\+C\+A\+\_\+\+E\+R\+R\+O\+R@{M\+C\+A\+\_\+\+E\+R\+R\+O\+R}!mca.\+h@{mca.\+h}}\index{mca.\+h@{mca.\+h}!M\+C\+A\+\_\+\+E\+R\+R\+O\+R@{M\+C\+A\+\_\+\+E\+R\+R\+O\+R}}\item[{\em 
\hypertarget{mca_8h_a0944a4353780132eeab7b06e3e42291da780532a1875837b78901f1b8e0418ad4}{M\+C\+A\+\_\+\+E\+R\+R\+O\+R}\label{mca_8h_a0944a4353780132eeab7b06e3e42291da780532a1875837b78901f1b8e0418ad4}
}]General error. \index{M\+C\+A\+\_\+\+E\+R\+R\+\_\+\+O\+U\+T\+\_\+\+O\+F\+\_\+\+R\+E\+S\+O\+U\+R\+C\+E@{M\+C\+A\+\_\+\+E\+R\+R\+\_\+\+O\+U\+T\+\_\+\+O\+F\+\_\+\+R\+E\+S\+O\+U\+R\+C\+E}!mca.\+h@{mca.\+h}}\index{mca.\+h@{mca.\+h}!M\+C\+A\+\_\+\+E\+R\+R\+\_\+\+O\+U\+T\+\_\+\+O\+F\+\_\+\+R\+E\+S\+O\+U\+R\+C\+E@{M\+C\+A\+\_\+\+E\+R\+R\+\_\+\+O\+U\+T\+\_\+\+O\+F\+\_\+\+R\+E\+S\+O\+U\+R\+C\+E}}\item[{\em 
\hypertarget{mca_8h_a0944a4353780132eeab7b06e3e42291daf61985a5e769140fa7147b74fe33660f}{M\+C\+A\+\_\+\+E\+R\+R\+\_\+\+O\+U\+T\+\_\+\+O\+F\+\_\+\+R\+E\+S\+O\+U\+R\+C\+E}\label{mca_8h_a0944a4353780132eeab7b06e3e42291daf61985a5e769140fa7147b74fe33660f}
}]Out of resources; a fatal error. \index{M\+C\+A\+\_\+\+E\+R\+R\+\_\+\+T\+E\+M\+P\+\_\+\+O\+U\+T\+\_\+\+O\+F\+\_\+\+R\+E\+S\+O\+U\+R\+C\+E@{M\+C\+A\+\_\+\+E\+R\+R\+\_\+\+T\+E\+M\+P\+\_\+\+O\+U\+T\+\_\+\+O\+F\+\_\+\+R\+E\+S\+O\+U\+R\+C\+E}!mca.\+h@{mca.\+h}}\index{mca.\+h@{mca.\+h}!M\+C\+A\+\_\+\+E\+R\+R\+\_\+\+T\+E\+M\+P\+\_\+\+O\+U\+T\+\_\+\+O\+F\+\_\+\+R\+E\+S\+O\+U\+R\+C\+E@{M\+C\+A\+\_\+\+E\+R\+R\+\_\+\+T\+E\+M\+P\+\_\+\+O\+U\+T\+\_\+\+O\+F\+\_\+\+R\+E\+S\+O\+U\+R\+C\+E}}\item[{\em 
\hypertarget{mca_8h_a0944a4353780132eeab7b06e3e42291da2f11b6c51d4aa8dfcc65c3826c6244ef}{M\+C\+A\+\_\+\+E\+R\+R\+\_\+\+T\+E\+M\+P\+\_\+\+O\+U\+T\+\_\+\+O\+F\+\_\+\+R\+E\+S\+O\+U\+R\+C\+E}\label{mca_8h_a0944a4353780132eeab7b06e3e42291da2f11b6c51d4aa8dfcc65c3826c6244ef}
}]Out of resources; try again later. \index{M\+C\+A\+\_\+\+E\+R\+R\+\_\+\+B\+A\+D\+\_\+\+P\+A\+R\+A\+M@{M\+C\+A\+\_\+\+E\+R\+R\+\_\+\+B\+A\+D\+\_\+\+P\+A\+R\+A\+M}!mca.\+h@{mca.\+h}}\index{mca.\+h@{mca.\+h}!M\+C\+A\+\_\+\+E\+R\+R\+\_\+\+B\+A\+D\+\_\+\+P\+A\+R\+A\+M@{M\+C\+A\+\_\+\+E\+R\+R\+\_\+\+B\+A\+D\+\_\+\+P\+A\+R\+A\+M}}\item[{\em 
\hypertarget{mca_8h_a0944a4353780132eeab7b06e3e42291dae25a60e39084ca9b3bf3a5038dcdb5f9}{M\+C\+A\+\_\+\+E\+R\+R\+\_\+\+B\+A\+D\+\_\+\+P\+A\+R\+A\+M}\label{mca_8h_a0944a4353780132eeab7b06e3e42291dae25a60e39084ca9b3bf3a5038dcdb5f9}
}]Equivalent to M\+P\+I\+\_\+\+E\+R\+R\+\_\+\+A\+R\+G error code. \index{M\+C\+A\+\_\+\+E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+I\+M\+P\+L\+E\+M\+E\+N\+T\+E\+D@{M\+C\+A\+\_\+\+E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+I\+M\+P\+L\+E\+M\+E\+N\+T\+E\+D}!mca.\+h@{mca.\+h}}\index{mca.\+h@{mca.\+h}!M\+C\+A\+\_\+\+E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+I\+M\+P\+L\+E\+M\+E\+N\+T\+E\+D@{M\+C\+A\+\_\+\+E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+I\+M\+P\+L\+E\+M\+E\+N\+T\+E\+D}}\item[{\em 
\hypertarget{mca_8h_a0944a4353780132eeab7b06e3e42291da4c72e79a7c76a1da6f5bd05743305bc6}{M\+C\+A\+\_\+\+E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+I\+M\+P\+L\+E\+M\+E\+N\+T\+E\+D}\label{mca_8h_a0944a4353780132eeab7b06e3e42291da4c72e79a7c76a1da6f5bd05743305bc6}
}]Returned by functions or functionality that has not yet been implemented. \index{M\+C\+A\+\_\+\+E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+S\+U\+P\+P\+O\+R\+T\+E\+D@{M\+C\+A\+\_\+\+E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+S\+U\+P\+P\+O\+R\+T\+E\+D}!mca.\+h@{mca.\+h}}\index{mca.\+h@{mca.\+h}!M\+C\+A\+\_\+\+E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+S\+U\+P\+P\+O\+R\+T\+E\+D@{M\+C\+A\+\_\+\+E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+S\+U\+P\+P\+O\+R\+T\+E\+D}}\item[{\em 
\hypertarget{mca_8h_a0944a4353780132eeab7b06e3e42291da879cb94538a224393a176e8a5e9c13af}{M\+C\+A\+\_\+\+E\+R\+R\+\_\+\+N\+O\+T\+\_\+\+S\+U\+P\+P\+O\+R\+T\+E\+D}\label{mca_8h_a0944a4353780132eeab7b06e3e42291da879cb94538a224393a176e8a5e9c13af}
}]Returned by functionality that is not supported. \index{M\+C\+A\+\_\+\+M\+A\+X\+\_\+\+E\+R\+R\+O\+R@{M\+C\+A\+\_\+\+M\+A\+X\+\_\+\+E\+R\+R\+O\+R}!mca.\+h@{mca.\+h}}\index{mca.\+h@{mca.\+h}!M\+C\+A\+\_\+\+M\+A\+X\+\_\+\+E\+R\+R\+O\+R@{M\+C\+A\+\_\+\+M\+A\+X\+\_\+\+E\+R\+R\+O\+R}}\item[{\em 
\hypertarget{mca_8h_a0944a4353780132eeab7b06e3e42291daf789b58632e33f0b46118eec17e02bcf}{M\+C\+A\+\_\+\+M\+A\+X\+\_\+\+E\+R\+R\+O\+R}\label{mca_8h_a0944a4353780132eeab7b06e3e42291daf789b58632e33f0b46118eec17e02bcf}
}]Maximum error code. \end{description}
\end{Desc}
