X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Ftr%2Ftype_identify.h;h=dc1baaca306f1addc5a8659556495db3846b033a;hb=86f99a523c52d0bee752bb015137811bf8e750ca;hp=90333d746fbc325d68ceeafbf0b726160c5138d5;hpb=82e0b4669b314233aa9d3d22cf137dd191383e65;p=libfirm diff --git a/ir/tr/type_identify.h b/ir/tr/type_identify.h index 90333d746..dc1baaca3 100644 --- a/ir/tr/type_identify.h +++ b/ir/tr/type_identify.h @@ -1,5 +1,4 @@ /** - * * @file type.h * * Project: libFIRM
@@ -18,10 +17,7 @@ # ifndef _TYPE_IDENTIFY_H_ # define _TYPE_IDENTIFY_H_ -#ifndef _TYPE_TYPEDEF_ -#define _TYPE_TYPEDEF_ -typedef struct type type; -#endif +#include "firm_types.h" /* ------------------------------------------------------------------------ */ @@ -30,7 +26,7 @@ typedef struct type type; * @param tp1 The first type to compare. * @param tp2 The second type to compare. */ -typedef int (*compare_types_func_tp) (const void *tp1, const void *tp2); +typedef int (compare_types_func_t)(const void *tp1, const void *tp2); /** Compares two types by their name. * @@ -45,41 +41,19 @@ int compare_names (const void *tp1, const void *tp2); */ int compare_strict (const void *tp1, const void *tp2); -/** A variable that holds a compare function for types. - * - * The compare function is used to identify equal types. The - * variable is initialized with the function compare_strict(). - * - * The variable must be set before calling init_firm()! Later changes - * have no effect. - */ -extern compare_types_func_tp compare_types_func; - - /* ------------------------------------------------------------------------ */ /** Type for a function that computes a hash value for a type. * * @param tp The type to compute a hash for. */ -typedef int (*hash_types_func_tp)(type *tp); +typedef int (hash_types_func_t)(type *tp); /** Computes a hash value by the type name. * * Uses the name of the type and the type opcode to compute the hash. */ -int hash_name (type *tp); - -/** A variable that holds a hash function for a type. - * - * The hash function is used to identify equal types. The - * variable is initialized with the function hash_name(). - * - * The variable must be set before calling init_firm()! Later changes - * have no effect. - */ -extern hash_types_func_tp hash_types_func; - +int firm_hash_name (type *tp); /* ------------------------------------------------------------------------ */ @@ -135,8 +109,23 @@ type * mature_type_free(type *tp); type * mature_type_free_entities(type *tp); /** - * initialise the type identifier module. + * The interface type for the type identify module; + */ +typedef struct _type_identify_if_t { + compare_types_func_t *cmp; /**< The function that should be used to compare two types. + If NULL, compare_strict() will be used. */ + hash_types_func_t *hash; /**< The function that should be used to calculate a hash + value of a type. If NULL, hash_name() will be used. */ +} type_identify_if_t; + +/** + * Initialise the type identifier module. + * + * @param ti_if The interface functions for this module. + * + * If the parameter ti_if is NULL, the default functions compare_strict() and + * firm_hash_name() will be used. */ -void init_type_identify(void); +void init_type_identify(type_identify_if_t *ti_if); # endif /* _TYPE_IDENTIFY_H_ */