+/**
+ * @file entity.h
+ *
+ * Entities represent all program known objects.
+ *
+ * @author Martin Trapp, Christian Schaefer
+ * @author Goetz Lindenmaier
+ *
+ * An entity is the representation of program known objects in Firm.
+ * The primary concept of entities is to represent members of complex
+ * types, i.e., fields and methods of classes. As not all programming
+ * language model all variables and methods as members of some class,
+ * the concept of entities is extended to cover also local and global
+ * variables, and arbitrary procedures.
+ *
+ * An entity always specifies the type of the object it represents and
+ * the type of the object it is a part of, the owner of the entity.
+ * Originally this is the type of the class of which the entity is a
+ * member.
+ * The owner of local variables is the procedure they are defined in.
+ * The owner of global variables and procedures visible in the whole
+ * program is a universally defined class type "GlobalType". The owner
+ * of procedures defined in the scope of an other procedure is the
+ * enclosing procedure.
+ *
+ * In detail the datastructure entity has the following fields:
+ *
+ * - ident *name: Name of this entity as specified in the source code.
+ * Only unequivocal in conjuction with scope.
+ * - ident *ld_name: Unique name of this entity, i.e., the mangled
+ * name. E.g., for a class `A' with field `a' this
+ * is the ident for `A_a'.
+ * - ir_type *type: The type of this entity, e.g., a method type, a
+ * basic type of the language or a class itself.
+ * - ir_type *owner: The class this entity belongs to. In case of local
+ * variables the method they are defined in.
+ * - int offset: Offset in bits for this entity. Fixed when layout
+ * of owner is determined.
+ * - ir_graph *irg: If (type == method_type) this is the corresponding irg.
+ * The ir_graph constructor automatically sets this field.
+ * If (type != method_type) access of this field will cause
+ * an assertion.
+ * - unsigned irg_add_properties:
+ * If (type == method_type) this mirrors the additional flags
+ * of the corresponding irg if set or is an own set for
+ * this entity. This construction allows to specify these
+ * flags even if no graph is available.
+ * If (type != method_type) access of this field will cause
+ * an assertion.
+ */
+#ifndef _ENTITY_H_
+#define _ENTITY_H_