// 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_
