chris@162
|
1 /**
|
chris@162
|
2 * Copyright (c) 2014, 2015, Enzien Audio Ltd.
|
chris@162
|
3 *
|
chris@162
|
4 * Permission to use, copy, modify, and/or distribute this software for any
|
chris@162
|
5 * purpose with or without fee is hereby granted, provided that the above
|
chris@162
|
6 * copyright notice and this permission notice appear in all copies.
|
chris@162
|
7 *
|
chris@162
|
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
chris@162
|
9 * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
chris@162
|
10 * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
chris@162
|
11 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
chris@162
|
12 * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
chris@162
|
13 * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
chris@162
|
14 * PERFORMANCE OF THIS SOFTWARE.
|
chris@162
|
15 */
|
chris@162
|
16
|
chris@162
|
17 #include "Utils_windows.h"
|
chris@162
|
18
|
chris@162
|
19 #if HV_WIN
|
chris@162
|
20
|
chris@162
|
21 hv_size_t hv_max_ui(hv_size_t x, hv_size_t y) {
|
chris@162
|
22 return (x >= y) ? x : y;
|
chris@162
|
23 }
|
chris@162
|
24
|
chris@162
|
25 hv_size_t hv_min_ui(hv_size_t x, hv_size_t y) {
|
chris@162
|
26 return (x <= y) ? x : y;
|
chris@162
|
27 }
|
chris@162
|
28
|
chris@162
|
29 int hv_max_i(int x, int y) {
|
chris@162
|
30 return (x >= y) ? x : y;
|
chris@162
|
31 }
|
chris@162
|
32
|
chris@162
|
33 int hv_min_i(int x, int y) {
|
chris@162
|
34 return (x <= y) ? x : y;
|
chris@162
|
35 }
|
chris@162
|
36
|
chris@162
|
37 hv_uint32_t hv_min_max_log2(hv_uint32_t x) {
|
chris@162
|
38 #if HV_MSVC
|
chris@162
|
39 // finds ceil(log2(x))
|
chris@162
|
40 // http://stackoverflow.com/questions/2589096/find-most-significant-bit-left-most-that-is-set-in-a-bit-array
|
chris@162
|
41 // http://msdn.microsoft.com/en-us/library/fbxyd7zd%28v=VS.80%29.aspx
|
chris@162
|
42 unsigned long z = 0;
|
chris@162
|
43 _BitScanReverse(&z, x);
|
chris@162
|
44 return (hv_uint32_t) (z+1);
|
chris@162
|
45 #else
|
chris@162
|
46 return (hv_uint32_t) ((8 * sizeof(unsigned int)) - __builtin_clz(x-1));
|
chris@162
|
47 #endif // HV_MSVC
|
chris@162
|
48 }
|
chris@162
|
49
|
chris@162
|
50 #if HV_MSVC
|
chris@162
|
51 int hv_snprintf(char* str, hv_size_t size, const char* format, ...) {
|
chris@162
|
52 // http://stackoverflow.com/questions/2915672/snprintf-and-visual-studio-2010
|
chris@162
|
53 int count = -1;
|
chris@162
|
54 va_list ap;
|
chris@162
|
55 va_start(ap, format);
|
chris@162
|
56
|
chris@162
|
57 if (size != 0) {
|
chris@162
|
58 count = _vsnprintf_s(str, size, _TRUNCATE, format, ap);
|
chris@162
|
59 }
|
chris@162
|
60 if (count == -1) {
|
chris@162
|
61 count = _vscprintf(format, ap);
|
chris@162
|
62 }
|
chris@162
|
63 va_end(ap);
|
chris@162
|
64 return count;
|
chris@162
|
65 }
|
chris@162
|
66 #endif // HV_MSVC
|
chris@162
|
67 #endif // HV_WIN
|
chris@162
|
68
|