return res;
}
+/** @brief retrieve an existing message type from its name (or NULL if it does not exist). */
+gras_datadesc_type_t gras_datadesc_by_name_or_null (const char *name) {
+ xbt_ex_t e;
+ gras_datadesc_type_t res = NULL;
+
+ TRY {
+ res = gras_datadesc_by_name(name);
+ } CATCH(e) {
+ res = NULL;
+ xbt_ex_free(e);
+ }
+ return res;
+}
/**
- * This returns NULL no type of this name can be found instead of throwing exceptions which would complicate the GRAS_DEFINE_TYPE macro
+ * Search the given datadesc (or raises an exception if it can't be found)
*/
gras_datadesc_type_t gras_datadesc_by_name(const char *name) {
xbt_ex_t e;
gras_datadesc_type_t res = NULL;
+ volatile int found = 0;
TRY {
res = (gras_datadesc_type_t)xbt_set_get_by_name(gras_datadesc_set_local,name);
+ found = 1;
} CATCH(e) {
if (e.category != not_found_error)
RETHROW;
xbt_ex_free(e);
- res = NULL;
}
+ if (!found)
+ THROW1(not_found_error,0,"No registred datatype of that name: %s",name);
+
return res;
}
long int arch;
XBT_IN;
- res = gras_datadesc_by_name(name);
+ res = gras_datadesc_by_name_or_null(name);
if (res) {
xbt_assert1(res->category_code == e_gras_datadesc_type_cat_scalar,
"Redefinition of type %s does not match", name);
for (arch = 0; arch < gras_arch_count; arch ++) {
res->size[arch] = gras_arches[arch].sizeofs[type];
res->alignment[arch] = gras_arches[arch].boundaries[type];
- res->aligned_size[arch] = aligned(res->size[arch], res->alignment[arch]);
+ res->aligned_size[arch] = ddt_aligned(res->size[arch], res->alignment[arch]);
}
res->category_code = e_gras_datadesc_type_cat_scalar;
long int arch;
XBT_IN1("(%s)",name);
- res = gras_datadesc_by_name(name);
+ res = gras_datadesc_by_name_or_null(name);
if (res) {
/* FIXME: Check that field redefinition matches */
xbt_assert1(res->category_code == e_gras_datadesc_type_cat_struct,
int arch;
xbt_assert2(field_type,
- "Cannot add the field '%s' into struct '%s': its type is NULL. Typo in get_by_name?",
+ "Cannot add the field '%s' into struct '%s': its type is NULL",
name,struct_type->name);
XBT_IN3("(%s %s.%s;)",field_type->name,struct_type->name,name);
if (struct_type->category.struct_data.closed) {
for (arch=0; arch<gras_arch_count; arch ++) {
- field->offset[arch] = aligned(struct_type->size[arch],
- field_type->alignment[arch]);
+ field->offset[arch] = ddt_aligned(struct_type->size[arch],
+ field_type->alignment[arch]);
struct_type->size[arch] = field->offset[arch] + field_type->size[arch];
struct_type->alignment[arch] = max(struct_type->alignment[arch],
field_type->alignment[arch]);
- struct_type->aligned_size[arch] = aligned(struct_type->size[arch],
- struct_type->alignment[arch]);
+ struct_type->aligned_size[arch] = ddt_aligned(struct_type->size[arch],
+ struct_type->alignment[arch]);
}
field->type = field_type;
field->send = NULL;
xbt_assert0(selector,
"Attempt to creat an union without field_count function");
- res = gras_datadesc_by_name(name);
+ res = gras_datadesc_by_name_or_null(name);
if (res) {
/* FIXME: Check that field redefinition matches */
xbt_assert1(res->category_code == e_gras_datadesc_type_cat_union,
field_type->size[arch]);
union_type->alignment[arch] = max(union_type->alignment[arch],
field_type->alignment[arch]);
- union_type->aligned_size[arch] = aligned(union_type->size[arch],
- union_type->alignment[arch]);
+ union_type->aligned_size[arch] = ddt_aligned(union_type->size[arch],
+ union_type->alignment[arch]);
}
}
int arch;
XBT_IN1("(%s)",name);
- res = gras_datadesc_by_name(name);
+ res = gras_datadesc_by_name_or_null(name);
if (res) {
xbt_assert1(res->category_code == e_gras_datadesc_type_cat_ref,
"Redefinition of %s does not match",name);
int arch;
XBT_IN1("(%s)",name);
- res = gras_datadesc_by_name(name);
+ res = gras_datadesc_by_name_or_null(name);
if (res) {
xbt_assert1(res->category_code == e_gras_datadesc_type_cat_ref,
int arch;
XBT_IN1("(%s)",name);
- res = gras_datadesc_by_name(name);
+ res = gras_datadesc_by_name_or_null(name);
if (res) {
xbt_assert1(res->category_code == e_gras_datadesc_type_cat_array,
"Redefinition of type %s does not match", name);
"'%s' is a dynamic array without size discriminant",
name);
- res = gras_datadesc_by_name(name);
+ res = gras_datadesc_by_name_or_null(name);
if (res) {
xbt_assert1(res->category_code == e_gras_datadesc_type_cat_array,
"Redefinition of type %s does not match", name);
gras_datadesc_cb_field_push(res, "lines");
gras_datadesc_cb_field_push_multiplier(res, "rows");
- gras_datadesc_cb_recv(res, &gras_datadesc_dynar_cb);
+ gras_datadesc_cb_recv(res, &gras_datadesc_matrix_cb);
memcpy(res->extra,&free_f,sizeof(free_f));
/* build a ref to it */
return field;
}
}
- ERROR2("No field nammed %s in %s",field_name,type->name);
+ ERROR2("No field named '%s' in '%s'",field_name,type->name);
xbt_abort();
}