#include "src/include/pmix_config.h"
#include <string.h>
#include "src/mca/base/pmix_base.h"
#include "src/mca/mca.h"
int pmix_mca_base_component_compare_priority(pmix_mca_base_component_priority_list_item_t *a,
pmix_mca_base_component_priority_list_item_t *b)
{
if (a->cpli_priority > b->cpli_priority) {
return -1;
} else if (a->cpli_priority < b->cpli_priority) {
return 1;
} else {
return pmix_mca_base_component_compare(a->super.cli_component, b->super.cli_component);
}
}
int pmix_mca_base_component_compare(const pmix_mca_base_component_t *aa,
const pmix_mca_base_component_t *bb)
{
int val;
val = strncmp(aa->pmix_mca_type_name, bb->pmix_mca_type_name, PMIX_MCA_BASE_MAX_TYPE_NAME_LEN);
if (val != 0) {
return -val;
}
val = strncmp(aa->pmix_mca_component_name, bb->pmix_mca_component_name,
PMIX_MCA_BASE_MAX_COMPONENT_NAME_LEN);
if (val != 0) {
return -val;
}
if (aa->pmix_mca_component_major_version > bb->pmix_mca_component_major_version) {
return -1;
} else if (aa->pmix_mca_component_major_version < bb->pmix_mca_component_major_version) {
return 1;
} else if (aa->pmix_mca_component_minor_version > bb->pmix_mca_component_minor_version) {
return -1;
} else if (aa->pmix_mca_component_minor_version < bb->pmix_mca_component_minor_version) {
return 1;
} else if (aa->pmix_mca_component_release_version > bb->pmix_mca_component_release_version) {
return -1;
} else if (aa->pmix_mca_component_release_version < bb->pmix_mca_component_release_version) {
return 1;
}
return 0;
}
int pmix_mca_base_component_compatible(const pmix_mca_base_component_t *aa,
const pmix_mca_base_component_t *bb)
{
int val;
val = strncmp(aa->pmix_mca_type_name, bb->pmix_mca_type_name, PMIX_MCA_BASE_MAX_TYPE_NAME_LEN);
if (val != 0) {
return -val;
}
val = strncmp(aa->pmix_mca_component_name, bb->pmix_mca_component_name,
PMIX_MCA_BASE_MAX_COMPONENT_NAME_LEN);
if (val != 0) {
return -val;
}
if (aa->pmix_mca_component_major_version > bb->pmix_mca_component_major_version) {
return -1;
} else if (aa->pmix_mca_component_major_version < bb->pmix_mca_component_major_version) {
return 1;
} else if (aa->pmix_mca_component_minor_version > bb->pmix_mca_component_minor_version) {
return -1;
} else if (aa->pmix_mca_component_minor_version < bb->pmix_mca_component_minor_version) {
return 1;
}
return 0;
}
char *pmix_mca_base_component_to_string(const pmix_mca_base_component_t *a)
{
char *str = NULL;
if (0 > asprintf(&str, "%s.%s.%d.%d", a->pmix_mca_type_name, a->pmix_mca_component_name,
a->pmix_mca_component_major_version, a->pmix_mca_component_minor_version)) {
return NULL;
}
return str;
}