NetBSD ships with pollts(2) similar to Linux specific ppoll()
[ardour.git] / libs / backends / coreaudio / coreaudio_backend.h
index 6153b12e1049043df3f1243c697cac9122c43f76..5211839a9ce7684c80ad957f19153f24f0f3e9dc 100644 (file)
@@ -30,6 +30,7 @@
 
 #include <boost/shared_ptr.hpp>
 
+#include "pbd/natsort.h"
 #include "ardour/audio_backend.h"
 #include "ardour/dsp_load_calculator.h"
 #include "ardour/types.h"
@@ -433,7 +434,8 @@ class CoreAudioBackend : public AudioBackend {
        uint32_t _systemic_audio_output_latency;
 
        /* coreaudio specific  */
-       uint32_t name_to_id(std::string) const;
+       enum DeviceFilter { All, Input, Output, Duplex };
+       uint32_t name_to_id(std::string, DeviceFilter filter = All) const;
 
        /* processing */
        float  _dsp_load;
@@ -466,8 +468,16 @@ class CoreAudioBackend : public AudioBackend {
        std::vector<CoreBackendPort *> _system_midi_in;
        std::vector<CoreBackendPort *> _system_midi_out;
 
+       struct SortByPortName
+       {
+               bool operator ()(const CoreBackendPort* lhs, const CoreBackendPort* rhs) const
+               {
+                       return PBD::naturally_less (lhs->name ().c_str (), rhs->name ().c_str ());
+               }
+       };
+
        typedef std::map<std::string, CoreBackendPort *> PortMap; // fast lookup in _ports
-       typedef std::set<CoreBackendPort *> PortIndex; // fast lookup in _ports
+       typedef std::set<CoreBackendPort *, SortByPortName> PortIndex; // fast lookup in _ports
        PortMap _portmap;
        PortIndex _ports;
 
@@ -497,7 +507,7 @@ class CoreAudioBackend : public AudioBackend {
        }
 
        bool valid_port (PortHandle port) const {
-               return _ports.find (static_cast<CoreBackendPort*>(port)) != _ports.end ();
+               return std::find (_ports.begin(), _ports.end(), static_cast<CoreBackendPort*>(port)) != _ports.end ();
        }
 
        CoreBackendPort* find_port (const std::string& port_name) const {