static void gfs_refine_read (GtsObject ** o, GtsFile * fp) { GfsRefine * refine = GFS_REFINE (*o); GtsObjectClass * klass; gboolean class_changed = FALSE; if (fp->type != GTS_STRING) { gts_file_error (fp, "expecting a string (GfsRefineClass)"); return; } klass = gfs_object_class_from_name (fp->token->str); if (klass == NULL) { gts_file_error (fp, "unknown class `%s'", fp->token->str); return; } if (!gts_object_class_is_from_class (klass, gfs_refine_class ())) { gts_file_error (fp, "`%s' is not a GfsRefine", fp->token->str); return; } if (klass != (*o)->klass) { *o = gts_object_new (klass); gts_object_destroy (GTS_OBJECT (refine)); refine = GFS_REFINE (*o); class_changed = TRUE; } gts_file_next_token (fp); gfs_function_read (refine->maxlevel, gfs_object_simulation (refine), fp); if (fp->type == GTS_ERROR) return; if (class_changed && fp->type != '\n' && klass->read) (* klass->read) (o, fp); }
/** * gts_object_class_check_cast: * @klass: a #GtsObjectClass. * @from: a #GtsObjectClass. * * Returns: @klass while emitting warnings if @klass is not derived from * @from. */ gpointer gts_object_class_check_cast (gpointer klass, gpointer from) { if (!klass) { g_warning ("invalid cast from (NULL) pointer to `%s'", GTS_OBJECT_CLASS (from)->info.name); return klass; } if (!gts_object_class_is_from_class (klass, from)) { g_warning ("invalid cast from `%s' to `%s'", GTS_OBJECT_CLASS (klass)->info.name, GTS_OBJECT_CLASS (from)->info.name); return klass; } return klass; }