diff --git a/src/common/exception.h b/src/common/exception.h new file mode 100644 index 0000000000000000000000000000000000000000..a85e37bfe130121b59ca6e4fbc1131165aef0df1 --- /dev/null +++ b/src/common/exception.h @@ -0,0 +1,70 @@ +/* Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */ + +#pragma once + +#ifdef PADDLE_MOBILE_DEBUG +#include +#include +#include +#include +#include + +#endif + +namespace paddle_mobile { + +#ifdef PADDLE_MOBILE_DEBUG +struct PaddleMobileException : public std::exception { + const std::string exception_prefix = "paddle mobile C++ Exception: \n"; + std::string message; + + PaddleMobileException(const char *header, const char *detail, + const char *file, const int line) { + std::stringstream ss; + ss << exception_prefix << "| " << header << "\n"; + ss << "| [in file] : " << file << " \n"; + ss << "| [on line] : " << line << " \n"; + ss << "| [detail] : " << detail; + message = ss.str(); + } + const char *what() const noexcept { return message.c_str(); } +}; + +#define PADDLE_MOBILE_THROW_EXCEPTION(...) \ + { \ + char buffer[1000]; \ + snprintf(buffer, sizeof(buffer), __VA_ARGS__); \ + std::string detail(buffer); \ + throw paddle_mobile::PaddleMobileException("Custom Exception", buffer, \ + __FILE__, __LINE__); \ + } + +#define PADDLE_MOBILE_ASSERT(stat, ...) \ + { \ + if (stat) { \ + } else { \ + char buffer[1000]; \ + snprintf(buffer, sizeof(buffer), __VA_ARGS__); \ + std::string detail(buffer); \ + throw paddle_mobile::PaddleMobileException("paddle-mobile assert", \ + buffer, __FILE__, __LINE__); \ + } \ + } +#else +#define PADDLE_MOBILE_THROW_EXCEPTION(...) +#define PADDLE_MOBILE_ASSERT(stat, ...) +#endif + +} // namespace paddle_mobile \ No newline at end of file diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 46d948d65f5628e3a5dbc51036625f28f46b190a..50aacc89413cc4f930d79d19d8932e592a66a872 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -55,4 +55,8 @@ target_link_libraries(test-softmax paddle-mobile) # gen test ADD_EXECUTABLE(test-gemm common/test_gemm.cpp) -target_link_libraries(test-gemm paddle-mobile) \ No newline at end of file +target_link_libraries(test-gemm paddle-mobile) + +# gen test +ADD_EXECUTABLE(test-exception common/test_exception.cpp) +target_link_libraries(test-exception paddle-mobile) \ No newline at end of file diff --git a/test/common/test_exception.cpp b/test/common/test_exception.cpp new file mode 100644 index 0000000000000000000000000000000000000000..1b74b7c24ec6658542c826de32fe23781a229578 --- /dev/null +++ b/test/common/test_exception.cpp @@ -0,0 +1,21 @@ +/* Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */ + +#include "common/exception.h" + +int main() { + PADDLE_MOBILE_ASSERT(false, "assert"); + PADDLE_MOBILE_THROW_EXCEPTION("throw a exception"); + return 0; +}