## Relevant classes ``` PhaseDependenciesTracker ├── ConfigurationFactory │   └── ConfigurationBase │   ├── DBPhaseEntryBase │   └── DRAMTimeDependenciesBase │   ├── DependencyMap │   │   └── PhaseTimeDependencies │   └── PoolControllerMap └── DBDependencyEntry ``` #### PhaseDependenciesTracker Responsible for the whole execution. Instantiates a configuration class through the ConfigurationFactory, loads the selected phases into memory, calculates the time dependencies between phases and saves into the database file. #### ConfigurationFactory Creates a configuration object given its name. #### ConfigurationBase Interface and common functionality of configuration classes. These include creating DBPhaseEntryBase objects from the database for the given device and delegate methods. #### DBPhaseEntryBase Interfaces to device specific phase entries. Specificities include object data, construction and dependency logic. #### DRAMTimeDependenciesBase Interfaces to device's time dependencies descriptor class. #### DependencyMap A STL map using auxiliar objects. Maps phases to their PhaseTimeDependencies. #### PhaseTimeDependencies An auxiliar class with initializer list constructor. Contains a vector of TimeDependency objects and its maximum time value. #### PoolControllerMap Maps pool names to PoolController objects. Pools keep track of all potential dependencies of a given phase. #### DBDependencyEntry Contains the data to be written to the database. ## Suggested steps for creating a device: 1. Create a time dependencies class inheriting from the DRAMTimeDependenciesBase object. 2. Create the phase entry object inheriting from DBPhaseEntryBase. The object must determine the relevant data to be used and how phases may be correlated. 3. Create a configuration class for your object inheriting from ConfigurationBase. This will contain the dependencies maps and instantiate the specialized DBPhaseEntryBase object. 4. Add the newly created device to the functions of the ConfigurationFactory class. The device name is taken from the database. #### Example For instance, we have the necessary objects for calculating DDR3 device dependencies implemented in the following files: 1. deviceDependencies/specialized/TimeDependenciesInfoDDR3.(h/cpp) 2. dbEntries/specialized/DDR3dbphaseentry.(h/cpp) 3. configurations/specialized/DDR3Configuration.(h/cpp)