diff --git a/src/common/enforce.h b/src/common/enforce.h new file mode 100644 index 0000000000000000000000000000000000000000..abd6217fbeb62a09a7d4a9fe9b6d85d0ab1cf2d8 --- /dev/null +++ b/src/common/enforce.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_ENFORCE(stat, ...) \ + { \ + if (stat) { \ + } else { \ + char buffer[1000]; \ + snprintf(buffer, sizeof(buffer), __VA_ARGS__); \ + std::string detail(buffer); \ + throw paddle_mobile::PaddleMobileException("paddle-mobile enforce", \ + buffer, __FILE__, __LINE__); \ + } \ + } +#else +#define PADDLE_MOBILE_THROW_EXCEPTION(...) +#define PADDLE_MOBILE_ASSERT(stat, ...) +#endif + +} // namespace paddle_mobile diff --git a/src/framework/program/program-optimize/program_optimize.h b/src/framework/program/program-optimize/program_optimize.h index 9ac4dc7a3ed9be13869f35ebd791f06a5a597148..9dc4b19eba3476254e69ecf547472691c908452a 100644 --- a/src/framework/program/program-optimize/program_optimize.h +++ b/src/framework/program/program-optimize/program_optimize.h @@ -18,8 +18,8 @@ limitations under the License. */ #include #include "framework/operator.h" +#include "framework/program/program-optimize/node.h" #include "framework/program/program_desc.h" -#include "node.h" namespace paddle_mobile { diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 46d948d65f5628e3a5dbc51036625f28f46b190a..8d2963a6d6c5c8e8793cf90088261609d627fccd 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-enforce common/test_enforce.cpp) +target_link_libraries(test-enforce paddle-mobile) diff --git a/test/common/test_enforce.cpp b/test/common/test_enforce.cpp new file mode 100644 index 0000000000000000000000000000000000000000..9bb499315da33c19ebcf010f87fd067c16f2710e --- /dev/null +++ b/test/common/test_enforce.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/enforce.h" + +int main() { + PADDLE_MOBILE_ENFORCE(false, "enforce"); + PADDLE_MOBILE_THROW_EXCEPTION("throw a exception"); + return 0; +}