bionic_macros.h revision 27047faf283cb9d3d025a984cd9934fd2c404407
11a5a3217595b183deee7a31b25e77eeed707e381Kenny Root/* 21a5a3217595b183deee7a31b25e77eeed707e381Kenny Root * Copyright (C) 2010 The Android Open Source Project 31a5a3217595b183deee7a31b25e77eeed707e381Kenny Root * 41a5a3217595b183deee7a31b25e77eeed707e381Kenny Root * Licensed under the Apache License, Version 2.0 (the "License"); 51a5a3217595b183deee7a31b25e77eeed707e381Kenny Root * you may not use this file except in compliance with the License. 61a5a3217595b183deee7a31b25e77eeed707e381Kenny Root * You may obtain a copy of the License at 71a5a3217595b183deee7a31b25e77eeed707e381Kenny Root * 81a5a3217595b183deee7a31b25e77eeed707e381Kenny Root * http://www.apache.org/licenses/LICENSE-2.0 91a5a3217595b183deee7a31b25e77eeed707e381Kenny Root * 101a5a3217595b183deee7a31b25e77eeed707e381Kenny Root * Unless required by applicable law or agreed to in writing, software 111a5a3217595b183deee7a31b25e77eeed707e381Kenny Root * distributed under the License is distributed on an "AS IS" BASIS, 121a5a3217595b183deee7a31b25e77eeed707e381Kenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131a5a3217595b183deee7a31b25e77eeed707e381Kenny Root * See the License for the specific language governing permissions and 141a5a3217595b183deee7a31b25e77eeed707e381Kenny Root * limitations under the License. 151a5a3217595b183deee7a31b25e77eeed707e381Kenny Root */ 161a5a3217595b183deee7a31b25e77eeed707e381Kenny Root 171a44d5dcabc18cd5ef111f732ccff91683a1a093Neal Nguyen#ifndef _BIONIC_MACROS_H_ 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define _BIONIC_MACROS_H_ 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// DISALLOW_COPY_AND_ASSIGN disallows the copy and operator= functions. 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// It goes in the private: declarations in a class. 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define DISALLOW_COPY_AND_ASSIGN(TypeName) \ 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TypeName(const TypeName&); \ 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void operator=(const TypeName&) 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// A macro to disallow all the implicit constructors, namely the 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// default constructor, copy constructor and operator= functions. 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// This should be used in the private: declarations for a class 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// that wants to prevent anyone from instantiating it. This is 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// especially useful for classes containing only static methods. 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define DISALLOW_IMPLICIT_CONSTRUCTORS(TypeName) \ 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TypeName(); \ 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DISALLOW_COPY_AND_ASSIGN(TypeName) 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define BIONIC_ALIGN(value, alignment) \ 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (((value) + (alignment) - 1) & ~((alignment) - 1)) 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define BIONIC_ROUND_UP_POWER_OF_2(value) \ 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (sizeof(value) == 8) \ 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ? (1UL << (64 - __builtin_clzl(static_cast<unsigned long>(value)))) \ 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : (1UL << (32 - __builtin_clz(static_cast<unsigned int>(value)))) 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif // _BIONIC_MACROS_H_ 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project