/src/LPM/external.protobuf/include/google/protobuf/stubs/common.h
Line | Count | Source (jump to first uncovered line) |
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 <algorithm> |
39 | | #include <iostream> |
40 | | #include <map> |
41 | | #include <memory> |
42 | | #include <set> |
43 | | #include <string> |
44 | | #include <vector> |
45 | | |
46 | | #include <google/protobuf/stubs/macros.h> |
47 | | #include <google/protobuf/stubs/platform_macros.h> |
48 | | #include <google/protobuf/stubs/port.h> |
49 | | #include <google/protobuf/stubs/stringpiece.h> |
50 | | |
51 | | #ifndef PROTOBUF_USE_EXCEPTIONS |
52 | | #if defined(_MSC_VER) && defined(_CPPUNWIND) |
53 | | #define PROTOBUF_USE_EXCEPTIONS 1 |
54 | | #elif defined(__EXCEPTIONS) |
55 | | #define PROTOBUF_USE_EXCEPTIONS 1 |
56 | | #else |
57 | | #define PROTOBUF_USE_EXCEPTIONS 0 |
58 | | #endif |
59 | | #endif |
60 | | |
61 | | #if PROTOBUF_USE_EXCEPTIONS |
62 | | #include <exception> |
63 | | #endif |
64 | | #if defined(__APPLE__) |
65 | | #include <TargetConditionals.h> // for TARGET_OS_IPHONE |
66 | | #endif |
67 | | |
68 | | #if defined(__ANDROID__) || defined(GOOGLE_PROTOBUF_OS_ANDROID) || (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) || defined(GOOGLE_PROTOBUF_OS_IPHONE) |
69 | | #include <pthread.h> |
70 | | #endif |
71 | | |
72 | | #include <google/protobuf/port_def.inc> |
73 | | |
74 | | namespace std {} |
75 | | |
76 | | namespace google { |
77 | | namespace protobuf { |
78 | | namespace internal { |
79 | | |
80 | | // Some of these constants are macros rather than const ints so that they can |
81 | | // be used in #if directives. |
82 | | |
83 | | // The current version, represented as a single integer to make comparison |
84 | | // easier: major * 10^6 + minor * 10^3 + micro |
85 | | #define GOOGLE_PROTOBUF_VERSION 3021007 |
86 | | |
87 | | // A suffix string for alpha, beta or rc releases. Empty for stable releases. |
88 | | #define GOOGLE_PROTOBUF_VERSION_SUFFIX "" |
89 | | |
90 | | // The minimum header version which works with the current version of |
91 | | // the library. This constant should only be used by protoc's C++ code |
92 | | // generator. |
93 | | static const int kMinHeaderVersionForLibrary = 3021000; |
94 | | |
95 | | // The minimum protoc version which works with the current version of the |
96 | | // headers. |
97 | | #define GOOGLE_PROTOBUF_MIN_PROTOC_VERSION 3021000 |
98 | | |
99 | | // The minimum header version which works with the current version of |
100 | | // protoc. This constant should only be used in VerifyVersion(). |
101 | | static const int kMinHeaderVersionForProtoc = 3021000; |
102 | | |
103 | | // Verifies that the headers and libraries are compatible. Use the macro |
104 | | // below to call this. |
105 | | void PROTOBUF_EXPORT VerifyVersion(int headerVersion, int minLibraryVersion, |
106 | | const char* filename); |
107 | | |
108 | | // Converts a numeric version number to a string. |
109 | | std::string PROTOBUF_EXPORT VersionString(int version); |
110 | | |
111 | | } // namespace internal |
112 | | |
113 | | // Place this macro in your main() function (or somewhere before you attempt |
114 | | // to use the protobuf library) to verify that the version you link against |
115 | | // matches the headers you compiled against. If a version mismatch is |
116 | | // detected, the process will abort. |
117 | | #define GOOGLE_PROTOBUF_VERIFY_VERSION \ |
118 | | ::google::protobuf::internal::VerifyVersion( \ |
119 | | GOOGLE_PROTOBUF_VERSION, GOOGLE_PROTOBUF_MIN_LIBRARY_VERSION, \ |
120 | | __FILE__) |
121 | | |
122 | | |
123 | | // =================================================================== |
124 | | // from google3/util/utf8/public/unilib.h |
125 | | |
126 | | namespace internal { |
127 | | |
128 | | // Checks if the buffer contains structurally-valid UTF-8. Implemented in |
129 | | // structurally_valid.cc. |
130 | | PROTOBUF_EXPORT bool IsStructurallyValidUTF8(const char* buf, int len); |
131 | | |
132 | 0 | inline bool IsStructurallyValidUTF8(StringPiece str) { |
133 | 0 | return IsStructurallyValidUTF8(str.data(), static_cast<int>(str.length())); |
134 | 0 | } |
135 | | |
136 | | // Returns initial number of bytes of structurally valid UTF-8. |
137 | | PROTOBUF_EXPORT int UTF8SpnStructurallyValid(StringPiece str); |
138 | | |
139 | | // Coerce UTF-8 byte string in src_str to be |
140 | | // a structurally-valid equal-length string by selectively |
141 | | // overwriting illegal bytes with replace_char (typically ' ' or '?'). |
142 | | // replace_char must be legal printable 7-bit Ascii 0x20..0x7e. |
143 | | // src_str is read-only. |
144 | | // |
145 | | // Returns pointer to output buffer, src_str.data() if no changes were made, |
146 | | // or idst if some bytes were changed. idst is allocated by the caller |
147 | | // and must be at least as big as src_str |
148 | | // |
149 | | // Optimized for: all structurally valid and no byte copying is done. |
150 | | // |
151 | | PROTOBUF_EXPORT char* UTF8CoerceToStructurallyValid(StringPiece str, char* dst, |
152 | | char replace_char); |
153 | | |
154 | | } // namespace internal |
155 | | |
156 | | // This lives in message_lite.h now, but we leave this here for any users that |
157 | | // #include common.h and not message_lite.h. |
158 | | PROTOBUF_EXPORT void ShutdownProtobufLibrary(); |
159 | | |
160 | | namespace internal { |
161 | | |
162 | | // Strongly references the given variable such that the linker will be forced |
163 | | // to pull in this variable's translation unit. |
164 | | template <typename T> |
165 | | void StrongReference(const T& var) { |
166 | | auto volatile unused = &var; |
167 | | (void)&unused; // Use address to avoid an extra load of "unused". |
168 | | } |
169 | | |
170 | | } // namespace internal |
171 | | |
172 | | #if PROTOBUF_USE_EXCEPTIONS |
173 | | class FatalException : public std::exception { |
174 | | public: |
175 | | FatalException(const char* filename, int line, const std::string& message) |
176 | 0 | : filename_(filename), line_(line), message_(message) {} |
177 | | virtual ~FatalException() throw(); |
178 | | |
179 | | const char* what() const throw() override; |
180 | | |
181 | 0 | const char* filename() const { return filename_; } |
182 | 0 | int line() const { return line_; } |
183 | 0 | const std::string& message() const { return message_; } |
184 | | |
185 | | private: |
186 | | const char* filename_; |
187 | | const int line_; |
188 | | const std::string message_; |
189 | | }; |
190 | | #endif |
191 | | |
192 | | } // namespace protobuf |
193 | | } // namespace google |
194 | | |
195 | | #include <google/protobuf/port_undef.inc> |
196 | | |
197 | | #endif // GOOGLE_PROTOBUF_COMMON_H__ |