mirror of
https://github.com/abseil/abseil-cpp.git
synced 2026-06-04 12:07:05 +08:00
This library contains helper functions that allow throwing exceptions consistently from anywhere, without risk of ODR violations. When execptions are disabled, these functions abort the program. The old internal spellings will be removed in a follow up change. PiperOrigin-RevId: 867594519 Change-Id: Ibd7a447f5577247bced718617f5da662d983d185
206 lines
4.6 KiB
C++
206 lines
4.6 KiB
C++
// Copyright 2017 The Abseil Authors.
|
|
//
|
|
// 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
|
|
//
|
|
// https://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 "absl/base/throw_delegate.h"
|
|
|
|
#include <cstdlib>
|
|
#include <functional>
|
|
#include <new>
|
|
#include <stdexcept>
|
|
|
|
#include "absl/base/config.h"
|
|
#include "absl/base/internal/raw_logging.h"
|
|
|
|
namespace absl {
|
|
ABSL_NAMESPACE_BEGIN
|
|
|
|
void ThrowStdLogicError(const std::string& what_arg) {
|
|
#ifdef ABSL_HAVE_EXCEPTIONS
|
|
throw std::logic_error(what_arg);
|
|
#else
|
|
ABSL_RAW_LOG(FATAL, "%s", what_arg.c_str());
|
|
std::abort();
|
|
#endif
|
|
}
|
|
void ThrowStdLogicError(const char* what_arg) {
|
|
#ifdef ABSL_HAVE_EXCEPTIONS
|
|
throw std::logic_error(what_arg);
|
|
#else
|
|
ABSL_RAW_LOG(FATAL, "%s", what_arg);
|
|
std::abort();
|
|
#endif
|
|
}
|
|
void ThrowStdInvalidArgument(const std::string& what_arg) {
|
|
#ifdef ABSL_HAVE_EXCEPTIONS
|
|
throw std::invalid_argument(what_arg);
|
|
#else
|
|
ABSL_RAW_LOG(FATAL, "%s", what_arg.c_str());
|
|
std::abort();
|
|
#endif
|
|
}
|
|
void ThrowStdInvalidArgument(const char* what_arg) {
|
|
#ifdef ABSL_HAVE_EXCEPTIONS
|
|
throw std::invalid_argument(what_arg);
|
|
#else
|
|
ABSL_RAW_LOG(FATAL, "%s", what_arg);
|
|
std::abort();
|
|
#endif
|
|
}
|
|
|
|
void ThrowStdDomainError(const std::string& what_arg) {
|
|
#ifdef ABSL_HAVE_EXCEPTIONS
|
|
throw std::domain_error(what_arg);
|
|
#else
|
|
ABSL_RAW_LOG(FATAL, "%s", what_arg.c_str());
|
|
std::abort();
|
|
#endif
|
|
}
|
|
void ThrowStdDomainError(const char* what_arg) {
|
|
#ifdef ABSL_HAVE_EXCEPTIONS
|
|
throw std::domain_error(what_arg);
|
|
#else
|
|
ABSL_RAW_LOG(FATAL, "%s", what_arg);
|
|
std::abort();
|
|
#endif
|
|
}
|
|
|
|
void ThrowStdLengthError(const std::string& what_arg) {
|
|
#ifdef ABSL_HAVE_EXCEPTIONS
|
|
throw std::length_error(what_arg);
|
|
#else
|
|
ABSL_RAW_LOG(FATAL, "%s", what_arg.c_str());
|
|
std::abort();
|
|
#endif
|
|
}
|
|
void ThrowStdLengthError(const char* what_arg) {
|
|
#ifdef ABSL_HAVE_EXCEPTIONS
|
|
throw std::length_error(what_arg);
|
|
#else
|
|
ABSL_RAW_LOG(FATAL, "%s", what_arg);
|
|
std::abort();
|
|
#endif
|
|
}
|
|
|
|
void ThrowStdOutOfRange(const std::string& what_arg) {
|
|
#ifdef ABSL_HAVE_EXCEPTIONS
|
|
throw std::out_of_range(what_arg);
|
|
#else
|
|
ABSL_RAW_LOG(FATAL, "%s", what_arg.c_str());
|
|
std::abort();
|
|
#endif
|
|
}
|
|
void ThrowStdOutOfRange(const char* what_arg) {
|
|
#ifdef ABSL_HAVE_EXCEPTIONS
|
|
throw std::out_of_range(what_arg);
|
|
#else
|
|
ABSL_RAW_LOG(FATAL, "%s", what_arg);
|
|
std::abort();
|
|
#endif
|
|
}
|
|
|
|
void ThrowStdRuntimeError(const std::string& what_arg) {
|
|
#ifdef ABSL_HAVE_EXCEPTIONS
|
|
throw std::runtime_error(what_arg);
|
|
#else
|
|
ABSL_RAW_LOG(FATAL, "%s", what_arg.c_str());
|
|
std::abort();
|
|
#endif
|
|
}
|
|
void ThrowStdRuntimeError(const char* what_arg) {
|
|
#ifdef ABSL_HAVE_EXCEPTIONS
|
|
throw std::runtime_error(what_arg);
|
|
#else
|
|
ABSL_RAW_LOG(FATAL, "%s", what_arg);
|
|
std::abort();
|
|
#endif
|
|
}
|
|
|
|
void ThrowStdRangeError(const std::string& what_arg) {
|
|
#ifdef ABSL_HAVE_EXCEPTIONS
|
|
throw std::range_error(what_arg);
|
|
#else
|
|
ABSL_RAW_LOG(FATAL, "%s", what_arg.c_str());
|
|
std::abort();
|
|
#endif
|
|
}
|
|
void ThrowStdRangeError(const char* what_arg) {
|
|
#ifdef ABSL_HAVE_EXCEPTIONS
|
|
throw std::range_error(what_arg);
|
|
#else
|
|
ABSL_RAW_LOG(FATAL, "%s", what_arg);
|
|
std::abort();
|
|
#endif
|
|
}
|
|
|
|
void ThrowStdOverflowError(const std::string& what_arg) {
|
|
#ifdef ABSL_HAVE_EXCEPTIONS
|
|
throw std::overflow_error(what_arg);
|
|
#else
|
|
ABSL_RAW_LOG(FATAL, "%s", what_arg.c_str());
|
|
std::abort();
|
|
#endif
|
|
}
|
|
void ThrowStdOverflowError(const char* what_arg) {
|
|
#ifdef ABSL_HAVE_EXCEPTIONS
|
|
throw std::overflow_error(what_arg);
|
|
#else
|
|
ABSL_RAW_LOG(FATAL, "%s", what_arg);
|
|
std::abort();
|
|
#endif
|
|
}
|
|
|
|
void ThrowStdUnderflowError(const std::string& what_arg) {
|
|
#ifdef ABSL_HAVE_EXCEPTIONS
|
|
throw std::underflow_error(what_arg);
|
|
#else
|
|
ABSL_RAW_LOG(FATAL, "%s", what_arg.c_str());
|
|
std::abort();
|
|
#endif
|
|
}
|
|
void ThrowStdUnderflowError(const char* what_arg) {
|
|
#ifdef ABSL_HAVE_EXCEPTIONS
|
|
throw std::underflow_error(what_arg);
|
|
#else
|
|
ABSL_RAW_LOG(FATAL, "%s", what_arg);
|
|
std::abort();
|
|
#endif
|
|
}
|
|
|
|
void ThrowStdBadFunctionCall() {
|
|
#ifdef ABSL_HAVE_EXCEPTIONS
|
|
throw std::bad_function_call();
|
|
#else
|
|
std::abort();
|
|
#endif
|
|
}
|
|
|
|
void ThrowStdBadAlloc() {
|
|
#ifdef ABSL_HAVE_EXCEPTIONS
|
|
throw std::bad_alloc();
|
|
#else
|
|
std::abort();
|
|
#endif
|
|
}
|
|
|
|
void ThrowStdBadArrayNewLength() {
|
|
#ifdef ABSL_HAVE_EXCEPTIONS
|
|
throw std::bad_array_new_length();
|
|
#else
|
|
std::abort();
|
|
#endif
|
|
}
|
|
|
|
ABSL_NAMESPACE_END
|
|
} // namespace absl
|