User:Bugman/subsystems: Difference between revisions
Jump to navigation
Jump to search
(→All subsystems: Converted to the XML output.) |
(→Script: Update of the script to include XML output.) |
||
Line 30: | Line 30: | ||
def __init__(self): | def __init__(self): | ||
"""Find all subsystems and subsystem groups.""" | """Find all subsystems and subsystem groups.""" | ||
# Command line options. | |||
self.xml = False | |||
if len(sys.argv) == 2 and sys.argv[1] == "--xml": | |||
self.xml = True | |||
# SGSubsystem storage lists. | # SGSubsystem storage lists. | ||
Line 36: | Line 41: | ||
# The base objects. | # The base objects. | ||
subsystem_base = Subsystem("SGSubsystem") | subsystem_base = Subsystem("SGSubsystem", xml=self.xml) | ||
group_base = Subsystem("SGSubsystemGroup", base_class=Subsystem("SGSubsystem")) | group_base = Subsystem("SGSubsystemGroup", base_class=Subsystem("SGSubsystem"), xml=self.xml) | ||
# Add some problematic non-parsable classes. | # Add some problematic non-parsable classes. | ||
self.subsystems[1].append(Subsystem("FGAISim", base_class=Subsystem("FGInterface", base_class=Subsystem("SGSubsystem")), file_name="src/FDM/SP/AISim.hpp")) | self.subsystems[1].append(Subsystem("FGAISim", base_class=Subsystem("FGInterface", base_class=Subsystem("SGSubsystem")), file_name="src/FDM/SP/AISim.hpp", xml=self.xml)) | ||
# XML start. | |||
if self.xml: | |||
print("<subsystems>") | |||
# Find all SGSubsystem and SGSubsystemGroup derived classes. | # Find all SGSubsystem and SGSubsystemGroup derived classes. | ||
Line 59: | Line 68: | ||
# Final summary. | # Final summary. | ||
print("\nTotal: %i subsystem classes." % len(self.subsystems[0] + self.subsystems[1] + self.subsystems[2] + self.subsystems[3])) | if self.xml: | ||
print("<total subsystem_classes=\"%i\" subsystem_groups=\"%i\"/>" % (len(self.subsystems[0] + self.subsystems[1] + self.subsystems[2] + self.subsystems[3]), len(self.groups[0] + self.groups[1] + self.groups[2] + self.groups[3]))) | |||
else: | |||
print("\nTotal: %i subsystem classes." % len(self.subsystems[0] + self.subsystems[1] + self.subsystems[2] + self.subsystems[3])) | |||
print("Total: %i subsystem groups." % len(self.groups[0] + self.groups[1] + self.groups[2] + self.groups[3])) | |||
# XML end. | |||
if self.xml: | |||
print("</subsystems>") | |||
Line 108: | Line 124: | ||
if class_name in skip: | if class_name in skip: | ||
continue | continue | ||
primary.append(Subsystem(class_name, base_class=base, file_name=file_name)) | primary.append(Subsystem(class_name, base_class=base, file_name=file_name, xml=self.xml)) | ||
# Sort the subsystems by name. | # Sort the subsystems by name. | ||
Line 116: | Line 132: | ||
if printout: | if printout: | ||
counts = self.count(primary) | counts = self.count(primary) | ||
print("\nPrimary %s (%i subsystems, %i groups):" % (text, counts[0], counts[1])) | if self.xml: | ||
print(" <primary_%s subsystems=\"%i\" groups=\"%i\">" % (text, counts[0], counts[1])) | |||
else: | |||
print("\nPrimary %s (%i subsystems, %i groups):" % (text, counts[0], counts[1])) | |||
for subsystem in primary: | for subsystem in primary: | ||
print(" %s" % subsystem) | print(" %s" % subsystem) | ||
if self.xml: | |||
print(" </primary_%s>" % text) | |||
Line 139: | Line 160: | ||
for subsystem in primary: | for subsystem in primary: | ||
for file_name, derived_class in self.grep(path=path, base_name=subsystem.name): | for file_name, derived_class in self.grep(path=path, base_name=subsystem.name): | ||
secondary.append(Subsystem(derived_class, base_class=subsystem, file_name=file_name)) | secondary.append(Subsystem(derived_class, base_class=subsystem, file_name=file_name, xml=self.xml)) | ||
# Sort the subsystems by name. | # Sort the subsystems by name. | ||
Line 147: | Line 168: | ||
if printout and secondary: | if printout and secondary: | ||
counts = self.count(secondary) | counts = self.count(secondary) | ||
print("\nSecondary %s (%i subsystems, %i groups):" % (text, counts[0], counts[1])) | if self.xml: | ||
print(" <secondary_%s subsystems=\"%i\" groups=\"%i\">" % (text, counts[0], counts[1])) | |||
else: | |||
print("\nSecondary %s (%i subsystems, %i groups):" % (text, counts[0], counts[1])) | |||
for subsystem in secondary: | for subsystem in secondary: | ||
print(" %s" % subsystem) | print(" %s" % subsystem) | ||
if self.xml: | |||
print(" </secondary_%s>" % text) | |||
Line 170: | Line 196: | ||
for subsystem in secondary: | for subsystem in secondary: | ||
for file_name, derived_class in self.grep(path=path, base_name=subsystem.name): | for file_name, derived_class in self.grep(path=path, base_name=subsystem.name): | ||
tertiary.append(Subsystem(derived_class, base_class=subsystem, file_name=file_name)) | tertiary.append(Subsystem(derived_class, base_class=subsystem, file_name=file_name, xml=self.xml)) | ||
# Sort all subsystems by name. | # Sort all subsystems by name. | ||
Line 178: | Line 204: | ||
if printout and tertiary: | if printout and tertiary: | ||
counts = self.count(tertiary) | counts = self.count(tertiary) | ||
print("\nTertiary %s (%i subsystems, %i groups):" % (text, counts[0], counts[1])) | if self.xml: | ||
print(" <tertiary_%s subsystems=\"%i\" groups=\"%i\">" % (text, counts[0], counts[1])) | |||
else: | |||
print("\nTertiary %s (%i subsystems, %i groups):" % (text, counts[0], counts[1])) | |||
for subsystem in tertiary: | for subsystem in tertiary: | ||
print(" %s" % subsystem) | print(" %s" % subsystem) | ||
if self.xml: | |||
print(" </tertiary_%s>" % text) | |||
Line 201: | Line 232: | ||
for subsystem in tertiary: | for subsystem in tertiary: | ||
for file_name, derived_class in self.grep(path=path, base_name=subsystem.name): | for file_name, derived_class in self.grep(path=path, base_name=subsystem.name): | ||
quaternary.append(Subsystem(derived_class, base_class=subsystem, file_name=file_name)) | quaternary.append(Subsystem(derived_class, base_class=subsystem, file_name=file_name, xml=self.xml)) | ||
# Sort all subsystems by name. | # Sort all subsystems by name. | ||
Line 209: | Line 240: | ||
if printout and quaternary: | if printout and quaternary: | ||
counts = self.count(quaternary) | counts = self.count(quaternary) | ||
print("\nQuaternary %s (%i subsystems, %i groups):" % (text, counts[0], counts[1])) | if self.xml: | ||
print(" <quaternary_%s subsystems=\"%i\" groups=\"%i\">" % (text, counts[0], counts[1])) | |||
else: | |||
print("\nQuaternary %s (%i subsystems, %i groups):" % (text, counts[0], counts[1])) | |||
for subsystem in quaternary: | for subsystem in quaternary: | ||
print(" %s" % subsystem) | print(" %s" % subsystem) | ||
if self.xml: | |||
print(" </quaternary_%s>" % text) | |||
Line 226: | Line 262: | ||
# The Unix grep command to run. | # The Unix grep command to run. | ||
cmd = 'cd %s; grep -rI "public \<%s\>" | cmd = 'cd %s; grep -rI "public \<%s\>" | grep -v "%s::"' % (path, base_name, base_name) | ||
pipe = Popen(cmd, shell=True, stdout=PIPE) | pipe = Popen(cmd, shell=True, stdout=PIPE) | ||
Line 260: | Line 296: | ||
"""Object for storing the information for a specific subsystem.""" | """Object for storing the information for a specific subsystem.""" | ||
def __init__(self, name, base_class=None, file_name=None): | def __init__(self, name, base_class=None, file_name=None, xml=False): | ||
"""Set up the object. | """Set up the object. | ||
Line 269: | Line 305: | ||
@keyword file_name: The name of the file containing the subsystem declaration. | @keyword file_name: The name of the file containing the subsystem declaration. | ||
@type file_name: str | @type file_name: str | ||
@keyword xml: Produce a valid XML representation of the object. | |||
@type xml: bool | |||
""" | """ | ||
Line 275: | Line 313: | ||
self.base_class = base_class | self.base_class = base_class | ||
self.file_name = file_name | self.file_name = file_name | ||
self.xml = xml | |||
Line 289: | Line 328: | ||
# The inheritance chain. | # The inheritance chain. | ||
if self.base_class: | if self.base_class: | ||
string += " : %s" % self.base_class.name | if self.xml: | ||
string += " from=\"" | |||
else: | |||
string += " : " | |||
string += "%s" % self.base_class.name | |||
if self.base_class.base_class: | if self.base_class.base_class: | ||
string += " : %s" % self.base_class.base_class.name | string += " : %s" % self.base_class.base_class.name | ||
Line 298: | Line 341: | ||
if self.base_class.base_class.base_class.base_class.base_class: | if self.base_class.base_class.base_class.base_class.base_class: | ||
string += " : %s" % self.base_class.base_class.base_class.base_class.base_class.name | string += " : %s" % self.base_class.base_class.base_class.base_class.base_class.name | ||
if self.xml: | |||
string += "\"" | |||
# Add the source file name. | # Add the source file name. | ||
string += " in %s" % | if self.xml: | ||
string += " in=" | |||
else: | |||
string += " in " | |||
string += "\"%s\"" % self.file_name | |||
# Closure. | # Closure. | ||
if self.xml: | |||
string += "/" | |||
string += ">" | string += ">" | ||
Revision as of 12:29, 18 April 2018
Tracking down subsystems
Script
The following script is for finding all FlightGear dependencies:
Python script: Python script for finding all subsystems within the flightgear and simgear C++ code bases.
All subsystems
The result is:
XML output: A listing of all flightgear and simgear subsystems and subsystem groups.
XML output from the Python script for finding all subsystems within the flightgear and simgear C++ code bases. The error output from the script was redirected and hence not shown below.
<subsystems>
<primary_classes subsystems="91" groups="0">
<ADF from="SGSubsystem" in="src/Instrumentation/adf.hxx"/>
<AirportDynamicsManager from="SGSubsystem" in="src/Airports/airportdynamicsmanager.hxx"/>
<AirspeedIndicator from="SGSubsystem" in="src/Instrumentation/airspeed_indicator.hxx"/>
<Altimeter from="SGSubsystem" in="src/Instrumentation/altimeter.hxx"/>
<AreaSampler from="SGSubsystem" in="src/Environment/terrainsampler.cxx"/>
<AttitudeIndicator from="SGSubsystem" in="src/Instrumentation/attitude_indicator.hxx"/>
<Clock from="SGSubsystem" in="src/Instrumentation/clock.hxx"/>
<CommRadio from="SGSubsystem" in="src/Instrumentation/commradio.hxx"/>
<Component from="SGSubsystem" in="src/Autopilot/component.hxx"/>
<DCLGPS from="SGSubsystem" in="src/Instrumentation/dclgps.hxx"/>
<DME from="SGSubsystem" in="src/Instrumentation/dme.hxx"/>
<Ephemeris from="SGSubsystem" in="src/Environment/ephemeris.hxx"/>
<FDMShell from="SGSubsystem" in="src/FDM/fdm_shell.hxx"/>
<FGAIManager from="SGSubsystem" in="src/AIModel/AIManager.hxx"/>
<FGATCManager from="SGSubsystem" in="src/ATC/atc_mgr.hxx"/>
<FGAircraftModel from="SGSubsystem" in="src/Model/acmodel.hxx"/>
<FGCom from="SGSubsystem" in="src/Network/fgcom.hxx"/>
<FGControls from="SGSubsystem" in="src/Aircraft/controls.hxx"/>
<FGDNSClient from="SGSubsystem" in="src/Network/DNSClient.hxx"/>
<FGElectricalSystem from="SGSubsystem" in="src/Systems/electrical.hxx"/>
<FGEventInput from="SGSubsystem" in="src/Input/FGEventInput.hxx"/>
<FGFX from="SGSubsystem" in="docs-mini/README.introduction"/>
<FGFlightHistory from="SGSubsystem" in="src/Aircraft/FlightHistory.hxx"/>
<FGHTTPClient from="SGSubsystem" in="src/Network/HTTPClient.hxx"/>
<FGHttpd from="SGSubsystem" in="src/Network/http/httpd.hxx"/>
<FGIO from="SGSubsystem" in="src/Main/fg_io.hxx"/>
<FGInterface from="SGSubsystem" in="src/FDM/flight.hxx"/>
<FGJoystickInput from="SGSubsystem" in="src/Input/FGJoystickInput.hxx"/>
<FGKR_87 from="SGSubsystem" in="src/Instrumentation/kr_87.hxx"/>
<FGKeyboardInput from="SGSubsystem" in="src/Input/FGKeyboardInput.hxx"/>
<FGLight from="SGSubsystem" in="src/Time/light.hxx"/>
<FGLogger from="SGSubsystem" in="src/Main/logger.hxx"/>
<FGMagVarManager from="SGSubsystem" in="src/Environment/magvarmanager.hxx"/>
<FGMarkerBeacon from="SGSubsystem" in="src/Instrumentation/marker_beacon.hxx"/>
<FGModelMgr from="SGSubsystem" in="src/Model/modelmgr.hxx"/>
<FGMouseInput from="SGSubsystem" in="src/Input/FGMouseInput.hxx"/>
<FGMultiplayMgr from="SGSubsystem" in="src/MultiPlayer/multiplaymgr.hxx"/>
<FGNasalSys from="SGSubsystem" in="src/Scripting/NasalSys.hxx"/>
<FGNavRadio from="SGSubsystem" in="src/Instrumentation/navradio.hxx"/>
<FGPanel from="SGSubsystem" in="utils/fgpanel/FGPanel.hxx"/>
<FGPanelProtocol from="SGSubsystem" in="utils/fgpanel/FGPanelProtocol.hxx"/>
<FGPrecipitationMgr from="SGSubsystem" in="src/Environment/precipitation_mgr.hxx"/>
<FGProperties from="SGSubsystem" in="src/Main/fg_props.hxx"/>
<FGReplay from="SGSubsystem" in="src/Aircraft/replay.hxx"/>
<FGRidgeLift from="SGSubsystem" in="src/Environment/ridge_lift.hxx"/>
<FGRouteMgr from="SGSubsystem" in="src/Autopilot/route_mgr.hxx"/>
<FGScenery from="SGSubsystem" in="src/Scenery/scenery.hxx"/>
<FGSoundManager from="SGSubsystem" in="src/Sound/soundmanager.hxx"/>
<FGSubmodelMgr from="SGSubsystem" in="src/AIModel/submodel.hxx"/>
<FGTrafficManager from="SGSubsystem" in="src/Traffic/TrafficMgr.hxx"/>
<FGViewMgr from="SGSubsystem" in="src/Viewer/viewmgr.hxx"/>
<FGVoiceMgr from="SGSubsystem" in="src/Sound/voice.hxx"/>
<GPS from="SGSubsystem" in="src/Instrumentation/gps.hxx"/>
<GSDI from="SGSubsystem" in="src/Instrumentation/gsdi.hxx"/>
<GUIMgr from="SGSubsystem" in="src/Canvas/gui_mgr.hxx"/>
<GroundRadar from="SGSubsystem" in="src/Cockpit/groundradar.hxx"/>
<HUD from="SGSubsystem" in="src/Instrumentation/HUD/HUD.hxx"/>
<HeadingIndicator from="SGSubsystem" in="src/Instrumentation/heading_indicator.hxx"/>
<HeadingIndicatorDG from="SGSubsystem" in="src/Instrumentation/heading_indicator_dg.hxx"/>
<HeadingIndicatorFG from="SGSubsystem" in="src/Instrumentation/heading_indicator_fg.hxx"/>
<InstVerticalSpeedIndicator from="SGSubsystem" in="src/Instrumentation/inst_vertical_speed_indicator.hxx"/>
<LayerInterpolateController from="SGSubsystem" in="src/Environment/environment_ctrl.hxx"/>
<MK_VIII from="SGSubsystem" in="src/Instrumentation/mk_viii.hxx"/>
<MagCompass from="SGSubsystem" in="src/Instrumentation/mag_compass.hxx"/>
<MasterReferenceGyro from="SGSubsystem" in="src/Instrumentation/mrg.hxx"/>
<NavDisplay from="SGSubsystem" in="src/Cockpit/NavDisplay.hxx"/>
<NavRadio from="SGSubsystem" in="src/Instrumentation/newnavradio.hxx"/>
<NewGUI from="SGSubsystem" in="src/GUI/new_gui.hxx"/>
<PerformanceDB from="SGSubsystem" in="src/AIModel/performancedb.hxx"/>
<PitotSystem from="SGSubsystem" in="src/Systems/pitot.hxx"/>
<PropertyBasedMgr from="SGSubsystem" in="simgear/props/PropertyBasedMgr.hxx"/>
<PropertyInterpolationMgr from="SGSubsystem" in="simgear/props/PropertyInterpolationMgr.hxx"/>
<RadarAltimeter from="SGSubsystem" in="src/Instrumentation/rad_alt.hxx"/>
<RealWxController from="SGSubsystem" in="src/Environment/realwx_ctrl.hxx"/>
<SGEventMgr from="SGSubsystem" in="simgear/structure/event_mgr.hxx"/>
<SGInterpolator from="SGSubsystem" in="simgear/misc/interpolator.hxx"/>
<SGPerformanceMonitor from="SGSubsystem" in="simgear/structure/SGPerfMon.hxx"/>
<SGSoundMgr from="SGSubsystem" in="simgear/sound/soundmgr.hxx"/>
<SGSubsystemMgr from="SGSubsystem" in="simgear/structure/subsystem_mgr.hxx"/>
<SGTerraSync from="SGSubsystem" in="simgear/scene/tsync/terrasync.hxx"/>
<SlipSkidBall from="SGSubsystem" in="src/Instrumentation/slip_skid_ball.hxx"/>
<StaticSystem from="SGSubsystem" in="src/Systems/static.hxx"/>
<TACAN from="SGSubsystem" in="src/Instrumentation/tacan.hxx"/>
<TCAS from="SGSubsystem" in="src/Instrumentation/tcas.hxx"/>
<TimeManager from="SGSubsystem" in="src/Time/TimeManager.hxx"/>
<Transponder from="SGSubsystem" in="src/Instrumentation/transponder.hxx"/>
<TurnIndicator from="SGSubsystem" in="src/Instrumentation/turn_indicator.hxx"/>
<VacuumSystem from="SGSubsystem" in="src/Systems/vacuum.hxx"/>
<VerticalSpeedIndicator from="SGSubsystem" in="src/Instrumentation/vertical_speed_indicator.hxx"/>
<View from="SGSubsystem" in="src/Viewer/view.hxx"/>
<wxRadarBg from="SGSubsystem" in="src/Cockpit/wxradar.hxx"/>
</primary_classes>
<primary_groups subsystems="0" groups="8">
<Autopilot from="SGSubsystemGroup : SGSubsystem" in="src/Autopilot/autopilot.hxx"/>
<CockpitDisplayManager from="SGSubsystemGroup : SGSubsystem" in="src/Cockpit/cockpitDisplayManager.hxx"/>
<FGEnvironmentMgr from="SGSubsystemGroup : SGSubsystem" in="src/Environment/environment_mgr.hxx"/>
<FGInput from="SGSubsystemGroup : SGSubsystem" in="src/Input/input.hxx"/>
<FGInstrumentMgr from="SGSubsystemGroup : SGSubsystem" in="src/Instrumentation/instrument_mgr.hxx"/>
<FGSystemMgr from="SGSubsystemGroup : SGSubsystem" in="src/Systems/system_mgr.hxx"/>
<FGXMLAutopilotGroup from="SGSubsystemGroup : SGSubsystem" in="src/Autopilot/autopilotgroup.hxx"/>
<TerrainSampler from="SGSubsystemGroup : SGSubsystem" in="src/Environment/terrainsampler.hxx"/>
</primary_groups>
<secondary_classes subsystems="28" groups="0">
<AnalogComponent from="Component : SGSubsystem" in="src/Autopilot/analogcomponent.hxx"/>
<BasicRealWxController from="RealWxController : SGSubsystem" in="src/Environment/realwx_ctrl.cxx"/>
<CanvasMgr from="PropertyBasedMgr : SGSubsystem" in="simgear/canvas/CanvasMgr.hxx"/>
<CommRadioImpl from="CommRadio : SGSubsystem" in="src/Instrumentation/commradio.cxx"/>
<DigitalComponent from="Component : SGSubsystem" in="src/Autopilot/digitalcomponent.hxx"/>
<FGACMS from="FGInterface : SGSubsystem" in="src/FDM/SP/ACMS.hxx"/>
<FGADA from="FGInterface : SGSubsystem" in="src/FDM/SP/ADA.hxx"/>
<FGAISim from="FGInterface : SGSubsystem" in="src/FDM/SP/AISim.hpp"/>
<FGBalloonSim from="FGInterface : SGSubsystem" in="src/FDM/SP/Balloon.h"/>
<FGExternalNet from="FGInterface : SGSubsystem" in="src/FDM/ExternalNet/ExternalNet.hxx"/>
<FGExternalPipe from="FGInterface : SGSubsystem" in="src/FDM/ExternalPipe/ExternalPipe.hxx"/>
<FGHIDEventInput from="FGEventInput : SGSubsystem" in="src/Input/FGHIDEventInput.hxx"/>
<FGJSBsim from="FGInterface : SGSubsystem" in="src/FDM/JSBSim/JSBSim.hxx"/>
<FGLaRCsim from="FGInterface : SGSubsystem" in="src/FDM/LaRCsim/LaRCsim.hxx"/>
<FGLinuxEventInput from="FGEventInput : SGSubsystem" in="src/Input/FGLinuxEventInput.hxx"/>
<FGMacOSXEventInput from="FGEventInput : SGSubsystem" in="src/Input/FGMacOSXEventInput.hxx"/>
<FGMagicCarpet from="FGInterface : SGSubsystem" in="src/FDM/SP/MagicCarpet.hxx"/>
<FGNullFDM from="FGInterface : SGSubsystem" in="src/FDM/NullFDM.hxx"/>
<FGReadablePanel from="FGPanel : SGSubsystem" in="utils/fgpanel/panel_io.hxx"/>
<FGSoundManager from="SGSoundMgr : SGSubsystem" in="src/Sound/soundmanager.hxx"/>
<FGUFO from="FGInterface : SGSubsystem" in="src/FDM/UFO.hxx"/>
<KLN89 from="DCLGPS : SGSubsystem" in="src/Instrumentation/KLN89/kln89.hxx"/>
<LayerInterpolateControllerImplementation from="LayerInterpolateController : SGSubsystem" in="src/Environment/environment_ctrl.cxx"/>
<MongooseHttpd from="FGHttpd : SGSubsystem" in="src/Network/http/httpd.cxx"/>
<NavRadioImpl from="NavRadio : SGSubsystem" in="src/Instrumentation/newnavradio.cxx"/>
<StateMachineComponent from="Component : SGSubsystem" in="src/Autopilot/autopilot.cxx"/>
<YASim from="FGInterface : SGSubsystem" in="src/FDM/YASim/YASim.hxx"/>
<agRadar from="wxRadarBg : SGSubsystem" in="src/Cockpit/agradar.hxx"/>
</secondary_classes>
<secondary_groups subsystems="0" groups="2">
<FGXMLAutopilotGroupImplementation from="FGXMLAutopilotGroup : SGSubsystemGroup : SGSubsystem" in="src/Autopilot/autopilotgroup.cxx"/>
<TerrainSamplerImplementation from="TerrainSampler : SGSubsystemGroup : SGSubsystem" in="src/Environment/terrainsampler.cxx"/>
</secondary_groups>
<tertiary_classes subsystems="6" groups="0">
<DigitalFilter from="AnalogComponent : Component : SGSubsystem" in="src/Autopilot/digitalfilter.hxx"/>
<Logic from="DigitalComponent : Component : SGSubsystem" in="src/Autopilot/logic.hxx"/>
<NoaaMetarRealWxController from="BasicRealWxController : RealWxController : SGSubsystem" in="src/Environment/realwx_ctrl.cxx"/>
<PIDController from="AnalogComponent : Component : SGSubsystem" in="src/Autopilot/pidcontroller.hxx"/>
<PISimpleController from="AnalogComponent : Component : SGSubsystem" in="src/Autopilot/pisimplecontroller.hxx"/>
<Predictor from="AnalogComponent : Component : SGSubsystem" in="src/Autopilot/predictor.hxx"/>
</tertiary_classes>
<quaternary_classes subsystems="1" groups="0">
<FlipFlop from="Logic : DigitalComponent : Component : SGSubsystem" in="src/Autopilot/flipflop.hxx"/>
</quaternary_classes>
<total subsystem_classes="126" subsystem_groups="10"/>
</subsystems>
Refactoring
To check that all subsystems on a branch have been updated or refactored:
Python script: Python script verifying if all subsystems have been updated.