annotate src/portaudio/bindings/cpp/source/portaudiocpp/HostApi.cxx @ 107:71c914cf6201

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