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