LCOV - code coverage report
Current view: top level - third_party/protobuf/src/google/protobuf/stubs - common.h (source / functions) Hit Total Coverage
Test: tmp.zDYK9MVh93 Lines: 0 2 0.0 %
Date: 2015-10-10 Functions: 0 1 0.0 %

          Line data    Source code
       1             : // Protocol Buffers - Google's data interchange format
       2             : // Copyright 2008 Google Inc.  All rights reserved.
       3             : // https://developers.google.com/protocol-buffers/
       4             : //
       5             : // Redistribution and use in source and binary forms, with or without
       6             : // modification, are permitted provided that the following conditions are
       7             : // met:
       8             : //
       9             : //     * Redistributions of source code must retain the above copyright
      10             : // notice, this list of conditions and the following disclaimer.
      11             : //     * Redistributions in binary form must reproduce the above
      12             : // copyright notice, this list of conditions and the following disclaimer
      13             : // in the documentation and/or other materials provided with the
      14             : // distribution.
      15             : //     * Neither the name of Google Inc. nor the names of its
      16             : // contributors may be used to endorse or promote products derived from
      17             : // this software without specific prior written permission.
      18             : //
      19             : // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
      20             : // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
      21             : // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
      22             : // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
      23             : // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
      24             : // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
      25             : // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
      26             : // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
      27             : // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
      28             : // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
      29             : // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
      30             : 
      31             : // Author: kenton@google.com (Kenton Varda) and others
      32             : //
      33             : // Contains basic types and utilities used by the rest of the library.
      34             : 
      35             : #ifndef GOOGLE_PROTOBUF_COMMON_H__
      36             : #define GOOGLE_PROTOBUF_COMMON_H__
      37             : 
      38             : #include <string>
      39             : 
      40             : #include <google/protobuf/stubs/port.h>
      41             : #include <google/protobuf/stubs/macros.h>
      42             : #include <google/protobuf/stubs/platform_macros.h>
      43             : 
      44             : // TODO(liujisi): Remove the following includes after the include clean-up.
      45             : #include <google/protobuf/stubs/logging.h>
      46             : #include <google/protobuf/stubs/scoped_ptr.h>
      47             : #include <google/protobuf/stubs/mutex.h>
      48             : #include <google/protobuf/stubs/callback.h>
      49             : 
      50             : #ifndef PROTOBUF_USE_EXCEPTIONS
      51             : #if defined(_MSC_VER) && defined(_CPPUNWIND)
      52             :   #define PROTOBUF_USE_EXCEPTIONS 1
      53             : #elif defined(__EXCEPTIONS)
      54             :   #define PROTOBUF_USE_EXCEPTIONS 1
      55             : #else
      56             :   #define PROTOBUF_USE_EXCEPTIONS 0
      57             : #endif
      58             : #endif
      59             : 
      60             : #if PROTOBUF_USE_EXCEPTIONS
      61             : #include <exception>
      62             : #endif
      63             : #if defined(__APPLE__)
      64             : #include <TargetConditionals.h>  // for TARGET_OS_IPHONE
      65             : #endif
      66             : 
      67             : #if defined(__ANDROID__) || defined(GOOGLE_PROTOBUF_OS_ANDROID) || (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) || defined(GOOGLE_PROTOBUF_OS_IPHONE)
      68             : #include <pthread.h>
      69             : #endif
      70             : 
      71             : #if defined(_WIN32) && defined(GetMessage)
      72             : // Allow GetMessage to be used as a valid method name in protobuf classes.
      73             : // windows.h defines GetMessage() as a macro.  Let's re-define it as an inline
      74             : // function.  The inline function should be equivalent for C++ users.
      75             : inline BOOL GetMessage_Win32(
      76             :     LPMSG lpMsg, HWND hWnd,
      77             :     UINT wMsgFilterMin, UINT wMsgFilterMax) {
      78             :   return GetMessage(lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax);
      79             : }
      80             : #undef GetMessage
      81             : inline BOOL GetMessage(
      82             :     LPMSG lpMsg, HWND hWnd,
      83             :     UINT wMsgFilterMin, UINT wMsgFilterMax) {
      84             :   return GetMessage_Win32(lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax);
      85             : }
      86             : #endif
      87             : 
      88             : namespace std {}
      89             : 
      90             : namespace google {
      91             : namespace protobuf {
      92             : namespace internal {
      93             : 
      94             : // Some of these constants are macros rather than const ints so that they can
      95             : // be used in #if directives.
      96             : 
      97             : // The current version, represented as a single integer to make comparison
      98             : // easier:  major * 10^6 + minor * 10^3 + micro
      99             : #define GOOGLE_PROTOBUF_VERSION 3000000
     100             : 
     101             : // The minimum library version which works with the current version of the
     102             : // headers.
     103             : #define GOOGLE_PROTOBUF_MIN_LIBRARY_VERSION 3000000
     104             : 
     105             : // The minimum header version which works with the current version of
     106             : // the library.  This constant should only be used by protoc's C++ code
     107             : // generator.
     108             : static const int kMinHeaderVersionForLibrary = 3000000;
     109             : 
     110             : // The minimum protoc version which works with the current version of the
     111             : // headers.
     112             : #define GOOGLE_PROTOBUF_MIN_PROTOC_VERSION 3000000
     113             : 
     114             : // The minimum header version which works with the current version of
     115             : // protoc.  This constant should only be used in VerifyVersion().
     116             : static const int kMinHeaderVersionForProtoc = 3000000;
     117             : 
     118             : // Verifies that the headers and libraries are compatible.  Use the macro
     119             : // below to call this.
     120             : void LIBPROTOBUF_EXPORT VerifyVersion(int headerVersion, int minLibraryVersion,
     121             :                                       const char* filename);
     122             : 
     123             : // Converts a numeric version number to a string.
     124             : std::string LIBPROTOBUF_EXPORT VersionString(int version);
     125             : 
     126             : }  // namespace internal
     127             : 
     128             : // Place this macro in your main() function (or somewhere before you attempt
     129             : // to use the protobuf library) to verify that the version you link against
     130             : // matches the headers you compiled against.  If a version mismatch is
     131             : // detected, the process will abort.
     132             : #define GOOGLE_PROTOBUF_VERIFY_VERSION                                    \
     133             :   ::google::protobuf::internal::VerifyVersion(                            \
     134             :     GOOGLE_PROTOBUF_VERSION, GOOGLE_PROTOBUF_MIN_LIBRARY_VERSION,         \
     135             :     __FILE__)
     136             : 
     137             : 
     138             : // ===================================================================
     139             : // from google3/util/utf8/public/unilib.h
     140             : 
     141             : class StringPiece;
     142             : namespace internal {
     143             : 
     144             : // Checks if the buffer contains structurally-valid UTF-8.  Implemented in
     145             : // structurally_valid.cc.
     146             : LIBPROTOBUF_EXPORT bool IsStructurallyValidUTF8(const char* buf, int len);
     147             : 
     148             : inline bool IsStructurallyValidUTF8(const std::string& str) {
     149             :   return IsStructurallyValidUTF8(str.data(), str.length());
     150             : }
     151             : 
     152             : // Returns initial number of bytes of structually valid UTF-8.
     153             : LIBPROTOBUF_EXPORT int UTF8SpnStructurallyValid(const StringPiece& str);
     154             : 
     155             : // Coerce UTF-8 byte string in src_str to be
     156             : // a structurally-valid equal-length string by selectively
     157             : // overwriting illegal bytes with replace_char (typically ' ' or '?').
     158             : // replace_char must be legal printable 7-bit Ascii 0x20..0x7e.
     159             : // src_str is read-only.
     160             : //
     161             : // Returns pointer to output buffer, src_str.data() if no changes were made,
     162             : //  or idst if some bytes were changed. idst is allocated by the caller
     163             : //  and must be at least as big as src_str
     164             : //
     165             : // Optimized for: all structurally valid and no byte copying is done.
     166             : //
     167             : LIBPROTOBUF_EXPORT char* UTF8CoerceToStructurallyValid(
     168             :     const StringPiece& str, char* dst, char replace_char);
     169             : 
     170             : }  // namespace internal
     171             : 
     172             : 
     173             : // ===================================================================
     174             : // Shutdown support.
     175             : 
     176             : // Shut down the entire protocol buffers library, deleting all static-duration
     177             : // objects allocated by the library or by generated .pb.cc files.
     178             : //
     179             : // There are two reasons you might want to call this:
     180             : // * You use a draconian definition of "memory leak" in which you expect
     181             : //   every single malloc() to have a corresponding free(), even for objects
     182             : //   which live until program exit.
     183             : // * You are writing a dynamically-loaded library which needs to clean up
     184             : //   after itself when the library is unloaded.
     185             : //
     186             : // It is safe to call this multiple times.  However, it is not safe to use
     187             : // any other part of the protocol buffers library after
     188             : // ShutdownProtobufLibrary() has been called.
     189             : LIBPROTOBUF_EXPORT void ShutdownProtobufLibrary();
     190             : 
     191             : namespace internal {
     192             : 
     193             : // Register a function to be called when ShutdownProtocolBuffers() is called.
     194             : LIBPROTOBUF_EXPORT void OnShutdown(void (*func)());
     195             : 
     196             : }  // namespace internal
     197             : 
     198             : #if PROTOBUF_USE_EXCEPTIONS
     199             : class FatalException : public std::exception {
     200             :  public:
     201           0 :   FatalException(const char* filename, int line, const std::string& message)
     202           0 :       : filename_(filename), line_(line), message_(message) {}
     203             :   virtual ~FatalException() throw();
     204             : 
     205             :   virtual const char* what() const throw();
     206             : 
     207             :   const char* filename() const { return filename_; }
     208             :   int line() const { return line_; }
     209             :   const std::string& message() const { return message_; }
     210             : 
     211             :  private:
     212             :   const char* filename_;
     213             :   const int line_;
     214             :   const std::string message_;
     215             : };
     216             : #endif
     217             : 
     218             : // This is at the end of the file instead of the beginning to work around a bug
     219             : // in some versions of MSVC.
     220             : using namespace std;  // Don't do this at home, kids.
     221             : 
     222             : }  // namespace protobuf
     223             : }  // namespace google
     224             : 
     225             : #endif  // GOOGLE_PROTOBUF_COMMON_H__

Generated by: LCOV version 1.10