OLD | NEW |
1 /* Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 /* Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 * Use of this source code is governed by a BSD-style license that can be | 2 * Use of this source code is governed by a BSD-style license that can be |
3 * found in the LICENSE file. | 3 * found in the LICENSE file. |
4 */ | 4 */ |
5 #ifndef LIBRARIES_UTILS_MACROS_H_ | 5 #ifndef LIBRARIES_UTILS_MACROS_H_ |
6 #define LIBRARIES_UTILS_MACROS_H_ | 6 #define LIBRARIES_UTILS_MACROS_H_ |
7 | 7 |
8 /** | 8 /** |
9 * A macro to disallow the evil copy constructor and operator= functions | 9 * A macro to disallow the evil copy constructor and operator= functions |
10 * This should be used in the private: declarations for a class. | 10 * This should be used in the private: declarations for a class. |
11 */ | 11 */ |
12 #define DISALLOW_COPY_AND_ASSIGN(TypeName) \ | 12 #define DISALLOW_COPY_AND_ASSIGN(TypeName) \ |
13 TypeName(const TypeName&); \ | 13 TypeName(const TypeName&); \ |
14 void operator=(const TypeName&) | 14 void operator=(const TypeName&) |
15 | 15 |
16 /** returns the size of a member of a struct. */ | 16 /** returns the size of a member of a struct. */ |
17 #define MEMBER_SIZE(struct_name, member) sizeof(((struct_name*)0)->member) | 17 #define MEMBER_SIZE(struct_name, member) sizeof(((struct_name*)0)->member) |
18 | 18 |
19 /** | 19 /** |
20 * Macros to prevent name mangling of defnitions, allowing them to be | 20 * Macros to prevent name mangling of definitions, allowing them to be |
21 * referenced from C. | 21 * referenced from C. |
22 */ | 22 */ |
23 #ifdef __cplusplus | 23 #ifdef __cplusplus |
24 # define EXTERN_C_BEGIN extern "C" { | 24 # define EXTERN_C_BEGIN extern "C" { |
25 # define EXTERN_C_END } | 25 # define EXTERN_C_END } |
26 #else | 26 #else |
27 # define EXTERN_C_BEGIN | 27 # define EXTERN_C_BEGIN |
28 # define EXTERN_C_END | 28 # define EXTERN_C_END |
29 #endif /* __cplusplus */ | 29 #endif /* __cplusplus */ |
30 | 30 |
31 /** | 31 /** |
32 * Macros to help force linkage of symbols that otherwise would not be | 32 * Macros to help force linkage of symbols that otherwise would not be |
33 * included. | 33 * included. |
34 * | 34 * |
35 * // In a source file that you want to force linkage (file scope): | 35 * // In a source file that you want to force linkage (file scope): |
36 * FORCE_LINK_THIS(myfilename); | 36 * FORCE_LINK_THIS(myfilename); |
37 * | 37 * |
38 * // In a source file that you are sure will be linked (file scope): | 38 * // In a source file that you are sure will be linked (file scope): |
39 * FORCE_LINK_THAT(myfilename) | 39 * FORCE_LINK_THAT(myfilename) |
40 * | 40 * |
41 */ | 41 */ |
42 #define FORCE_LINK_THIS(x) int force_link_##x = 0; | 42 #define FORCE_LINK_THIS(x) int force_link_##x = 0; |
43 #define FORCE_LINK_THAT(x) \ | 43 #define FORCE_LINK_THAT(x) \ |
44 void force_link_function_##x() { \ | 44 void force_link_function_##x() { \ |
45 extern int force_link_##x; \ | 45 extern int force_link_##x; \ |
46 force_link_##x = 1; \ | 46 force_link_##x = 1; \ |
47 } | 47 } |
48 | 48 |
49 #endif /* LIBRARIES_UTILS_MACROS_H_ */ | 49 #endif /* LIBRARIES_UTILS_MACROS_H_ */ |
OLD | NEW |