↰ Return to documentation for file (include/networkit/auxiliary/Enforce.hpp
)
#ifndef NETWORKIT_AUXILIARY_ENFORCE_HPP_
#define NETWORKIT_AUXILIARY_ENFORCE_HPP_
#include <cassert>
#include <stdexcept>
#include <string>
namespace Aux {
template <typename Exception = std::runtime_error>
inline void enforce(bool b, const char *msg = "") {
assert(msg && "Message to enforce must not be nullptr");
if (!b) {
throw Exception{msg};
}
}
template <typename Exception = std::runtime_error>
inline void enforce(bool b, std::string_view msg) {
enforce<Exception>(b, msg.data());
}
template <typename Stream>
inline void enforceOpened(const Stream &stream) {
enforce(stream.is_open());
}
namespace Checkers {
struct Asserter {
static void enforce(bool b) {
assert(b);
(void)b; // prevent warnings in release-builds
}
};
struct Enforcer {
static void enforce(bool b) { ::Aux::enforce(b); }
};
struct Terminator {
static void enforce(bool b) {
if (!b) {
std::terminate();
}
}
};
struct Ignorer {
static void enforce(bool) {}
};
} // namespace Checkers
} // namespace Aux
#endif // NETWORKIT_AUXILIARY_ENFORCE_HPP_