.. _program_listing_file_include_rcpputils_asserts.hpp: Program Listing for File asserts.hpp ==================================== |exhale_lsh| :ref:`Return to documentation for file ` (``include/rcpputils/asserts.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp // Copyright 2020 Amazon.com, Inc. or its affiliates. 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. #ifndef RCPPUTILS__ASSERTS_HPP_ #define RCPPUTILS__ASSERTS_HPP_ #include #include #include #include "rcpputils/visibility_control.hpp" // Needed to disable compiler warning for exporting a class that extends a // non-DLL-interface class. // This should be fine since its extending an STL class. #ifdef _WIN32 # pragma warning(push) # pragma warning(disable:4251) # pragma warning(disable:4275) #endif namespace rcpputils { class RCPPUTILS_PUBLIC AssertionException : public std::exception { std::string msg_; public: explicit AssertionException(const char * msg); virtual const char * what() const noexcept; }; class RCPPUTILS_PUBLIC IllegalStateException : public std::exception { std::string msg_; public: explicit IllegalStateException(const char * msg); virtual const char * what() const noexcept; }; inline void require_true(bool condition, const std::string & msg = "invalid argument passed") { if (!condition) { throw std::invalid_argument{msg}; } } inline void check_true(bool condition, const std::string & msg = "check reported invalid state") { if (!condition) { throw rcpputils::IllegalStateException{msg.c_str()}; } } inline void assert_true(bool condition, const std::string & msg = "assertion failed") { // Same macro definition used by cassert #ifndef NDEBUG if (!condition) { throw rcpputils::AssertionException{msg.c_str()}; } #else (void) condition; (void) msg; #endif } } // namespace rcpputils #ifdef _WIN32 # pragma warning(pop) #endif #endif // RCPPUTILS__ASSERTS_HPP_