diff options
author | Robin Gareus <robin@gareus.org> | 2016-04-24 20:45:37 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2016-04-24 20:45:37 +0200 |
commit | 800c8182c6f8d1b5bb0e31e383179412dc64b9dd (patch) | |
tree | dca813f8d7a2707fc421e2dd592d820e5c991aa5 /libs/backends/alsa/alsa_audiobackend.h | |
parent | ce052ba20a2dca049fa3afcc5c58b3d1c301272d (diff) |
O(log(n)) port and connection lookup for ALSA
Diffstat (limited to 'libs/backends/alsa/alsa_audiobackend.h')
-rw-r--r-- | libs/backends/alsa/alsa_audiobackend.h | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/libs/backends/alsa/alsa_audiobackend.h b/libs/backends/alsa/alsa_audiobackend.h index 97db9fbcaa..48115f9f05 100644 --- a/libs/backends/alsa/alsa_audiobackend.h +++ b/libs/backends/alsa/alsa_audiobackend.h @@ -86,7 +86,7 @@ class AlsaPort { bool is_connected (const AlsaPort *port) const; bool is_physically_connected () const; - const std::vector<AlsaPort *>& get_connections () const { return _connections; } + const std::set<AlsaPort *>& get_connections () const { return _connections; } int connect (AlsaPort *port); int disconnect (AlsaPort *port); @@ -118,7 +118,7 @@ class AlsaPort { const PortFlags _flags; LatencyRange _capture_latency_range; LatencyRange _playback_latency_range; - std::vector<AlsaPort*> _connections; + std::set<AlsaPort*> _connections; void _connect (AlsaPort* , bool); void _disconnect (AlsaPort* , bool); @@ -404,12 +404,16 @@ class AlsaAudioBackend : public AudioBackend { int register_system_midi_ports (const std::string device = ""); void unregister_ports (bool system_only = false); - std::vector<AlsaPort *> _ports; std::vector<AlsaPort *> _system_inputs; std::vector<AlsaPort *> _system_outputs; std::vector<AlsaPort *> _system_midi_in; std::vector<AlsaPort *> _system_midi_out; + typedef std::map<std::string, AlsaPort *> PortMap; // fast lookup in _ports + typedef std::set<AlsaPort *> PortIndex; // fast lookup in _ports + PortMap _portmap; + PortIndex _ports; + std::vector<AlsaMidiOut *> _rmidi_out; std::vector<AlsaMidiIn *> _rmidi_in; @@ -442,16 +446,15 @@ class AlsaAudioBackend : public AudioBackend { } bool valid_port (PortHandle port) const { - return std::find (_ports.begin (), _ports.end (), (AlsaPort*)port) != _ports.end (); + return _ports.find (static_cast<AlsaPort*>(port)) != _ports.end (); } - AlsaPort * find_port (const std::string& port_name) const { - for (std::vector<AlsaPort*>::const_iterator it = _ports.begin (); it != _ports.end (); ++it) { - if ((*it)->name () == port_name) { - return *it; - } + AlsaPort* find_port (const std::string& port_name) const { + PortMap::const_iterator it = _portmap.find (port_name); + if (it == _portmap.end()) { + return NULL; } - return NULL; + return (*it).second; } void update_systemic_audio_latencies (); |