Error system now functional in C and C++ APIs

This commit is contained in:
Paul Hollinsky
2018-10-30 16:54:36 -04:00
parent a295713c50
commit 5bc65554f9
7 changed files with 195 additions and 15 deletions
+14 -9
View File
@@ -27,20 +27,25 @@ void ErrorManager::get(std::vector<APIError>& errorOutput, size_t max, ErrorFilt
if(count++ >= max)
break; // We now have as many written to output as we can
} else {
it++;
std::advance(it, 1);
}
}
}
bool ErrorManager::getOne(APIError& errorOutput, ErrorFilter filter) {
std::vector<APIError> output;
get(output, filter, 1);
bool ErrorManager::getLastError(APIError& errorOutput, ErrorFilter filter) {
std::lock_guard<std::mutex> lk(mutex);
if(output.size() == 0)
return false;
errorOutput = output[0];
return true;
auto it = errors.rbegin();
while(it != errors.rend()) {
if(filter.match(*it)) {
errorOutput = *it;
errors.erase(std::next(it).base());
return true;
}
std::advance(it, 1);
}
return false;
}
void ErrorManager::discard(ErrorFilter filter) {
+36
View File
@@ -5,4 +5,40 @@ using namespace icsneo;
std::vector<std::shared_ptr<Device>> icsneo::FindAllDevices() {
return DeviceFinder::FindAll();
}
size_t icsneo::ErrorCount(ErrorFilter filter) {
return ErrorManager::GetInstance().count(filter);
}
std::vector<APIError> icsneo::GetErrors(ErrorFilter filter, size_t max) {
return ErrorManager::GetInstance().get(filter, max);
}
std::vector<APIError> icsneo::GetErrors(size_t max, ErrorFilter filter) {
return ErrorManager::GetInstance().get(max, filter);
}
void icsneo::GetErrors(std::vector<APIError>& errors, ErrorFilter filter, size_t max) {
ErrorManager::GetInstance().get(errors, filter, max);
}
void icsneo::GetErrors(std::vector<APIError>& errors, size_t max, ErrorFilter filter) {
ErrorManager::GetInstance().get(errors, max, filter);
}
bool icsneo::GetLastError(APIError& error, ErrorFilter filter) {
return ErrorManager::GetInstance().getLastError(error, filter);
}
void icsneo::DiscardErrors(ErrorFilter filter) {
ErrorManager::GetInstance().discard(filter);
}
void icsneo::SetErrorLimit(size_t newLimit) {
ErrorManager::GetInstance().setErrorLimit(newLimit);
}
size_t icsneo::GetErrorLimit() {
return ErrorManager::GetInstance().getErrorLimit();
}