xref: /aosp_15_r20/external/regex-re2/util/util.h (revision ccdc9c3e24c519bfa4832a66aa2e83a52c19f295)
1*ccdc9c3eSSadaf Ebrahimi // Copyright 2009 The RE2 Authors.  All Rights Reserved.
2*ccdc9c3eSSadaf Ebrahimi // Use of this source code is governed by a BSD-style
3*ccdc9c3eSSadaf Ebrahimi // license that can be found in the LICENSE file.
4*ccdc9c3eSSadaf Ebrahimi 
5*ccdc9c3eSSadaf Ebrahimi #ifndef UTIL_UTIL_H_
6*ccdc9c3eSSadaf Ebrahimi #define UTIL_UTIL_H_
7*ccdc9c3eSSadaf Ebrahimi 
8*ccdc9c3eSSadaf Ebrahimi // TODO(junyer): Get rid of this.
9*ccdc9c3eSSadaf Ebrahimi #include <string>
10*ccdc9c3eSSadaf Ebrahimi using std::string;
11*ccdc9c3eSSadaf Ebrahimi 
12*ccdc9c3eSSadaf Ebrahimi #define arraysize(array) (int)(sizeof(array)/sizeof((array)[0]))
13*ccdc9c3eSSadaf Ebrahimi 
14*ccdc9c3eSSadaf Ebrahimi #ifndef ATTRIBUTE_NORETURN
15*ccdc9c3eSSadaf Ebrahimi #if defined(__GNUC__)
16*ccdc9c3eSSadaf Ebrahimi #define ATTRIBUTE_NORETURN __attribute__((noreturn))
17*ccdc9c3eSSadaf Ebrahimi #elif defined(_MSC_VER)
18*ccdc9c3eSSadaf Ebrahimi #define ATTRIBUTE_NORETURN __declspec(noreturn)
19*ccdc9c3eSSadaf Ebrahimi #else
20*ccdc9c3eSSadaf Ebrahimi #define ATTRIBUTE_NORETURN
21*ccdc9c3eSSadaf Ebrahimi #endif
22*ccdc9c3eSSadaf Ebrahimi #endif
23*ccdc9c3eSSadaf Ebrahimi 
24*ccdc9c3eSSadaf Ebrahimi #ifndef FALLTHROUGH_INTENDED
25*ccdc9c3eSSadaf Ebrahimi #if defined(__clang__)
26*ccdc9c3eSSadaf Ebrahimi #define FALLTHROUGH_INTENDED [[clang::fallthrough]]
27*ccdc9c3eSSadaf Ebrahimi #elif defined(__GNUC__) && __GNUC__ >= 7
28*ccdc9c3eSSadaf Ebrahimi #define FALLTHROUGH_INTENDED [[gnu::fallthrough]]
29*ccdc9c3eSSadaf Ebrahimi #else
30*ccdc9c3eSSadaf Ebrahimi #define FALLTHROUGH_INTENDED do {} while (0)
31*ccdc9c3eSSadaf Ebrahimi #endif
32*ccdc9c3eSSadaf Ebrahimi #endif
33*ccdc9c3eSSadaf Ebrahimi 
34*ccdc9c3eSSadaf Ebrahimi #ifndef NO_THREAD_SAFETY_ANALYSIS
35*ccdc9c3eSSadaf Ebrahimi #define NO_THREAD_SAFETY_ANALYSIS
36*ccdc9c3eSSadaf Ebrahimi #endif
37*ccdc9c3eSSadaf Ebrahimi 
38*ccdc9c3eSSadaf Ebrahimi #endif  // UTIL_UTIL_H_
39