- improved Buffer exceptions

git-svn-id: http://moon:8086/svn/software/trunk/libsrc/cpp@1038 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
2022-06-20 10:53:45 +00:00
parent 4d13e8e41f
commit aab65930bc
2 changed files with 12 additions and 7 deletions
+8 -6
View File
@@ -6,8 +6,10 @@
#include <exception> #include <exception>
#include <algorithm> #include <algorithm>
#define EXC_MSG(code) (std::string(__PRETTY_FUNCTION__) + ", line " + std::to_string(__LINE__) + ", code " + std::to_string(code))
#ifdef PROCESSOR_BUFFER_USE_EXCEPTIONS #ifdef PROCESSOR_BUFFER_USE_EXCEPTIONS
#define RETURN_OR_EXCEPT(code) throw Buffer::Exception(code) #define RETURN_OR_EXCEPT(code) throw Buffer::Exception(EXC_MSG(code))
#else #else
#define RETURN_OR_EXCEPT(code) return code #define RETURN_OR_EXCEPT(code) return code
#endif #endif
@@ -32,19 +34,19 @@ class Buffer : public IBuffer
class Exception : public std::exception class Exception : public std::exception
{ {
std::string m_msg;
public: public:
Exception(Result code) Exception(std::string msg)
: std::exception() : std::exception()
, m_code(code) , m_msg(msg)
{ {
} }
const char* what() const _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW const char* what() const _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW
{ {
static std::string r = "Return code = " + std::to_string(m_code); return m_msg.c_str();
return r.c_str();
} }
Result m_code;
}; };
Buffer(size_t capacity=0); Buffer(size_t capacity=0);
+4 -1
View File
@@ -98,6 +98,9 @@ typename Buffer<T>::Result Buffer<T>::write(const T *pData, size_t len)
{ {
if (len > free()) if (len > free())
{ {
printf("len : %u\n", len);
printf("free : %u\n", free());
printf("capa : %u\n", capacity());
RETURN_OR_EXCEPT(Result::Err_InvalidSize); RETURN_OR_EXCEPT(Result::Err_InvalidSize);
} }
@@ -140,7 +143,7 @@ T Buffer<T>::readAt(size_t offset)
{ {
if (m_len < (1+offset)) if (m_len < (1+offset))
{ {
throw Buffer::Exception(Result::Err_InvalidSize); RETURN_OR_EXCEPT(Result::Err_InvalidSize);
} }
size_t i = (m_ri + offset) % m_capacity; size_t i = (m_ri + offset) % m_capacity;
T result = bufferActive()[i]; T result = bufferActive()[i];