#pragma once /* * Copyright (c) 2016 MariaDB Corporation Ab * * Use of this software is governed by the Business Source License included * in the LICENSE.TXT file and at www.mariadb.com/bsl. * * Change Date: 2019-07-01 * * On the date above, in accordance with the Business Source License, use * of this software will be governed by version 2 or later of the General * Public License. */ /** * @file cpp.hh * * Common stuff for C++ code. */ #if !defined(__cplusplus) #error This file is only to be included by C++ code. #endif #include #include #include #include /** * All classes of MaxScale are defined in the namespace @c maxscale. * * Third party plugins should not place any definitions inside the namespace * to avoid any name clashes in the future. An exception are template * specializations. */ namespace maxscale { } /** * Shorthand for the @c maxscale namespace. */ namespace mxs = maxscale; /** * If a statement is placed inside this macro, then no exceptions will * escape. Typical use-case is for preventing exceptions to escape across * a C-API. * * @code{.cpp} * * void* cAPI() * { * void* rv = NULL; * MXS_EXCEPTION_GUARD(rv = new Something); * return rv; * } * @endcode */ #define MXS_EXCEPTION_GUARD(statement)\ do { try { statement; }\ catch (const std::bad_alloc&) { MXS_OOM(); }\ catch (const std::exception& x) { MXS_ERROR("Caught standard exception: %s", x.what()); }\ catch (...) { MXS_ERROR("Caught unknown exception."); } } while (false)