// Protocol Buffers - Google's data interchange format // Copyright 2008 Google Inc. All rights reserved. // https://developers.google.com/protocol-buffers/ // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef GOOGLE_PROTOBUF_STUBS_LOGGING_H_ #define GOOGLE_PROTOBUF_STUBS_LOGGING_H_ #include <google/protobuf/stubs/macros.h> #include <google/protobuf/stubs/port.h> #include <google/protobuf/stubs/status.h> #include <google/protobuf/stubs/stringpiece.h> #include <google/protobuf/port_def.inc> // =================================================================== // emulates google3/base/logging.h namespace google { namespace protobuf { enum LogLevel { … }; class uint128; namespace internal { class LogFinisher; class PROTOBUF_EXPORT LogMessage { … }; // Used to make the entire "LOG(BLAH) << etc." expression have a void return // type and print a newline after each message. class PROTOBUF_EXPORT LogFinisher { … }; template<typename T> bool IsOk(T status) { … } template<> inline bool IsOk(bool status) { … } } // namespace internal // Undef everything in case we're being mixed with some other Google library // which already defined them itself. Presumably all Google libraries will // support the same syntax for these so it should not be a big deal if they // end up using our definitions instead. #undef GOOGLE_LOG #undef GOOGLE_LOG_IF #undef GOOGLE_CHECK #undef GOOGLE_CHECK_OK #undef GOOGLE_CHECK_EQ #undef GOOGLE_CHECK_NE #undef GOOGLE_CHECK_LT #undef GOOGLE_CHECK_LE #undef GOOGLE_CHECK_GT #undef GOOGLE_CHECK_GE #undef GOOGLE_CHECK_NOTNULL #undef GOOGLE_DLOG #undef GOOGLE_DCHECK #undef GOOGLE_DCHECK_OK #undef GOOGLE_DCHECK_EQ #undef GOOGLE_DCHECK_NE #undef GOOGLE_DCHECK_LT #undef GOOGLE_DCHECK_LE #undef GOOGLE_DCHECK_GT #undef GOOGLE_DCHECK_GE #define GOOGLE_LOG(LEVEL) … #define GOOGLE_LOG_IF(LEVEL, CONDITION) … #define GOOGLE_CHECK(EXPRESSION) … #define GOOGLE_CHECK_OK(A) … #define GOOGLE_CHECK_EQ(A, B) … #define GOOGLE_CHECK_NE(A, B) … #define GOOGLE_CHECK_LT(A, B) … #define GOOGLE_CHECK_LE(A, B) … #define GOOGLE_CHECK_GT(A, B) … #define GOOGLE_CHECK_GE(A, B) … namespace internal { template<typename T> T* CheckNotNull(const char* /* file */, int /* line */, const char* name, T* val) { … } } // namespace internal #define GOOGLE_CHECK_NOTNULL(A) … #ifdef NDEBUG #define GOOGLE_DLOG … #define GOOGLE_DCHECK … #define GOOGLE_DCHECK_OK … #define GOOGLE_DCHECK_EQ … #define GOOGLE_DCHECK_NE … #define GOOGLE_DCHECK_LT … #define GOOGLE_DCHECK_LE … #define GOOGLE_DCHECK_GT … #define GOOGLE_DCHECK_GE … #else // NDEBUG #define GOOGLE_DLOG … #define GOOGLE_DCHECK … #define GOOGLE_DCHECK_OK … #define GOOGLE_DCHECK_EQ … #define GOOGLE_DCHECK_NE … #define GOOGLE_DCHECK_LT … #define GOOGLE_DCHECK_LE … #define GOOGLE_DCHECK_GT … #define GOOGLE_DCHECK_GE … #endif // !NDEBUG LogHandler; // The protobuf library sometimes writes warning and error messages to // stderr. These messages are primarily useful for developers, but may // also help end users figure out a problem. If you would prefer that // these messages be sent somewhere other than stderr, call SetLogHandler() // to set your own handler. This returns the old handler. Set the handler // to nullptr to ignore log messages (but see also LogSilencer, below). // // Obviously, SetLogHandler is not thread-safe. You should only call it // at initialization time, and probably not from library code. If you // simply want to suppress log messages temporarily (e.g. because you // have some code that tends to trigger them frequently and you know // the warnings are not important to you), use the LogSilencer class // below. PROTOBUF_EXPORT LogHandler* SetLogHandler(LogHandler* new_func); // Create a LogSilencer if you want to temporarily suppress all log // messages. As long as any LogSilencer objects exist, non-fatal // log messages will be discarded (the current LogHandler will *not* // be called). Constructing a LogSilencer is thread-safe. You may // accidentally suppress log messages occurring in another thread, but // since messages are generally for debugging purposes only, this isn't // a big deal. If you want to intercept log messages, use SetLogHandler(). class PROTOBUF_EXPORT LogSilencer { … }; } // namespace protobuf } // namespace google #include <google/protobuf/port_undef.inc> #endif // GOOGLE_PROTOBUF_STUBS_LOGGING_H_