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_SDK_UTIL_MACROS_H_ 6#define LIBRARIES_SDK_UTIL_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_SDK_UTIL_MACROS_H_ */ 50