blob: 29757e8930bafe82716df9f852db090a723a5116 [file] [log] [blame] [edit]
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef MINI_CHROMIUM_BASE_CHECK_OP_H_
#define MINI_CHROMIUM_BASE_CHECK_OP_H_
#include "base/check.h"
#include "base/logging.h"
namespace logging {
template<typename t1, typename t2>
std::string* MakeCheckOpString(const t1& v1, const t2& v2, const char* names) {
std::ostringstream ss;
ss << names << " (" << v1 << " vs. " << v2 << ")";
std::string* msg = new std::string(ss.str());
return msg;
}
#define DEFINE_CHECK_OP_IMPL(name, op) \
template <typename t1, typename t2> \
inline std::string* Check ## name ## Impl(const t1& v1, const t2& v2, \
const char* names) { \
if (v1 op v2) { \
return NULL; \
} else { \
return MakeCheckOpString(v1, v2, names); \
} \
} \
inline std::string* Check ## name ## Impl(int v1, int v2, \
const char* names) { \
if (v1 op v2) { \
return NULL; \
} else { \
return MakeCheckOpString(v1, v2, names); \
} \
}
DEFINE_CHECK_OP_IMPL(EQ, ==)
DEFINE_CHECK_OP_IMPL(NE, !=)
DEFINE_CHECK_OP_IMPL(LE, <=)
DEFINE_CHECK_OP_IMPL(LT, <)
DEFINE_CHECK_OP_IMPL(GE, >=)
DEFINE_CHECK_OP_IMPL(GT, >)
#undef DEFINE_CHECK_OP_IMPL
} // namespace logging
#define CHECK_OP(name, op, val1, val2) \
if (std::string* _result = \
logging::Check ## name ## Impl((val1), (val2), \
# val1 " " # op " " # val2)) \
logging::LogMessage(FUNCTION_SIGNATURE, __FILE__, __LINE__, \
_result).stream()
#define CHECK_EQ(val1, val2) CHECK_OP(EQ, ==, val1, val2)
#define CHECK_NE(val1, val2) CHECK_OP(NE, !=, val1, val2)
#define CHECK_LE(val1, val2) CHECK_OP(LE, <=, val1, val2)
#define CHECK_LT(val1, val2) CHECK_OP(LT, <, val1, val2)
#define CHECK_GE(val1, val2) CHECK_OP(GE, >=, val1, val2)
#define CHECK_GT(val1, val2) CHECK_OP(GT, >, val1, val2)
#define DCHECK_OP(name, op, val1, val2) \
if (DCHECK_IS_ON()) \
if (std::string* _result = \
logging::Check ## name ## Impl((val1), (val2), \
# val1 " " # op " " # val2)) \
logging::LogMessage(FUNCTION_SIGNATURE, __FILE__, __LINE__, \
_result).stream()
#define DCHECK_EQ(val1, val2) DCHECK_OP(EQ, ==, val1, val2)
#define DCHECK_NE(val1, val2) DCHECK_OP(NE, !=, val1, val2)
#define DCHECK_LE(val1, val2) DCHECK_OP(LE, <=, val1, val2)
#define DCHECK_LT(val1, val2) DCHECK_OP(LT, <, val1, val2)
#define DCHECK_GE(val1, val2) DCHECK_OP(GE, >=, val1, val2)
#define DCHECK_GT(val1, val2) DCHECK_OP(GT, >, val1, val2)
#endif // MINI_CHROMIUM_BASE_CHECK_OP_H_