annotate src/portaudio/bindings/cpp/source/portaudiocpp/HostApi.cxx @ 19:891f60ab2af1

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