-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathException.hpp
More file actions
192 lines (162 loc) · 4.58 KB
/
Exception.hpp
File metadata and controls
192 lines (162 loc) · 4.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
/***********************************************************************
Copyright(C) 2014 Eiichi Takebuchi
TinyASIO is free software : you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
TinyASIO is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with TinyASIO.If not, see <http://www.gnu.org/licenses/>
***********************************************************************/
#pragma once
#include <string>
#include <exception>
#include "SDK.hpp"
namespace asio
{
/**
* TinyASIOの例外基底クラス
*/
class TinyASIOException : public std::exception
{
void ShowError(const std::string& message)
{
MessageBoxA(NULL, message.c_str(), "エラー", MB_OK | MB_ICONERROR);
}
void ShowError(const std::wstring& message)
{
MessageBoxW(NULL, message.c_str(), L"エラー", MB_OK | MB_ICONERROR);
}
public:
TinyASIOException(const std::string& message)
: exception(message.c_str())
{
ShowError(message);
}
TinyASIOException(const std::wstring& message)
: exception(std::string(message.begin(), message.end()).c_str())
{
ShowError(message);
}
};
/**
* ドライバが動かない時に呼ばれる
*/
class CantProcessException : public TinyASIOException
{
public:
CantProcessException(const std::string& message)
: TinyASIOException(message) {}
};
/**
* 実行中にサンプリング周波数が変更された
*/
class SampleRateDidChangeException : public TinyASIOException
{
public:
SampleRateDidChangeException(const std::string& message)
: TinyASIOException(message) {}
};
/**
* チャンネルが見つからない時に呼ばれる
*/
class DontFoundChannels : public TinyASIOException
{
public:
DontFoundChannels(const std::string& message)
: TinyASIOException(message) {}
};
/**
* ドライバのインスタンスに生成失敗すると呼ばれる
*/
class CantCreateInstance : public TinyASIOException
{
public:
CantCreateInstance(const std::string& message)
: TinyASIOException(message) {}
};
/**
* 二回以上初期化されたりなどで呼び出される
*/
class OverTwiceCallException : public TinyASIOException
{
public:
OverTwiceCallException(const std::string& message)
: TinyASIOException(message) {}
};
/**
* ドライバのハンドルを取得できなかった
*/
class CantHandlingASIODriver : public TinyASIOException
{
public:
CantHandlingASIODriver(const std::string& message)
: TinyASIOException(message) {}
};
/**
* レジストリーキーが開けない
*/
class CantOpenRegistryKey : public TinyASIOException
{
public:
CantOpenRegistryKey(const std::wstring& regPath) : TinyASIOException(L"レジストリを開けません: " + regPath) { }
};
/**
* サブキーのインデックスが開けなくなっている
*/
class CantOpenSubKeyIndex : public TinyASIOException
{
public:
CantOpenSubKeyIndex(const std::wstring& regPath) : TinyASIOException(L"サブキーのインデックスが開けません:" + regPath) {}
};
/**
* ASIOのドライバーがひとつもない
*/
class DontFoundASIODrivers : public TinyASIOException
{
public:
DontFoundASIODrivers(const std::wstring& message)
: TinyASIOException(message) {}
};
/**
* 所有権が重複している
*/
class DuplicateOwnershipToken : public TinyASIOException
{
public:
DuplicateOwnershipToken(const std::wstring& message)
: TinyASIOException(message) {}
};
void ErrorCheck(const long& error)
{
switch (error)
{
case ASE_NotPresent:
throw CantProcessException("hardware input or output is not present or available");
case ASE_HWMalfunction:
throw CantProcessException("hardware is malfunctioning (can be returned by any ASIO function)");
case ASE_InvalidParameter:
throw CantProcessException("input parameter invalid");
case ASE_InvalidMode:
throw CantProcessException("hardware is in a bad mode or used in a bad mode");
case ASE_SPNotAdvancing:
throw CantProcessException("hardware is not running when sample position is inquired");
case ASE_NoClock:
throw CantProcessException("sample clock or rate cannot be determined or is not present");
case ASE_NoMemory:
throw CantProcessException("not enough memory for completing the request");
}
}
/**
* まだ開始していないのに,特定の処理を行ったときの例外
*/
class DontStartException : public TinyASIOException
{
public:
DontStartException(const std::wstring& message)
: TinyASIOException(message) {}
};
}