annotate src/portaudio_20161030/bindings/cpp/source/portaudiocpp/HostApi.cxx @ 55:284acf908dcd

Add source for PortAudio stable v190600_20161030
author Chris Cannam
date Tue, 03 Jan 2017 13:44:07 +0000
parents src/portaudio/bindings/cpp/source/portaudiocpp/HostApi.cxx@e13257ea84a4
children
rev   line source
Chris@55 1 #include "portaudiocpp/HostApi.hxx"
Chris@55 2
Chris@55 3 #include "portaudiocpp/System.hxx"
Chris@55 4 #include "portaudiocpp/Device.hxx"
Chris@55 5 #include "portaudiocpp/SystemDeviceIterator.hxx"
Chris@55 6 #include "portaudiocpp/Exception.hxx"
Chris@55 7
Chris@55 8 namespace portaudio
Chris@55 9 {
Chris@55 10
Chris@55 11 // -----------------------------------------------------------------------------------
Chris@55 12
Chris@55 13 HostApi::HostApi(PaHostApiIndex index) : devices_(NULL)
Chris@55 14 {
Chris@55 15 try
Chris@55 16 {
Chris@55 17 info_ = Pa_GetHostApiInfo(index);
Chris@55 18
Chris@55 19 // Create and populate devices array:
Chris@55 20 int numDevices = deviceCount();
Chris@55 21
Chris@55 22 devices_ = new Device*[numDevices];
Chris@55 23
Chris@55 24 for (int i = 0; i < numDevices; ++i)
Chris@55 25 {
Chris@55 26 PaDeviceIndex deviceIndex = Pa_HostApiDeviceIndexToDeviceIndex(index, i);
Chris@55 27
Chris@55 28 if (deviceIndex < 0)
Chris@55 29 {
Chris@55 30 throw PaException(deviceIndex);
Chris@55 31 }
Chris@55 32
Chris@55 33 devices_[i] = &System::instance().deviceByIndex(deviceIndex);
Chris@55 34 }
Chris@55 35 }
Chris@55 36 catch (const std::exception &e)
Chris@55 37 {
Chris@55 38 // Delete any (partially) constructed objects (deconstructor isn't called):
Chris@55 39 delete[] devices_; // devices_ is either NULL or valid
Chris@55 40
Chris@55 41 // Re-throw exception:
Chris@55 42 throw e;
Chris@55 43 }
Chris@55 44 }
Chris@55 45
Chris@55 46 HostApi::~HostApi()
Chris@55 47 {
Chris@55 48 // Destroy devices array:
Chris@55 49 delete[] devices_;
Chris@55 50 }
Chris@55 51
Chris@55 52 // -----------------------------------------------------------------------------------
Chris@55 53
Chris@55 54 PaHostApiTypeId HostApi::typeId() const
Chris@55 55 {
Chris@55 56 return info_->type;
Chris@55 57 }
Chris@55 58
Chris@55 59 PaHostApiIndex HostApi::index() const
Chris@55 60 {
Chris@55 61 PaHostApiIndex index = Pa_HostApiTypeIdToHostApiIndex(typeId());
Chris@55 62
Chris@55 63 if (index < 0)
Chris@55 64 throw PaException(index);
Chris@55 65
Chris@55 66 return index;
Chris@55 67 }
Chris@55 68
Chris@55 69 const char *HostApi::name() const
Chris@55 70 {
Chris@55 71 return info_->name;
Chris@55 72 }
Chris@55 73
Chris@55 74 int HostApi::deviceCount() const
Chris@55 75 {
Chris@55 76 return info_->deviceCount;
Chris@55 77 }
Chris@55 78
Chris@55 79 // -----------------------------------------------------------------------------------
Chris@55 80
Chris@55 81 HostApi::DeviceIterator HostApi::devicesBegin()
Chris@55 82 {
Chris@55 83 DeviceIterator tmp;
Chris@55 84 tmp.ptr_ = &devices_[0]; // begin (first element)
Chris@55 85 return tmp;
Chris@55 86 }
Chris@55 87
Chris@55 88 HostApi::DeviceIterator HostApi::devicesEnd()
Chris@55 89 {
Chris@55 90 DeviceIterator tmp;
Chris@55 91 tmp.ptr_ = &devices_[deviceCount()]; // end (one past last element)
Chris@55 92 return tmp;
Chris@55 93 }
Chris@55 94
Chris@55 95 // -----------------------------------------------------------------------------------
Chris@55 96
Chris@55 97 Device &HostApi::defaultInputDevice() const
Chris@55 98 {
Chris@55 99 return System::instance().deviceByIndex(info_->defaultInputDevice);
Chris@55 100 }
Chris@55 101
Chris@55 102 Device &HostApi::defaultOutputDevice() const
Chris@55 103 {
Chris@55 104 return System::instance().deviceByIndex(info_->defaultOutputDevice);
Chris@55 105 }
Chris@55 106
Chris@55 107 // -----------------------------------------------------------------------------------
Chris@55 108
Chris@55 109 bool HostApi::operator==(const HostApi &rhs) const
Chris@55 110 {
Chris@55 111 return (typeId() == rhs.typeId());
Chris@55 112 }
Chris@55 113
Chris@55 114 bool HostApi::operator!=(const HostApi &rhs) const
Chris@55 115 {
Chris@55 116 return !(*this == rhs);
Chris@55 117 }
Chris@55 118
Chris@55 119 // -----------------------------------------------------------------------------------
Chris@55 120
Chris@55 121 } // namespace portaudio