language_detection 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +19 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +85 -0
- data/Rakefile +11 -0
- data/ext/cld/Makefile +34 -0
- data/ext/cld/base/basictypes.h +348 -0
- data/ext/cld/base/build_config.h +124 -0
- data/ext/cld/base/casts.h +156 -0
- data/ext/cld/base/commandlineflags.h +443 -0
- data/ext/cld/base/crash.h +41 -0
- data/ext/cld/base/dynamic_annotations.h +358 -0
- data/ext/cld/base/global_strip_options.h +59 -0
- data/ext/cld/base/log_severity.h +46 -0
- data/ext/cld/base/logging.h +1403 -0
- data/ext/cld/base/macros.h +243 -0
- data/ext/cld/base/port.h +54 -0
- data/ext/cld/base/scoped_ptr.h +428 -0
- data/ext/cld/base/stl_decl.h +0 -0
- data/ext/cld/base/stl_decl_msvc.h +107 -0
- data/ext/cld/base/string_util.h +29 -0
- data/ext/cld/base/strtoint.h +93 -0
- data/ext/cld/base/template_util.h +96 -0
- data/ext/cld/base/type_traits.h +198 -0
- data/ext/cld/base/vlog_is_on.h +143 -0
- data/ext/cld/cld.so +0 -0
- data/ext/cld/encodings/compact_lang_det/cldutil.cc +905 -0
- data/ext/cld/encodings/compact_lang_det/cldutil.h +1205 -0
- data/ext/cld/encodings/compact_lang_det/cldutil_dbg.h +76 -0
- data/ext/cld/encodings/compact_lang_det/cldutil_dbg_empty.cc +76 -0
- data/ext/cld/encodings/compact_lang_det/compact_lang_det.cc +62 -0
- data/ext/cld/encodings/compact_lang_det/compact_lang_det.h +145 -0
- data/ext/cld/encodings/compact_lang_det/compact_lang_det_impl.cc +2574 -0
- data/ext/cld/encodings/compact_lang_det/compact_lang_det_impl.h +173 -0
- data/ext/cld/encodings/compact_lang_det/compact_lang_det_unittest_small.cc +406 -0
- data/ext/cld/encodings/compact_lang_det/compile.cmd +1 -0
- data/ext/cld/encodings/compact_lang_det/ext_lang_enc.cc +545 -0
- data/ext/cld/encodings/compact_lang_det/ext_lang_enc.h +119 -0
- data/ext/cld/encodings/compact_lang_det/generated/cld_generated_score_deltaoctachrome_0406.cc +380 -0
- data/ext/cld/encodings/compact_lang_det/generated/cld_generated_score_quadchrome_0406.cc +382 -0
- data/ext/cld/encodings/compact_lang_det/generated/compact_lang_det_generated_cjkbis_0.cc +49 -0
- data/ext/cld/encodings/compact_lang_det/generated/compact_lang_det_generated_ctjkvz.cc +7119 -0
- data/ext/cld/encodings/compact_lang_det/generated/compact_lang_det_generated_ctjkvz_0.cc +61 -0
- data/ext/cld/encodings/compact_lang_det/generated/compact_lang_det_generated_deltaoctachrome.cc +1263 -0
- data/ext/cld/encodings/compact_lang_det/generated/compact_lang_det_generated_longwords8_0.cc +53 -0
- data/ext/cld/encodings/compact_lang_det/generated/compact_lang_det_generated_meanscore.h +10 -0
- data/ext/cld/encodings/compact_lang_det/generated/compact_lang_det_generated_quads_0.cc +50 -0
- data/ext/cld/encodings/compact_lang_det/generated/compact_lang_det_generated_quadschrome.cc +70935 -0
- data/ext/cld/encodings/compact_lang_det/getonescriptspan.cc +570 -0
- data/ext/cld/encodings/compact_lang_det/getonescriptspan.h +131 -0
- data/ext/cld/encodings/compact_lang_det/letterscript_enum.cc +117 -0
- data/ext/cld/encodings/compact_lang_det/letterscript_enum.h +99 -0
- data/ext/cld/encodings/compact_lang_det/subsetsequence.cc +259 -0
- data/ext/cld/encodings/compact_lang_det/subsetsequence.h +44 -0
- data/ext/cld/encodings/compact_lang_det/subsetsequence_unittest.cc +99 -0
- data/ext/cld/encodings/compact_lang_det/tote.cc +299 -0
- data/ext/cld/encodings/compact_lang_det/tote.h +89 -0
- data/ext/cld/encodings/compact_lang_det/unittest_data.h +193 -0
- data/ext/cld/encodings/compact_lang_det/utf8propjustletter.h +1162 -0
- data/ext/cld/encodings/compact_lang_det/utf8propletterscriptnum.h +1222 -0
- data/ext/cld/encodings/compact_lang_det/utf8scannotjustletterspecial.h +1185 -0
- data/ext/cld/encodings/compact_lang_det/win/cld_basictypes.h +10 -0
- data/ext/cld/encodings/compact_lang_det/win/cld_commandlineflags.h +28 -0
- data/ext/cld/encodings/compact_lang_det/win/cld_google.h +18 -0
- data/ext/cld/encodings/compact_lang_det/win/cld_htmlutils.h +13 -0
- data/ext/cld/encodings/compact_lang_det/win/cld_htmlutils_google3.cc +32 -0
- data/ext/cld/encodings/compact_lang_det/win/cld_htmlutils_windows.cc +29 -0
- data/ext/cld/encodings/compact_lang_det/win/cld_logging.h +21 -0
- data/ext/cld/encodings/compact_lang_det/win/cld_macros.h +19 -0
- data/ext/cld/encodings/compact_lang_det/win/cld_strtoint.h +26 -0
- data/ext/cld/encodings/compact_lang_det/win/cld_unicodetext.cc +84 -0
- data/ext/cld/encodings/compact_lang_det/win/cld_unicodetext.h +40 -0
- data/ext/cld/encodings/compact_lang_det/win/cld_unilib.h +15 -0
- data/ext/cld/encodings/compact_lang_det/win/cld_unilib_google3.cc +18 -0
- data/ext/cld/encodings/compact_lang_det/win/cld_unilib_windows.cc +29 -0
- data/ext/cld/encodings/compact_lang_det/win/cld_utf.h +24 -0
- data/ext/cld/encodings/compact_lang_det/win/cld_utf8statetable.cc +224 -0
- data/ext/cld/encodings/compact_lang_det/win/cld_utf8statetable.h +141 -0
- data/ext/cld/encodings/compact_lang_det/win/cld_utf8utils.h +22 -0
- data/ext/cld/encodings/compact_lang_det/win/cld_utf8utils_google3.cc +18 -0
- data/ext/cld/encodings/compact_lang_det/win/cld_utf8utils_windows.cc +17 -0
- data/ext/cld/encodings/compact_lang_det/win/normalizedunicodetext.cc +172 -0
- data/ext/cld/encodings/compact_lang_det/win/normalizedunicodetext.h +67 -0
- data/ext/cld/encodings/internal/encodings.cc +12 -0
- data/ext/cld/encodings/lang_enc.h +254 -0
- data/ext/cld/encodings/proto/encodings.pb.h +169 -0
- data/ext/cld/encodings/public/encodings.h +301 -0
- data/ext/cld/extconf.rb +1 -0
- data/ext/cld/language_detection.cc +88 -0
- data/ext/cld/languages/internal/languages.cc +337 -0
- data/ext/cld/languages/proto/languages.pb.h +179 -0
- data/ext/cld/languages/public/languages.h +379 -0
- data/language_detection.gemspec +28 -0
- data/lib/language_detection/string.rb +1 -0
- data/lib/language_detection/version.rb +3 -0
- data/lib/language_detection.rb +54 -0
- data/test/_helper.rb +15 -0
- data/test/fixtures/languages.csv +80 -0
- data/test/language_detection_test.rb +88 -0
- metadata +250 -0
@@ -0,0 +1,358 @@
|
|
1
|
+
// Copyright (c) 2006-2009 The Chromium Authors. All rights reserved.
|
2
|
+
// Use of this source code is governed by a BSD-style license that can be
|
3
|
+
// found in the LICENSE file.
|
4
|
+
|
5
|
+
// This file defines dynamic annotations for use with dynamic analysis
|
6
|
+
// tool such as valgrind, PIN, etc.
|
7
|
+
//
|
8
|
+
// Dynamic annotation is a source code annotation that affects
|
9
|
+
// the generated code (that is, the annotation is not a comment).
|
10
|
+
// Each such annotation is attached to a particular
|
11
|
+
// instruction and/or to a particular object (address) in the program.
|
12
|
+
//
|
13
|
+
// The annotations that should be used by users are macros in all upper-case
|
14
|
+
// (e.g., ANNOTATE_NEW_MEMORY).
|
15
|
+
//
|
16
|
+
// Actual implementation of these macros may differ depending on the
|
17
|
+
// dynamic analysis tool being used.
|
18
|
+
//
|
19
|
+
// This file supports the following dynamic analysis tools:
|
20
|
+
// - None (NDEBUG is defined).
|
21
|
+
// Macros are defined empty.
|
22
|
+
// - Helgrind (NDEBUG is not defined).
|
23
|
+
// Macros are defined as calls to non-inlinable empty functions
|
24
|
+
// that are intercepted by helgrind.
|
25
|
+
//
|
26
|
+
#ifndef BASE_DYNAMIC_ANNOTATIONS_H_
|
27
|
+
#define BASE_DYNAMIC_ANNOTATIONS_H_
|
28
|
+
|
29
|
+
|
30
|
+
// All the annotation macros are in effect only in debug mode.
|
31
|
+
#ifndef NDEBUG
|
32
|
+
|
33
|
+
// -------------------------------------------------------------
|
34
|
+
// Annotations useful when implementing condition variables such as CondVar,
|
35
|
+
// using conditional critical sections (Await/LockWhen) and when constructing
|
36
|
+
// user-defined synchronization mechanisms.
|
37
|
+
//
|
38
|
+
// The annotations ANNOTATE_HAPPENS_BEFORE() and ANNOTATE_HAPPENS_AFTER() can
|
39
|
+
// be used to define happens-before arcs in user-defined synchronization
|
40
|
+
// mechanisms: the race detector will infer an arc from the former to the
|
41
|
+
// latter when they share the same argument pointer.
|
42
|
+
//
|
43
|
+
// Example 1 (reference counting):
|
44
|
+
//
|
45
|
+
// void Unref() {
|
46
|
+
// ANNOTATE_HAPPENS_BEFORE(&refcount_);
|
47
|
+
// if (AtomicDecrementByOne(&refcount_) == 0) {
|
48
|
+
// ANNOTATE_HAPPENS_AFTER(&refcount_);
|
49
|
+
// delete this;
|
50
|
+
// }
|
51
|
+
// }
|
52
|
+
//
|
53
|
+
// Example 2 (message queue):
|
54
|
+
//
|
55
|
+
// void MyQueue::Put(Type *e) {
|
56
|
+
// MutexLock lock(&mu_);
|
57
|
+
// ANNOTATE_HAPPENS_BEFORE(e);
|
58
|
+
// PutElementIntoMyQueue(e);
|
59
|
+
// }
|
60
|
+
//
|
61
|
+
// Type *MyQueue::Get() {
|
62
|
+
// MutexLock lock(&mu_);
|
63
|
+
// Type *e = GetElementFromMyQueue();
|
64
|
+
// ANNOTATE_HAPPENS_AFTER(e);
|
65
|
+
// return e;
|
66
|
+
// }
|
67
|
+
//
|
68
|
+
// Note: when possible, please use the existing reference counting and message
|
69
|
+
// queue implementations instead of inventing new ones.
|
70
|
+
|
71
|
+
// Report that wait on the condition variable at address "cv" has succeeded
|
72
|
+
// and the lock at address "lock" is held.
|
73
|
+
#define ANNOTATE_CONDVAR_LOCK_WAIT(cv, lock) \
|
74
|
+
AnnotateCondVarWait(__FILE__, __LINE__, cv, lock)
|
75
|
+
|
76
|
+
// Report that wait on the condition variable at "cv" has succeeded. Variant
|
77
|
+
// w/o lock.
|
78
|
+
#define ANNOTATE_CONDVAR_WAIT(cv) \
|
79
|
+
AnnotateCondVarWait(__FILE__, __LINE__, cv, NULL)
|
80
|
+
|
81
|
+
// Report that we are about to signal on the condition variable at address
|
82
|
+
// "cv".
|
83
|
+
#define ANNOTATE_CONDVAR_SIGNAL(cv) \
|
84
|
+
AnnotateCondVarSignal(__FILE__, __LINE__, cv)
|
85
|
+
|
86
|
+
// Report that we are about to signal_all on the condition variable at "cv".
|
87
|
+
#define ANNOTATE_CONDVAR_SIGNAL_ALL(cv) \
|
88
|
+
AnnotateCondVarSignalAll(__FILE__, __LINE__, cv)
|
89
|
+
|
90
|
+
// Annotations for user-defined synchronization mechanisms.
|
91
|
+
#define ANNOTATE_HAPPENS_BEFORE(obj) ANNOTATE_CONDVAR_SIGNAL(obj)
|
92
|
+
#define ANNOTATE_HAPPENS_AFTER(obj) ANNOTATE_CONDVAR_WAIT(obj)
|
93
|
+
|
94
|
+
// Report that the bytes in the range [pointer, pointer+size) are about
|
95
|
+
// to be published safely. The race checker will create a happens-before
|
96
|
+
// arc from the call ANNOTATE_PUBLISH_MEMORY_RANGE(pointer, size) to
|
97
|
+
// subsequent accesses to this memory.
|
98
|
+
#define ANNOTATE_PUBLISH_MEMORY_RANGE(pointer, size) \
|
99
|
+
AnnotatePublishMemoryRange(__FILE__, __LINE__, pointer, size)
|
100
|
+
|
101
|
+
// Instruct the tool to create a happens-before arc between mu->Unlock() and
|
102
|
+
// mu->Lock(). This annotation may slow down the race detector; normally it
|
103
|
+
// is used only when it would be difficult to annotate each of the mutex's
|
104
|
+
// critical sections individually using the annotations above.
|
105
|
+
#define ANNOTATE_MUTEX_IS_USED_AS_CONDVAR(mu) \
|
106
|
+
AnnotateMutexIsUsedAsCondVar(__FILE__, __LINE__, mu)
|
107
|
+
|
108
|
+
// -------------------------------------------------------------
|
109
|
+
// Annotations useful when defining memory allocators, or when memory that
|
110
|
+
// was protected in one way starts to be protected in another.
|
111
|
+
|
112
|
+
// Report that a new memory at "address" of size "size" has been allocated.
|
113
|
+
// This might be used when the memory has been retrieved from a free list and
|
114
|
+
// is about to be reused, or when a the locking discipline for a variable
|
115
|
+
// changes.
|
116
|
+
#define ANNOTATE_NEW_MEMORY(address, size) \
|
117
|
+
AnnotateNewMemory(__FILE__, __LINE__, address, size)
|
118
|
+
|
119
|
+
// -------------------------------------------------------------
|
120
|
+
// Annotations useful when defining FIFO queues that transfer data between
|
121
|
+
// threads.
|
122
|
+
|
123
|
+
// Report that the producer-consumer queue (such as ProducerConsumerQueue) at
|
124
|
+
// address "pcq" has been created. The ANNOTATE_PCQ_* annotations
|
125
|
+
// should be used only for FIFO queues. For non-FIFO queues use
|
126
|
+
// ANNOTATE_HAPPENS_BEFORE (for put) and ANNOTATE_HAPPENS_AFTER (for get).
|
127
|
+
#define ANNOTATE_PCQ_CREATE(pcq) \
|
128
|
+
AnnotatePCQCreate(__FILE__, __LINE__, pcq)
|
129
|
+
|
130
|
+
// Report that the queue at address "pcq" is about to be destroyed.
|
131
|
+
#define ANNOTATE_PCQ_DESTROY(pcq) \
|
132
|
+
AnnotatePCQDestroy(__FILE__, __LINE__, pcq)
|
133
|
+
|
134
|
+
// Report that we are about to put an element into a FIFO queue at address
|
135
|
+
// "pcq".
|
136
|
+
#define ANNOTATE_PCQ_PUT(pcq) \
|
137
|
+
AnnotatePCQPut(__FILE__, __LINE__, pcq)
|
138
|
+
|
139
|
+
// Report that we've just got an element from a FIFO queue at address "pcq".
|
140
|
+
#define ANNOTATE_PCQ_GET(pcq) \
|
141
|
+
AnnotatePCQGet(__FILE__, __LINE__, pcq)
|
142
|
+
|
143
|
+
// -------------------------------------------------------------
|
144
|
+
// Annotations that suppress errors. It is usually better to express the
|
145
|
+
// program's synchronization using the other annotations, but these can
|
146
|
+
// be used when all else fails.
|
147
|
+
|
148
|
+
// Report that we may have a benign race on at "address".
|
149
|
+
// Insert at the point where "address" has been allocated, preferably close
|
150
|
+
// to the point where the race happens.
|
151
|
+
// See also ANNOTATE_BENIGN_RACE_STATIC.
|
152
|
+
#define ANNOTATE_BENIGN_RACE(address, description) \
|
153
|
+
AnnotateBenignRace(__FILE__, __LINE__, address, description)
|
154
|
+
|
155
|
+
// Request the analysis tool to ignore all reads in the current thread
|
156
|
+
// until ANNOTATE_IGNORE_READS_END is called.
|
157
|
+
// Useful to ignore intentional racey reads, while still checking
|
158
|
+
// other reads and all writes.
|
159
|
+
// See also ANNOTATE_UNPROTECTED_READ.
|
160
|
+
#define ANNOTATE_IGNORE_READS_BEGIN() \
|
161
|
+
AnnotateIgnoreReadsBegin(__FILE__, __LINE__)
|
162
|
+
|
163
|
+
// Stop ignoring reads.
|
164
|
+
#define ANNOTATE_IGNORE_READS_END() \
|
165
|
+
AnnotateIgnoreReadsEnd(__FILE__, __LINE__)
|
166
|
+
|
167
|
+
// Similar to ANNOTATE_IGNORE_READS_BEGIN, but ignore writes.
|
168
|
+
#define ANNOTATE_IGNORE_WRITES_BEGIN() \
|
169
|
+
AnnotateIgnoreWritesBegin(__FILE__, __LINE__)
|
170
|
+
|
171
|
+
// Stop ignoring writes.
|
172
|
+
#define ANNOTATE_IGNORE_WRITES_END() \
|
173
|
+
AnnotateIgnoreWritesEnd(__FILE__, __LINE__)
|
174
|
+
|
175
|
+
// Start ignoring all memory accesses (reads and writes).
|
176
|
+
#define ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN() \
|
177
|
+
do {\
|
178
|
+
ANNOTATE_IGNORE_READS_BEGIN();\
|
179
|
+
ANNOTATE_IGNORE_WRITES_BEGIN();\
|
180
|
+
}while(0)\
|
181
|
+
|
182
|
+
// Stop ignoring all memory accesses.
|
183
|
+
#define ANNOTATE_IGNORE_READS_AND_WRITES_END() \
|
184
|
+
do {\
|
185
|
+
ANNOTATE_IGNORE_WRITES_END();\
|
186
|
+
ANNOTATE_IGNORE_READS_END();\
|
187
|
+
}while(0)\
|
188
|
+
|
189
|
+
// -------------------------------------------------------------
|
190
|
+
// Annotations useful for debugging.
|
191
|
+
|
192
|
+
// Request to trace every access to "address".
|
193
|
+
#define ANNOTATE_TRACE_MEMORY(address) \
|
194
|
+
AnnotateTraceMemory(__FILE__, __LINE__, address)
|
195
|
+
|
196
|
+
// Report the current thread name to a race detector.
|
197
|
+
#define ANNOTATE_THREAD_NAME(name) \
|
198
|
+
AnnotateThreadName(__FILE__, __LINE__, name)
|
199
|
+
|
200
|
+
// -------------------------------------------------------------
|
201
|
+
// Annotations useful when implementing locks. They are not
|
202
|
+
// normally needed by modules that merely use locks.
|
203
|
+
// The "lock" argument is a pointer to the lock object.
|
204
|
+
|
205
|
+
// Report that a lock has been created at address "lock".
|
206
|
+
#define ANNOTATE_RWLOCK_CREATE(lock) \
|
207
|
+
AnnotateRWLockCreate(__FILE__, __LINE__, lock)
|
208
|
+
|
209
|
+
// Report that the lock at address "lock" is about to be destroyed.
|
210
|
+
#define ANNOTATE_RWLOCK_DESTROY(lock) \
|
211
|
+
AnnotateRWLockDestroy(__FILE__, __LINE__, lock)
|
212
|
+
|
213
|
+
// Report that the lock at address "lock" has been acquired.
|
214
|
+
// is_w=1 for writer lock, is_w=0 for reader lock.
|
215
|
+
#define ANNOTATE_RWLOCK_ACQUIRED(lock, is_w) \
|
216
|
+
AnnotateRWLockAcquired(__FILE__, __LINE__, lock, is_w)
|
217
|
+
|
218
|
+
// Report that the lock at address "lock" is about to be released.
|
219
|
+
#define ANNOTATE_RWLOCK_RELEASED(lock, is_w) \
|
220
|
+
AnnotateRWLockReleased(__FILE__, __LINE__, lock, is_w)
|
221
|
+
|
222
|
+
// -------------------------------------------------------------
|
223
|
+
// Annotations useful for testing race detectors.
|
224
|
+
|
225
|
+
// Report that we expect a race on the variable at "address".
|
226
|
+
// Use only in unit tests for a race detector.
|
227
|
+
#define ANNOTATE_EXPECT_RACE(address, description) \
|
228
|
+
AnnotateExpectRace(__FILE__, __LINE__, address, description)
|
229
|
+
|
230
|
+
// A no-op. Insert where you like to test the interceptors.
|
231
|
+
#define ANNOTATE_NO_OP(arg) \
|
232
|
+
AnnotateNoOp(__FILE__, __LINE__, arg)
|
233
|
+
|
234
|
+
#else // NDEBUG is defined
|
235
|
+
|
236
|
+
#define ANNOTATE_RWLOCK_CREATE(lock) // empty
|
237
|
+
#define ANNOTATE_RWLOCK_DESTROY(lock) // empty
|
238
|
+
#define ANNOTATE_RWLOCK_ACQUIRED(lock, is_w) // empty
|
239
|
+
#define ANNOTATE_RWLOCK_RELEASED(lock, is_w) // empty
|
240
|
+
#define ANNOTATE_CONDVAR_LOCK_WAIT(cv, lock) // empty
|
241
|
+
#define ANNOTATE_CONDVAR_WAIT(cv) // empty
|
242
|
+
#define ANNOTATE_CONDVAR_SIGNAL(cv) // empty
|
243
|
+
#define ANNOTATE_CONDVAR_SIGNAL_ALL(cv) // empty
|
244
|
+
#define ANNOTATE_HAPPENS_BEFORE(obj) // empty
|
245
|
+
#define ANNOTATE_HAPPENS_AFTER(obj) // empty
|
246
|
+
#define ANNOTATE_PUBLISH_MEMORY_RANGE(address, size) // empty
|
247
|
+
#define ANNOTATE_PUBLISH_OBJECT(address) // empty
|
248
|
+
#define ANNOTATE_PCQ_CREATE(pcq) // empty
|
249
|
+
#define ANNOTATE_PCQ_DESTROY(pcq) // empty
|
250
|
+
#define ANNOTATE_PCQ_PUT(pcq) // empty
|
251
|
+
#define ANNOTATE_PCQ_GET(pcq) // empty
|
252
|
+
#define ANNOTATE_NEW_MEMORY(address, size) // empty
|
253
|
+
#define ANNOTATE_EXPECT_RACE(address, description) // empty
|
254
|
+
#define ANNOTATE_BENIGN_RACE(address, description) // empty
|
255
|
+
#define ANNOTATE_MUTEX_IS_USED_AS_CONDVAR(mu) // empty
|
256
|
+
#define ANNOTATE_TRACE_MEMORY(arg) // empty
|
257
|
+
#define ANNOTATE_THREAD_NAME(name) // empty
|
258
|
+
#define ANNOTATE_IGNORE_READS_BEGIN() // empty
|
259
|
+
#define ANNOTATE_IGNORE_READS_END() // empty
|
260
|
+
#define ANNOTATE_IGNORE_WRITES_BEGIN() // empty
|
261
|
+
#define ANNOTATE_IGNORE_WRITES_END() // empty
|
262
|
+
#define ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN() // empty
|
263
|
+
#define ANNOTATE_IGNORE_READS_AND_WRITES_END() // empty
|
264
|
+
#define ANNOTATE_NO_OP(arg) // empty
|
265
|
+
|
266
|
+
#endif // NDEBUG
|
267
|
+
|
268
|
+
// Use the macros above rather than using these functions directly.
|
269
|
+
extern "C" void AnnotateRWLockCreate(const char *file, int line,
|
270
|
+
const volatile void *lock);
|
271
|
+
extern "C" void AnnotateRWLockDestroy(const char *file, int line,
|
272
|
+
const volatile void *lock);
|
273
|
+
extern "C" void AnnotateRWLockAcquired(const char *file, int line,
|
274
|
+
const volatile void *lock, long is_w);
|
275
|
+
extern "C" void AnnotateRWLockReleased(const char *file, int line,
|
276
|
+
const volatile void *lock, long is_w);
|
277
|
+
extern "C" void AnnotateCondVarWait(const char *file, int line,
|
278
|
+
const volatile void *cv,
|
279
|
+
const volatile void *lock);
|
280
|
+
extern "C" void AnnotateCondVarSignal(const char *file, int line,
|
281
|
+
const volatile void *cv);
|
282
|
+
extern "C" void AnnotateCondVarSignalAll(const char *file, int line,
|
283
|
+
const volatile void *cv);
|
284
|
+
extern "C" void AnnotatePublishMemoryRange(const char *file, int line,
|
285
|
+
const volatile void *address,
|
286
|
+
long size);
|
287
|
+
extern "C" void AnnotatePCQCreate(const char *file, int line,
|
288
|
+
const volatile void *pcq);
|
289
|
+
extern "C" void AnnotatePCQDestroy(const char *file, int line,
|
290
|
+
const volatile void *pcq);
|
291
|
+
extern "C" void AnnotatePCQPut(const char *file, int line,
|
292
|
+
const volatile void *pcq);
|
293
|
+
extern "C" void AnnotatePCQGet(const char *file, int line,
|
294
|
+
const volatile void *pcq);
|
295
|
+
extern "C" void AnnotateNewMemory(const char *file, int line,
|
296
|
+
const volatile void *address,
|
297
|
+
long size);
|
298
|
+
extern "C" void AnnotateExpectRace(const char *file, int line,
|
299
|
+
const volatile void *address,
|
300
|
+
const char *description);
|
301
|
+
extern "C" void AnnotateBenignRace(const char *file, int line,
|
302
|
+
const volatile void *address,
|
303
|
+
const char *description);
|
304
|
+
extern "C" void AnnotateMutexIsUsedAsCondVar(const char *file, int line,
|
305
|
+
const volatile void *mu);
|
306
|
+
extern "C" void AnnotateTraceMemory(const char *file, int line,
|
307
|
+
const volatile void *arg);
|
308
|
+
extern "C" void AnnotateThreadName(const char *file, int line,
|
309
|
+
const char *name);
|
310
|
+
extern "C" void AnnotateIgnoreReadsBegin(const char *file, int line);
|
311
|
+
extern "C" void AnnotateIgnoreReadsEnd(const char *file, int line);
|
312
|
+
extern "C" void AnnotateIgnoreWritesBegin(const char *file, int line);
|
313
|
+
extern "C" void AnnotateIgnoreWritesEnd(const char *file, int line);
|
314
|
+
extern "C" void AnnotateNoOp(const char *file, int line,
|
315
|
+
const volatile void *arg);
|
316
|
+
|
317
|
+
#ifndef NDEBUG
|
318
|
+
|
319
|
+
// ANNOTATE_UNPROTECTED_READ is the preferred way to annotate racey reads.
|
320
|
+
//
|
321
|
+
// Instead of doing
|
322
|
+
// ANNOTATE_IGNORE_READS_BEGIN();
|
323
|
+
// ... = x;
|
324
|
+
// ANNOTATE_IGNORE_READS_END();
|
325
|
+
// one can use
|
326
|
+
// ... = ANNOTATE_UNPROTECTED_READ(x);
|
327
|
+
template <class T>
|
328
|
+
inline T ANNOTATE_UNPROTECTED_READ(const volatile T &x) {
|
329
|
+
ANNOTATE_IGNORE_READS_BEGIN();
|
330
|
+
T res = x;
|
331
|
+
ANNOTATE_IGNORE_READS_END();
|
332
|
+
return res;
|
333
|
+
}
|
334
|
+
|
335
|
+
// Apply ANNOTATE_BENIGN_RACE to a static variable.
|
336
|
+
#define ANNOTATE_BENIGN_RACE_STATIC(static_var, description) \
|
337
|
+
namespace { \
|
338
|
+
class static_var ## _annotator { \
|
339
|
+
public: \
|
340
|
+
static_var ## _annotator() { \
|
341
|
+
ANNOTATE_BENIGN_RACE(&static_var, \
|
342
|
+
# static_var ": " description); \
|
343
|
+
} \
|
344
|
+
}; \
|
345
|
+
static static_var ## _annotator the ## static_var ## _annotator;\
|
346
|
+
}
|
347
|
+
#else // !NDEBUG
|
348
|
+
|
349
|
+
#define ANNOTATE_UNPROTECTED_READ(x) (x)
|
350
|
+
#define ANNOTATE_BENIGN_RACE_STATIC(static_var, description) // empty
|
351
|
+
|
352
|
+
#endif // !NDEBUG
|
353
|
+
|
354
|
+
// Return non-zero value if running under valgrind.
|
355
|
+
extern "C" int RunningOnValgrind();
|
356
|
+
|
357
|
+
|
358
|
+
#endif // BASE_DYNAMIC_ANNOTATIONS_H_
|
@@ -0,0 +1,59 @@
|
|
1
|
+
// Copyright (c) 2006-2009 The Chromium Authors. All rights reserved.
|
2
|
+
// Use of this source code is governed by a BSD-style license that can be
|
3
|
+
// found in the LICENSE file.
|
4
|
+
|
5
|
+
// Macros for stripping unnecessary string literals from binaries
|
6
|
+
// (especially for shipping outside of Google).
|
7
|
+
|
8
|
+
#ifndef BASE_GLOBAL_STRIP_OPTIONS_H_
|
9
|
+
#define BASE_GLOBAL_STRIP_OPTIONS_H_
|
10
|
+
|
11
|
+
// The global value of STRIP_LOG. All the messages logged to LOG(XXX)
|
12
|
+
// with severity less than STRIP_LOG will not be displayed. If it can
|
13
|
+
// be determined at compile time that the message will not be printed,
|
14
|
+
// the statement will be compiled out. STRIP_LOG can be set to a value
|
15
|
+
// between 0 and 4 where 0 logs all messages and 4 logs no messages.
|
16
|
+
//
|
17
|
+
// Example: to strip out all INFO and WARNING messages, use the value
|
18
|
+
// of 2 below. To make an exception for WARNING messages from a single
|
19
|
+
// file, add "#define STRIP_LOG 1" to that file _before_ including
|
20
|
+
// base/logging.h
|
21
|
+
//
|
22
|
+
// Example: In addition it's possible to remove the dependency on the base
|
23
|
+
// library if an executable or library currently only depends upon logging.
|
24
|
+
//
|
25
|
+
// # A library that only includes "base/basictypes.h" and "base/logging.h".
|
26
|
+
// cc_library(name = "mylibrary",
|
27
|
+
// srcs = [ "mymodule_that_logs.cc" ],
|
28
|
+
// deps = [ "//base" ])
|
29
|
+
//
|
30
|
+
// The build rule for mylibrary can be modified as shown in the following...
|
31
|
+
//
|
32
|
+
// # A library with logging disabled.
|
33
|
+
// cc_library(name = "mylibrary_no_logging",
|
34
|
+
// srcs = [ "mymodule_that_logs.cc",
|
35
|
+
// "/base:logging.h" ],
|
36
|
+
// deps = [ "//third_party/stl" ],
|
37
|
+
// copts = [ "-DSTRIP_LOG=4" ] )
|
38
|
+
//
|
39
|
+
// Finally if it's desirable to strip all logging from an executable build
|
40
|
+
// using...
|
41
|
+
//
|
42
|
+
// blaze build --copts="-DSTRIP_LOG=4" //mypackage:mylabel
|
43
|
+
|
44
|
+
|
45
|
+
#ifndef STRIP_LOG
|
46
|
+
#define STRIP_LOG 0
|
47
|
+
#endif
|
48
|
+
|
49
|
+
// By setting STRIP_FLAG_HELP to 1, we will replace the usage messages
|
50
|
+
// for command-line flags with "" (thus taking those string literals
|
51
|
+
// out of the binary). To make an exception for flags DEFINE'd in a
|
52
|
+
// certain file, add "#define STRIP_FLAG_HELP 0" to that file _before_
|
53
|
+
// including base/commandlineflags.h
|
54
|
+
|
55
|
+
#ifndef STRIP_FLAG_HELP
|
56
|
+
#define STRIP_FLAG_HELP 0
|
57
|
+
#endif
|
58
|
+
|
59
|
+
#endif // BASE_GLOBAL_STRIP_OPTIONS_H_
|
@@ -0,0 +1,46 @@
|
|
1
|
+
// Copyright (c) 2006-2009 The Chromium Authors. All rights reserved.
|
2
|
+
// Use of this source code is governed by a BSD-style license that can be
|
3
|
+
// found in the LICENSE file.
|
4
|
+
|
5
|
+
#ifndef BASE_LOG_SEVERITY_H_
|
6
|
+
#define BASE_LOG_SEVERITY_H_
|
7
|
+
|
8
|
+
#include "base/port.h"
|
9
|
+
#include "base/commandlineflags.h"
|
10
|
+
|
11
|
+
// Variables of type LogSeverity are widely taken to lie in the range
|
12
|
+
// [0, NUM_SEVERITIES-1]. Be careful to preserve this assumption if
|
13
|
+
// you ever need to change their values or add a new severity.
|
14
|
+
typedef int LogSeverity;
|
15
|
+
|
16
|
+
const int INFO = 0, WARNING = 1, ERROR = 2, FATAL = 3, NUM_SEVERITIES = 4;
|
17
|
+
|
18
|
+
// DFATAL is FATAL in debug mode, ERROR in normal mode
|
19
|
+
#ifdef NDEBUG
|
20
|
+
#define DFATAL_LEVEL ERROR
|
21
|
+
#else
|
22
|
+
#define DFATAL_LEVEL FATAL
|
23
|
+
#endif
|
24
|
+
|
25
|
+
extern const char* const LogSeverityNames[NUM_SEVERITIES];
|
26
|
+
|
27
|
+
// Some flags needed for VLOG and RAW_VLOG
|
28
|
+
DECLARE_int32(v);
|
29
|
+
DECLARE_bool(silent_init);
|
30
|
+
|
31
|
+
// NDEBUG usage helpers related to (RAW_)DCHECK:
|
32
|
+
//
|
33
|
+
// DEBUG_MODE is for small !NDEBUG uses like
|
34
|
+
// if (DEBUG_MODE) foo.CheckThatFoo();
|
35
|
+
// instead of substantially more verbose
|
36
|
+
// #ifndef NDEBUG
|
37
|
+
// foo.CheckThatFoo();
|
38
|
+
// #endif
|
39
|
+
//
|
40
|
+
#ifdef NDEBUG
|
41
|
+
enum { DEBUG_MODE = 0 };
|
42
|
+
#else
|
43
|
+
enum { DEBUG_MODE = 1 };
|
44
|
+
#endif
|
45
|
+
|
46
|
+
#endif // BASE_LOG_SEVERITY_H_
|