summaryrefslogtreecommitdiff
path: root/libs/backends/alsa/alsa_audiobackend.h
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2016-04-24 20:45:37 +0200
committerRobin Gareus <robin@gareus.org>2016-04-24 20:45:37 +0200
commit800c8182c6f8d1b5bb0e31e383179412dc64b9dd (patch)
treedca813f8d7a2707fc421e2dd592d820e5c991aa5 /libs/backends/alsa/alsa_audiobackend.h
parentce052ba20a2dca049fa3afcc5c58b3d1c301272d (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.h23
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 ();