+#ifndef FIRM_TR_TPOP_T_H
+#define FIRM_TR_TPOP_T_H
+
+#include <stdlib.h>
+
+#include "firm_types.h"
+#include "typerep.h"
+#include "irmode.h"
+
+/** A function called to free attributes of a type. */
+typedef void (*free_attrs_func)(ir_type *tp);
+
+/** A function called to free owned entities of a type. */
+typedef void (*free_entities_func)(ir_type *tp);
+
+/** A function called to free all automatic allocated entities of a type. */
+typedef void (*free_auto_entities_func)(ir_type *tp);
+
+/** A function called to set the mode of a type. */
+typedef void (*set_type_mode_func)(ir_type *tp, ir_mode *m);
+
+/** A function called to set the size of a type in bytes. */
+typedef void (*set_type_size_func)(ir_type *tp, unsigned size);
+
+/** A function called to get the number of compound members */
+typedef int (*get_n_members_func)(const ir_type *tp);
+
+/** A function called to get the pos'th compound member */
+typedef ir_entity *(*get_member_func)(const ir_type *tp, int pos);
+
+typedef int (*get_member_index_func)(const ir_type *tp, ir_entity *member);
+
+/** A function called to insert an entity into the type */
+typedef void (*insert_entity_func)(ir_type *tp, ir_entity *member);
+
+/**
+ * tp_op operations.
+ */
+typedef struct _tp_op_ops {
+ free_attrs_func free_attrs; /**< Called to free the attributes of a type. */
+ free_entities_func free_entities; /**< Called to free the owned entities of a type. */
+ free_auto_entities_func free_auto_entities; /**< Called to free the automatic allocated entities of a type. */
+ set_type_mode_func set_type_mode; /**< Called to set a ir_mode of a type. */
+ set_type_size_func set_type_size; /**< Called to set the byte size of a type. */
+ get_n_members_func get_n_members; /**< Called to return the number of compound members. */
+ get_member_func get_member; /**< Called to get the pos'th compound member. */
+ get_member_index_func get_member_index; /**< Called to get the index of a compound member. */
+} tp_op_ops;