1// Copyright 2008 Google Inc. 2// Author: Lincoln Smith 3// 4// Licensed under the Apache License, Version 2.0 (the "License"); 5// you may not use this file except in compliance with the License. 6// You may obtain a copy of the License at 7// 8// http://www.apache.org/licenses/LICENSE-2.0 9// 10// Unless required by applicable law or agreed to in writing, software 11// distributed under the License is distributed on an "AS IS" BASIS, 12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13// See the License for the specific language governing permissions and 14// limitations under the License. 15 16#ifndef OPEN_VCDIFF_LOGGING_H_ 17#define OPEN_VCDIFF_LOGGING_H_ 18 19#include <config.h> 20#include <iostream> 21#include <vector> 22 23// Windows API defines ERROR 24#ifdef ERROR 25#undef ERROR 26#endif // ERROR 27 28namespace open_vcdiff { 29 30enum LogLevel { 31 INFO, 32 WARNING, 33 ERROR, 34 FATAL 35}; 36 37#ifndef NDEBUG 38#define DFATAL FATAL 39#else // NDEBUG 40#define DFATAL ERROR 41#endif // !NDEBUG 42 43extern bool g_fatal_error_occurred; 44extern void (*ExitFatal)(); 45 46inline std::ostream& LogMessage(LogLevel level, const char* level_name) { 47 if (level == FATAL) { 48 g_fatal_error_occurred = true; 49 } 50 return std::cerr << level_name << ": "; 51} 52 53inline void CheckFatalError() { 54 if (g_fatal_error_occurred) { 55 g_fatal_error_occurred = false; 56 (*ExitFatal)(); 57 } 58} 59 60} // namespace open_vcdiff 61 62#define LOG(level) LogMessage(open_vcdiff::level, #level) 63#define LOG_ENDL std::endl; \ 64 open_vcdiff::CheckFatalError(); 65 66#endif // OPEN_VCDIFF_LOGGING_H_ 67