diff options
| author | Chia-I Wu <olvaffe@gmail.com> | 2014-08-16 12:43:53 +0800 |
|---|---|---|
| committer | Chia-I Wu <olvaffe@gmail.com> | 2014-08-16 12:48:09 +0800 |
| commit | 16ba34e8d9f971c20ae69d4acf63ceedb5eafdca (patch) | |
| tree | 37b66000e4c5ab0da0c0ab9c8cbc241bf13e6034 | |
| parent | aaf8be14fe0283a70eb99dceb902903533dda590 (diff) | |
| download | usermoji-16ba34e8d9f971c20ae69d4acf63ceedb5eafdca.tar.xz | |
icd: add common utility functions
| -rw-r--r-- | icd/common/icd-utils.h | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/icd/common/icd-utils.h b/icd/common/icd-utils.h new file mode 100644 index 00000000..c6008520 --- /dev/null +++ b/icd/common/icd-utils.h @@ -0,0 +1,56 @@ +/* + * XGL + * + * Copyright (C) 2014 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#ifndef ICD_UTILS_H +#define ICD_UTILS_H + +#include <assert.h> +#include "icd.h" + +#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0])) + +#define STATIC_ASSERT(expr) do { \ + (void) sizeof(char[1 - 2 * !(expr)]); \ +} while (0) + +/** + * Return true if val is power of two, or zero. + */ +static inline bool u_is_pow2(unsigned int val) +{ + return ((val & (val - 1)) == 0); +} + +static inline unsigned int u_align(unsigned int val, unsigned alignment) +{ + assert(alignment && u_is_pow2(alignment)); + return (val + alignment - 1) & ~(alignment - 1); +} + +static inline unsigned int u_minify(unsigned int val, unsigned level) +{ + return (val >> level) ? val >> level : 1; +} + +#endif /* ICD_UTILS_H */ |
