To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.

The primary repository for this project is hosted at https://github.com/sonic-visualiser/sv-dependency-builds .
This repository is a read-only copy which is updated automatically every hour.

Statistics Download as Zip
| Branch: | Tag: | Revision:

root / src / portaudio_20161030_catalina_patch / bindings / cpp / source / portaudiocpp / HostApi.cxx @ 164:9fa11135915a

History | View | Annotate | Download (2.62 KB)

1
#include "portaudiocpp/HostApi.hxx"
2

    
3
#include "portaudiocpp/System.hxx"
4
#include "portaudiocpp/Device.hxx"
5
#include "portaudiocpp/SystemDeviceIterator.hxx"
6
#include "portaudiocpp/Exception.hxx"
7

    
8
namespace portaudio
9
{
10

    
11
        // -----------------------------------------------------------------------------------
12

    
13
        HostApi::HostApi(PaHostApiIndex index) : devices_(NULL)
14
        {
15
                try
16
                {
17
                        info_ = Pa_GetHostApiInfo(index);
18

    
19
                        // Create and populate devices array:
20
                        int numDevices = deviceCount();
21

    
22
                        devices_ = new Device*[numDevices];
23

    
24
                        for (int i = 0; i < numDevices; ++i)
25
                        {
26
                                PaDeviceIndex deviceIndex = Pa_HostApiDeviceIndexToDeviceIndex(index, i);
27

    
28
                                if (deviceIndex < 0)
29
                                {
30
                                        throw PaException(deviceIndex);
31
                                }
32

    
33
                                devices_[i] = &System::instance().deviceByIndex(deviceIndex);
34
                        }
35
                }
36
                catch (const std::exception &e)
37
                {
38
                        // Delete any (partially) constructed objects (deconstructor isn't called):
39
                        delete[] devices_; // devices_ is either NULL or valid
40

    
41
                        // Re-throw exception:
42
                        throw e;
43
                }
44
        }
45

    
46
        HostApi::~HostApi()
47
        {
48
                // Destroy devices array:
49
                delete[] devices_;
50
        }
51

    
52
        // -----------------------------------------------------------------------------------
53

    
54
        PaHostApiTypeId HostApi::typeId() const
55
        {
56
                return info_->type;
57
        }
58

    
59
        PaHostApiIndex HostApi::index() const
60
        {
61
                PaHostApiIndex index = Pa_HostApiTypeIdToHostApiIndex(typeId());
62

    
63
                if (index < 0)
64
                        throw PaException(index);
65

    
66
                return index;
67
        }
68

    
69
        const char *HostApi::name() const
70
        {
71
                return info_->name;
72
        }
73

    
74
        int HostApi::deviceCount() const
75
        {
76
                return info_->deviceCount;
77
        }
78

    
79
        // -----------------------------------------------------------------------------------
80

    
81
        HostApi::DeviceIterator HostApi::devicesBegin()
82
        {
83
                DeviceIterator tmp;
84
                tmp.ptr_ = &devices_[0]; // begin (first element)
85
                return tmp;
86
        }
87

    
88
        HostApi::DeviceIterator HostApi::devicesEnd()
89
        {
90
                DeviceIterator tmp;
91
                tmp.ptr_ = &devices_[deviceCount()]; // end (one past last element)
92
                return tmp;
93
        }
94

    
95
        // -----------------------------------------------------------------------------------
96

    
97
        Device &HostApi::defaultInputDevice() const
98
        {
99
                return System::instance().deviceByIndex(info_->defaultInputDevice);
100
        }
101

    
102
        Device &HostApi::defaultOutputDevice() const
103
        {
104
                return System::instance().deviceByIndex(info_->defaultOutputDevice);
105
        }
106

    
107
        // -----------------------------------------------------------------------------------
108

    
109
        bool HostApi::operator==(const HostApi &rhs) const
110
        {
111
                return (typeId() == rhs.typeId());
112
        }
113

    
114
        bool HostApi::operator!=(const HostApi &rhs) const
115
        {
116
                return !(*this == rhs);
117
        }
118

    
119
        // -----------------------------------------------------------------------------------
120

    
121
} // namespace portaudio