Data ModelAs you open an existing project, or add data sources to your project, the data is automatically loaded into Imagix 4D's underlying database. Overall, an enormous amount of data about your software is maintained in this database. You might think of the Imagix 4D user interface as a set of mechanisms to filter through the data and present just the information you're currently interested in, in a way that is easily and quickly understandable.
The underlying database uses an object-oriented entity / relationship / attribute data model. We chose this as the most natural way both to handle and to present the data Imagix 4D has about your software -- the symbols (entities) in your code, their dependencies to other symbols (relationships), and specific information about any of the symbols (attributes).
The database recognizes a wide range of symbol types. For example, software components ranging from primitive data types, such as int, all the way up to files and directories, are treated as symbols.
Associated with each of these symbols is a set of relationships to other symbols. For example, a particular structure declaration might have associated with it information about which files contain its definition and declarations, what variables it contains as members, what global and static structure variables are defined based on it, and what functions use it in defining a local structure variable.
For each symbol in the database, Imagix 4D collects a number of attributes as well. These attributes describe various characteristics of the symbol, such as the scope of a variable or the number of lines in a function. The attributes collected by Imagix 4D are specific to the type of symbol they describe. For example, files have attributes such as file permissions and modification dates. In contrast, the attributes of a function include its scope and cyclomatic complexity.