annotate src/portaudio_20140130/bindings/cpp/source/portaudiocpp/HostApi.cxx @ 169:223a55898ab9 tip default

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