#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-
+#include <limits.h>
#include "private.h"
#include "smpi_mpi_dt_private.h"
#include "mc/mc.h"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_mpi_dt, smpi,
"Logging specific to SMPI (datatype)");
+#define INTSIZEDCHAR (sizeof(int)*CHAR_BIT-1)/3 + 3
xbt_dict_t smpi_type_keyvals = NULL;
int type_keyval_id=0;//avoid collisions
}
int smpi_type_attr_delete(MPI_Datatype type, int keyval){
- char* tmpkey=xbt_malloc(sizeof(int));
+ char* tmpkey=xbt_malloc(INTSIZEDCHAR);
sprintf(tmpkey, "%d", keyval);
smpi_type_key_elem elem = xbt_dict_get_or_null(smpi_type_keyvals, (const char*)tmpkey);
if(!elem)
}
int smpi_type_attr_get(MPI_Datatype type, int keyval, void* attr_value, int* flag){
- char* tmpkey=xbt_malloc(sizeof(int));
+ char* tmpkey=xbt_malloc(INTSIZEDCHAR);
sprintf(tmpkey, "%d", keyval);
smpi_type_key_elem elem = xbt_dict_get_or_null(smpi_type_keyvals, (const char*)tmpkey);
if(!elem)
return MPI_SUCCESS;
}
TRY {
- char* tmpkey=xbt_malloc(sizeof(int));
- sprintf(tmpkey, "%d", keyval);
*(void**)attr_value = xbt_dict_get(type->attributes, (const char*)tmpkey);
*flag=1;
}
int smpi_type_attr_put(MPI_Datatype type, int keyval, void* attr_value){
if(!smpi_type_keyvals)
smpi_type_keyvals = xbt_dict_new();
- char* tmpkey=xbt_malloc(sizeof(int));
+ char* tmpkey=xbt_malloc(INTSIZEDCHAR);
sprintf(tmpkey, "%d", keyval);
smpi_type_key_elem elem = xbt_dict_get_or_null(smpi_type_keyvals, (const char*)tmpkey);
if(!elem )
value->delete_fn=delete_fn;
*keyval = type_keyval_id;
- char* tmpkey=xbt_malloc(sizeof(int));
+ char* tmpkey=xbt_malloc(INTSIZEDCHAR);
sprintf(tmpkey, "%d", *keyval);
xbt_dict_set(smpi_type_keyvals,(const char*)tmpkey,(void*)value, NULL);
type_keyval_id++;
smpi_type_key_elem elem = xbt_dict_get_or_null(smpi_type_keyvals, (const char*)keyval);
if(!elem)
return MPI_ERR_ARG;
- char* tmpkey=xbt_malloc(sizeof(int));
+ char* tmpkey=xbt_malloc(INTSIZEDCHAR);
sprintf(tmpkey, "%d", *keyval);
xbt_dict_remove(smpi_type_keyvals, (const char*)tmpkey);
xbt_free(elem);