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