struct InputMapping { auto poll() -> int16; string path; //configuration file key path string name; //input name (human readable) uint type = 0; string assignment = "None"; }; struct InputDevice { uint id; string name; vector mappings; }; struct InputPort { uint id; string name; vector devices; }; struct InputManager { InputManager(); auto poll() -> void; auto onChange(shared_pointer device, uint group, uint input, int16_t oldValue, int16_t newValue) -> void; auto mapping(uint port, uint device, uint input) -> maybe; private: vector> devices; vector ports; uint64 lastPoll; //time in milliseconds since last call to poll() uint64 frequency; //minimum time in milliseconds before poll() can be called again }; extern unique_pointer inputManager;