| // Copyright 2019 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SRC_GRAPHICS_LIB_COMPUTE_COMMON_UTIL_H_ |
| #define SRC_GRAPHICS_LIB_COMPUTE_COMMON_UTIL_H_ |
| |
| // |
| // |
| // |
| |
| #include <stdbool.h> |
| #include <stddef.h> |
| #include <stdint.h> |
| |
| // |
| // |
| // |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| // |
| // |
| // |
| |
| // Return true iff |n| is a power of 2. |
| bool |
| is_pow2_u32(uint32_t n); |
| |
| // Return |n| rounded-up to the nearest power of 2. |
| // If |n| is zero then return 0. |
| // REQUIRES: |n <= 0x80000000|. |
| uint32_t |
| pow2_ru_u32(uint32_t n); |
| |
| // Return |n| rounded-down to the nearest power of 2. |
| // REQUIRES: |n > 0|. |
| uint32_t |
| pow2_rd_u32(uint32_t n); |
| |
| // Return the most-significant bit position for |n|. |
| // REQUIRES: |n > 0|. |
| uint32_t |
| msb_idx_u32(uint32_t n); // 0-based bit position |
| |
| // |
| // 1. Invoke malloc()/calloc(). |
| // 2. Assert that the return result is not NULL. |
| // 3. Return the result. |
| // |
| // The assert() macro and its semantics are defined in <assert.h>. |
| // |
| void * |
| malloc_assert(size_t size); |
| |
| void * |
| calloc_assert(size_t num, size_t size); |
| |
| // |
| // |
| // |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| // |
| // |
| // |
| |
| #endif // SRC_GRAPHICS_LIB_COMPUTE_COMMON_UTIL_H_ |