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