107 ABTI_UB_ASSERT(ABTI_initialized());
111 ABTI_sched_config *p_config;
113 abt_errno =
ABTU_calloc(1,
sizeof(ABTI_sched_config), (
void **)&p_config);
114 ABTI_CHECK_ERROR(abt_errno);
117 for (i = 0; i < ABTI_SCHED_CONFIG_HTABLE_SIZE; i++) {
118 p_config->elements[i].idx = ABTI_SCHED_CONFIG_UNUSED_INDEX;
122 va_start(varg_list, config);
133 int int_val = va_arg(varg_list,
int);
139 double double_val = va_arg(varg_list,
double);
146 void *ptr_val = va_arg(varg_list,
void *);
157 ABTI_HANDLE_ERROR(abt_errno);
162 *config = ABTI_sched_config_get_handle(p_config);
207 ABTI_UB_ASSERT(ABTI_initialized());
210 ABTI_sched_config *p_config = ABTI_sched_config_get_ptr(config);
211 ABTI_CHECK_NULL_SCHED_CONFIG_PTR(p_config);
214 va_start(varg_list, num_vars);
215 for (idx = 0; idx < num_vars; idx++) {
216 void *ptr = va_arg(varg_list,
void *);
252 ABTI_UB_ASSERT(ABTI_initialized());
254 ABTI_sched_config *p_config = ABTI_sched_config_get_ptr(*config);
255 ABTI_CHECK_NULL_SCHED_CONFIG_PTR(p_config);
311 ABTI_UB_ASSERT(ABTI_initialized());
313 ABTI_sched_config *p_config = ABTI_sched_config_get_ptr(config);
314 ABTI_CHECK_NULL_SCHED_CONFIG_PTR(p_config);
316 ABTI_CHECK_ERROR(abt_errno);
361 ABTI_UB_ASSERT(ABTI_initialized());
363 ABTI_sched_config *p_config = ABTI_sched_config_get_ptr(config);
364 ABTI_CHECK_NULL_SCHED_CONFIG_PTR(p_config);
366 ABTI_CHECK_ERROR(abt_errno);
374 ABTU_ret_err int ABTI_sched_config_read(
const ABTI_sched_config *p_config,
375 int idx,
void *p_val)
388 int table_index = ((idx % ABTI_SCHED_CONFIG_HTABLE_SIZE) +
389 ABTI_SCHED_CONFIG_HTABLE_SIZE) %
390 ABTI_SCHED_CONFIG_HTABLE_SIZE;
391 if (p_config->elements[table_index].idx == ABTI_SCHED_CONFIG_UNUSED_INDEX) {
394 const ABTI_sched_config_element *p_element =
395 &p_config->elements[table_index];
397 if (p_element->idx == idx) {
399 memcpy(p_val, p_element->val,
403 *p_type = p_element->type;
407 p_element = p_element->p_next;
418 int table_index = ((idx % ABTI_SCHED_CONFIG_HTABLE_SIZE) +
419 ABTI_SCHED_CONFIG_HTABLE_SIZE) %
420 ABTI_SCHED_CONFIG_HTABLE_SIZE;
421 if (p_config->elements[table_index].idx == ABTI_SCHED_CONFIG_UNUSED_INDEX) {
424 p_config->elements[table_index].idx = idx;
425 p_config->elements[table_index].type = type;
426 memcpy(p_config->elements[table_index].val, p_val,
430 ABTI_sched_config_element *p_element = &p_config->elements[table_index];
431 ABTI_sched_config_element **pp_element = NULL;
433 if (p_element->idx == idx) {
436 p_element->type = type;
441 *pp_element = p_element->p_next;
444 ABTI_sched_config_element *p_next = p_element->p_next;
446 memcpy(p_element, p_next,
447 sizeof(ABTI_sched_config_element));
450 p_element->idx = ABTI_SCHED_CONFIG_UNUSED_INDEX;
455 }
else if (!p_element->p_next) {
458 ABTI_sched_config_element *p_new_element;
461 (
void **)&p_new_element);
462 ABTI_CHECK_ERROR(abt_errno);
463 p_new_element->idx = idx;
464 p_new_element->type = type;
465 memcpy(p_new_element->val, p_val,
467 p_element->p_next = p_new_element;
471 pp_element = &p_element->p_next;
472 p_element = *pp_element;
483 for (i = 0; i < ABTI_SCHED_CONFIG_HTABLE_SIZE; i++) {
484 ABTI_sched_config_element *p_element = p_config->elements[i].p_next;
486 ABTI_sched_config_element *p_next = p_element->p_next;
500 return sizeof(double);
502 return sizeof(
void *);