Skip to content

Reworks system and devices#9

Open
JomerDev wants to merge 7 commits intotransistorfet:mainfrom
JomerDev:system-rework
Open

Reworks system and devices#9
JomerDev wants to merge 7 commits intotransistorfet:mainfrom
JomerDev:system-rework

Conversation

@JomerDev
Copy link

This PR reworks system so wrapping every device in Device is no longer needed.
Device is now a type of Rc<RefCell<dyn DynDevice>> where DynDevice is trait DynDevice: Any + 'static + Transmutable.
That way the Transmutable methods can be called on the new Device type, making it work very similarly to the old one.
It also allows access to any device added to a system by calling get_device or get_device_by_name on the system, with the type of the device as a generic. The generic is checked against the type id of the dyn DynDevice and will error out if they don't match, a cast to a different device by accident is not possible. This system is used in the deno projects core for a resource table whic is used extensively.
DynDevice is implemented for every type that implements Transmutable + 'static, so devices do not have to implement it manually.
Adding a new device to the system now returns a DeviceId which can be used to get access to the device again. If the id is unknown, devices can also be found through their set name (if they have one).

The event queue and debuggables list now both hold device ids instead of the device directly.
There is now a DeviceSettings struct which can be used when adding a device to a system. Methods like add_addressable_device, add_interruptable_device, add_peripheral still exists but use DeviceSettings internaly

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant