Files
2019-11-24 22:19:26 +00:00

68 lines
1.6 KiB
C++

#include "FrameLib_Errors.h"
// Report Class
void FrameLib_ErrorReporter::ErrorReport::getErrorText(std::string& text) const
{
text = mError;
const char *ptr = mItems;
for (unsigned long i = 0; i < mNumItems; i++)
{
size_t pos = text.find("#");
if (pos == std::string::npos)
break;
text.replace(pos, 1, ptr);
ptr += strlen(ptr) + 1;
}
}
void FrameLib_ErrorReporter::ErrorReport::getErrorText(char *text, size_t N) const
{
const char *errorPtr = mError;
const char *itemsPtr = mItems;
size_t j = 0, k = 0;
for (unsigned long i = 0; i < mNumItems; i++, errorPtr += j + 1, itemsPtr += k + 1)
{
for (j = 0; errorPtr[j]; j++)
if (errorPtr[j] == '#')
break;
if (!errorPtr[j])
break;
k = strlen(itemsPtr);
copy(text, errorPtr, j, N);
copy(text, itemsPtr, k, N);
}
copy(text, errorPtr, strlen(errorPtr), N);
}
void FrameLib_ErrorReporter::ErrorReport::copy(char*& dest, const char *str, size_t length, size_t& left) const
{
size_t size = std::min(length, left - 1);
std::copy(str, str + size, dest);
dest += size;
left -= size;
dest[0] = 0;
}
// Retrieve errors (passes ownership to the host)
std::unique_ptr<FrameLib_ErrorReporter::ErrorList> FrameLib_ErrorReporter::getErrors()
{
std::unique_ptr<ErrorList> reports(new ErrorList());
FrameLib_SpinLockHolder lockHolder(&mLock);
std::swap(mReports, reports);
mNotified = false;
return reports;
}