diff options
Diffstat (limited to 'source/blender/blenlib/intern')
60 files changed, 910 insertions, 702 deletions
diff --git a/source/blender/blenlib/intern/BLI_args.c b/source/blender/blenlib/intern/BLI_args.c index 61447ab1a9e..ceb7f7f0aba 100644 --- a/source/blender/blenlib/intern/BLI_args.c +++ b/source/blender/blenlib/intern/BLI_args.c @@ -57,7 +57,7 @@ static uint case_strhash(const void *ptr) { const char *s = ptr; uint i = 0; - unsigned char c; + uchar c; while ((c = tolower(*s++))) { i = i * 37 + c; @@ -80,7 +80,7 @@ static bool keycmp(const void *a, const void *b) if (ka->case_str == 1 || kb->case_str == 1) { return (BLI_strcasecmp(ka->arg, kb->arg) != 0); } - return (!STREQ(ka->arg, kb->arg)); + return !STREQ(ka->arg, kb->arg); } return BLI_ghashutil_intcmp((const void *)ka->pass, (const void *)kb->pass); } diff --git a/source/blender/blenlib/intern/BLI_filelist.c b/source/blender/blenlib/intern/BLI_filelist.c index c6178ebb3a0..4bcb023691a 100644 --- a/source/blender/blenlib/intern/BLI_filelist.c +++ b/source/blender/blenlib/intern/BLI_filelist.c @@ -93,7 +93,7 @@ static int bli_compare(struct direntry *entry1, struct direntry *entry2) return 1; } - return (BLI_strcasecmp_natural(entry1->relname, entry2->relname)); + return BLI_strcasecmp_natural(entry1->relname, entry2->relname); } struct BuildDirCtx { @@ -174,10 +174,10 @@ static void bli_builddir(struct BuildDirCtx *dir_ctx, const char *dirname) struct direntry *file = &dir_ctx->files[dir_ctx->files_num]; while (dlink) { char fullname[PATH_MAX]; + BLI_path_join(fullname, sizeof(fullname), dirname, dlink->name); memset(file, 0, sizeof(struct direntry)); file->relname = dlink->name; - file->path = BLI_strdupcat(dirname, dlink->name); - BLI_join_dirfile(fullname, sizeof(fullname), dirname, dlink->name); + file->path = BLI_strdup(fullname); if (BLI_stat(fullname, &file->s) != -1) { file->type = file->s.st_mode; } @@ -215,7 +215,7 @@ static void bli_builddir(struct BuildDirCtx *dir_ctx, const char *dirname) } } -unsigned int BLI_filelist_dir_contents(const char *dirname, struct direntry **r_filelist) +uint BLI_filelist_dir_contents(const char *dirname, struct direntry **r_filelist) { struct BuildDirCtx dir_ctx; @@ -395,9 +395,9 @@ void BLI_filelist_entry_duplicate(struct direntry *dst, const struct direntry *s void BLI_filelist_duplicate(struct direntry **dest_filelist, struct direntry *const src_filelist, - const unsigned int nrentries) + const uint nrentries) { - unsigned int i; + uint i; *dest_filelist = MEM_mallocN(sizeof(**dest_filelist) * (size_t)(nrentries), __func__); for (i = 0; i < nrentries; i++) { @@ -417,9 +417,9 @@ void BLI_filelist_entry_free(struct direntry *entry) } } -void BLI_filelist_free(struct direntry *filelist, const unsigned int nrentries) +void BLI_filelist_free(struct direntry *filelist, const uint nrentries) { - unsigned int i; + uint i; for (i = 0; i < nrentries; i++) { BLI_filelist_entry_free(&filelist[i]); } diff --git a/source/blender/blenlib/intern/BLI_ghash_utils.c b/source/blender/blenlib/intern/BLI_ghash_utils.c index e12e272832f..806d58df260 100644 --- a/source/blender/blenlib/intern/BLI_ghash_utils.c +++ b/source/blender/blenlib/intern/BLI_ghash_utils.c @@ -63,7 +63,7 @@ uint BLI_ghashutil_uinthash_v4(const uint key[4]) uint BLI_ghashutil_uinthash_v4_murmur(const uint key[4]) { - return BLI_hash_mm2((const unsigned char *)key, sizeof(int[4]) /* sizeof(key) */, 0); + return BLI_hash_mm2((const uchar *)key, sizeof(int[4]) /* sizeof(key) */, 0); } bool BLI_ghashutil_uinthash_v4_cmp(const void *a, const void *b) @@ -101,7 +101,7 @@ uint BLI_ghashutil_inthash_p_murmur(const void *ptr) { uintptr_t key = (uintptr_t)ptr; - return BLI_hash_mm2((const unsigned char *)&key, sizeof(key), 0); + return BLI_hash_mm2((const uchar *)&key, sizeof(key), 0); } uint BLI_ghashutil_inthash_p_simple(const void *ptr) @@ -143,7 +143,7 @@ uint BLI_ghashutil_strhash_p(const void *ptr) } uint BLI_ghashutil_strhash_p_murmur(const void *ptr) { - const unsigned char *key = ptr; + const uchar *key = ptr; return BLI_hash_mm2(key, strlen((const char *)key) + 1, 0); } diff --git a/source/blender/blenlib/intern/BLI_kdopbvh.c b/source/blender/blenlib/intern/BLI_kdopbvh.c index a43b725b6e3..de71147f015 100644 --- a/source/blender/blenlib/intern/BLI_kdopbvh.c +++ b/source/blender/blenlib/intern/BLI_kdopbvh.c @@ -58,7 +58,7 @@ /** \name Struct Definitions * \{ */ -typedef unsigned char axis_t; +typedef uchar axis_t; typedef struct BVHNode { struct BVHNode **children; @@ -386,12 +386,12 @@ static void refit_kdop_hull(const BVHTree *tree, BVHNode *node, int start, int e /* for all Axes. */ for (axis_iter = tree->start_axis; axis_iter < tree->stop_axis; axis_iter++) { newmin = node_bv[(2 * axis_iter)]; - if ((newmin < bv[(2 * axis_iter)])) { + if (newmin < bv[(2 * axis_iter)]) { bv[(2 * axis_iter)] = newmin; } newmax = node_bv[(2 * axis_iter) + 1]; - if ((newmax > bv[(2 * axis_iter) + 1])) { + if (newmax > bv[(2 * axis_iter) + 1]) { bv[(2 * axis_iter) + 1] = newmax; } } diff --git a/source/blender/blenlib/intern/BLI_memarena.c b/source/blender/blenlib/intern/BLI_memarena.c index ada2d27f9b2..3c353a1c8c8 100644 --- a/source/blender/blenlib/intern/BLI_memarena.c +++ b/source/blender/blenlib/intern/BLI_memarena.c @@ -38,7 +38,7 @@ struct MemBuf { }; struct MemArena { - unsigned char *curbuf; + uchar *curbuf; const char *name; struct MemBuf *bufs; @@ -53,7 +53,7 @@ static void memarena_buf_free_all(struct MemBuf *mb) while (mb != NULL) { struct MemBuf *mb_next = mb->next; - /* Unpoison memory because MEM_freeN might overwrite it. */ + /* Unpoison memory because #MEM_freeN might overwrite it. */ BLI_asan_unpoison(mb, (uint)MEM_allocN_len(mb)); MEM_freeN(mb); @@ -106,9 +106,9 @@ void BLI_memarena_free(MemArena *ma) /** Align alloc'ed memory (needed if `align > 8`). */ static void memarena_curbuf_align(MemArena *ma) { - unsigned char *tmp; + uchar *tmp; - tmp = (unsigned char *)PADUP((intptr_t)ma->curbuf, (int)ma->align); + tmp = (uchar *)PADUP((intptr_t)ma->curbuf, (int)ma->align); ma->cursize -= (size_t)(tmp - ma->curbuf); ma->curbuf = tmp; } @@ -209,7 +209,7 @@ void BLI_memarena_merge(MemArena *ma_dst, MemArena *ma_src) void BLI_memarena_clear(MemArena *ma) { if (ma->bufs) { - unsigned char *curbuf_prev; + uchar *curbuf_prev; size_t curbuf_used; if (ma->bufs->next) { diff --git a/source/blender/blenlib/intern/array_store.c b/source/blender/blenlib/intern/array_store.c index 9a8bda48c8d..65518427656 100644 --- a/source/blender/blenlib/intern/array_store.c +++ b/source/blender/blenlib/intern/array_store.c @@ -736,17 +736,17 @@ static void bchunk_list_fill_from_array(const BArrayInfo *info, BLI_INLINE uint hash_data_single(const uchar p) { - return ((HASH_INIT << 5) + HASH_INIT) + (unsigned int)(*((signed char *)&p)); + return ((HASH_INIT << 5) + HASH_INIT) + (uint)(*((signed char *)&p)); } /* hash bytes, from BLI_ghashutil_strhash_n */ static uint hash_data(const uchar *key, size_t n) { const signed char *p; - unsigned int h = HASH_INIT; + uint h = HASH_INIT; for (p = (const signed char *)key; n--; p++) { - h = ((h << 5) + h) + (unsigned int)*p; + h = (uint)((h << 5) + h) + (uint)*p; } return h; @@ -805,7 +805,7 @@ static void hash_array_from_cref(const BArrayInfo *info, static void hash_accum(hash_key *hash_array, const size_t hash_array_len, size_t iter_steps) { /* _very_ unlikely, can happen if you select a chunk-size of 1 for example. */ - if (UNLIKELY((iter_steps > hash_array_len))) { + if (UNLIKELY(iter_steps > hash_array_len)) { iter_steps = hash_array_len; } @@ -1403,7 +1403,7 @@ BArrayStore *BLI_array_store_create(uint stride, uint chunk_count) /* Triangle number, identifying now much read-ahead we need: * https://en.wikipedia.org/wiki/Triangular_number (+ 1) */ bs->info.accum_read_ahead_len = - (uint)((((bs->info.accum_steps * (bs->info.accum_steps + 1))) / 2) + 1); + (uint)(((bs->info.accum_steps * (bs->info.accum_steps + 1)) / 2) + 1); bs->info.accum_read_ahead_bytes = bs->info.accum_read_ahead_len * stride; #else bs->info.accum_read_ahead_bytes = BCHUNK_HASH_LEN * stride; diff --git a/source/blender/blenlib/intern/array_store_utils.c b/source/blender/blenlib/intern/array_store_utils.c index 9ac8630204a..51b5ce0519f 100644 --- a/source/blender/blenlib/intern/array_store_utils.c +++ b/source/blender/blenlib/intern/array_store_utils.c @@ -27,9 +27,9 @@ BArrayStore *BLI_array_store_at_size_ensure(struct BArrayStore_AtSize *bs_stride if ((*bs_p) == NULL) { /* calculate best chunk-count to fit a power of two */ - unsigned int chunk_count = chunk_size; + uint chunk_count = chunk_size; { - unsigned int size = chunk_count * stride; + uint size = chunk_count * stride; size = power_of_2_max_u(size); size = MEM_SIZE_OPTIMAL(size); chunk_count = size / stride; diff --git a/source/blender/blenlib/intern/array_utils.cc b/source/blender/blenlib/intern/array_utils.cc new file mode 100644 index 00000000000..2a231228dcb --- /dev/null +++ b/source/blender/blenlib/intern/array_utils.cc @@ -0,0 +1,36 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#include "BLI_array_utils.hh" + +namespace blender::array_utils { + +void copy(const GVArray &src, + const IndexMask selection, + GMutableSpan dst, + const int64_t grain_size) +{ + BLI_assert(src.type() == dst.type()); + BLI_assert(src.size() == dst.size()); + threading::parallel_for(selection.index_range(), grain_size, [&](const IndexRange range) { + src.materialize_to_uninitialized(selection.slice(range), dst.data()); + }); +} + +void gather(const GVArray &src, + const IndexMask indices, + GMutableSpan dst, + const int64_t grain_size) +{ + BLI_assert(src.type() == dst.type()); + BLI_assert(indices.size() == dst.size()); + threading::parallel_for(indices.index_range(), grain_size, [&](const IndexRange range) { + src.materialize_compressed_to_uninitialized(indices.slice(range), dst.slice(range).data()); + }); +} + +void gather(const GSpan src, const IndexMask indices, GMutableSpan dst, const int64_t grain_size) +{ + gather(GVArray::ForSpan(src), indices, dst, grain_size); +} + +} // namespace blender::array_utils diff --git a/source/blender/blenlib/intern/boxpack_2d.c b/source/blender/blenlib/intern/boxpack_2d.c index d55a4a8c9ff..309ae624305 100644 --- a/source/blender/blenlib/intern/boxpack_2d.c +++ b/source/blender/blenlib/intern/boxpack_2d.c @@ -491,7 +491,7 @@ void BLI_box_pack_2d(BoxPack *boxarray, const uint len, float *r_tot_x, float *r * flag verts on one or both of the boxes * as being used by checking the width or * height of both boxes */ - if (vert->tlb && vert->trb && (ELEM(box, vert->tlb, vert->trb))) { + if (vert->tlb && vert->trb && ELEM(box, vert->tlb, vert->trb)) { if (UNLIKELY(fabsf(vert->tlb->h - vert->trb->h) < EPSILON_MERGE)) { #ifdef USE_MERGE # define A (vert->trb->v[TL]) @@ -522,7 +522,7 @@ void BLI_box_pack_2d(BoxPack *boxarray, const uint len, float *r_tot_x, float *r vert->tlb->v[TR]->free &= ~(TRF | BRF); } } - else if (vert->blb && vert->brb && (ELEM(box, vert->blb, vert->brb))) { + else if (vert->blb && vert->brb && ELEM(box, vert->blb, vert->brb)) { if (UNLIKELY(fabsf(vert->blb->h - vert->brb->h) < EPSILON_MERGE)) { #ifdef USE_MERGE # define A (vert->blb->v[BR]) @@ -554,7 +554,7 @@ void BLI_box_pack_2d(BoxPack *boxarray, const uint len, float *r_tot_x, float *r } } /* Horizontal */ - if (vert->tlb && vert->blb && (ELEM(box, vert->tlb, vert->blb))) { + if (vert->tlb && vert->blb && ELEM(box, vert->tlb, vert->blb)) { if (UNLIKELY(fabsf(vert->tlb->w - vert->blb->w) < EPSILON_MERGE)) { #ifdef USE_MERGE # define A (vert->blb->v[TL]) @@ -585,7 +585,7 @@ void BLI_box_pack_2d(BoxPack *boxarray, const uint len, float *r_tot_x, float *r vert->tlb->v[BL]->free &= ~(BLF | BRF); } } - else if (vert->trb && vert->brb && (ELEM(box, vert->trb, vert->brb))) { + else if (vert->trb && vert->brb && ELEM(box, vert->trb, vert->brb)) { if (UNLIKELY(fabsf(vert->trb->w - vert->brb->w) < EPSILON_MERGE)) { #ifdef USE_MERGE diff --git a/source/blender/blenlib/intern/cache_mutex.cc b/source/blender/blenlib/intern/cache_mutex.cc new file mode 100644 index 00000000000..db474b1ef87 --- /dev/null +++ b/source/blender/blenlib/intern/cache_mutex.cc @@ -0,0 +1,25 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#include "BLI_cache_mutex.hh" +#include "BLI_task.hh" + +namespace blender { + +void CacheMutex::ensure(const FunctionRef<void()> compute_cache) +{ + if (cache_valid_.load(std::memory_order_acquire)) { + return; + } + std::scoped_lock lock{mutex_}; + /* Double checked lock. */ + if (cache_valid_.load(std::memory_order_relaxed)) { + return; + } + /* Use task isolation because a mutex is locked and the cache computation might use + * multi-threading. */ + threading::isolate_task(compute_cache); + + cache_valid_.store(true, std::memory_order_release); +} + +} // namespace blender diff --git a/source/blender/blenlib/intern/convexhull_2d.c b/source/blender/blenlib/intern/convexhull_2d.c index 33d1a68a76e..9e3fb230d3c 100644 --- a/source/blender/blenlib/intern/convexhull_2d.c +++ b/source/blender/blenlib/intern/convexhull_2d.c @@ -39,8 +39,9 @@ static float is_left(const float p0[2], const float p1[2], const float p2[2]) return (p1[0] - p0[0]) * (p2[1] - p0[1]) - (p2[0] - p0[0]) * (p1[1] - p0[1]); } -int BLI_convexhull_2d_sorted(const float (*points)[2], const int n, int r_points[]) +static int BLI_convexhull_2d_sorted(const float (*points)[2], const int n, int r_points[]) { + BLI_assert(n >= 2); /* Doesn't handle trivial cases. */ /* the output array r_points[] will be used as the stack */ int bot = 0; int top = -1; /* indices for bottom and top of the stack */ @@ -66,6 +67,7 @@ int BLI_convexhull_2d_sorted(const float (*points)[2], const int n, int r_points r_points[++top] = minmax; } r_points[++top] = minmin; /* add polygon endpoint */ + BLI_assert(top + 1 <= n); return top + 1; } @@ -122,16 +124,18 @@ int BLI_convexhull_2d_sorted(const float (*points)[2], const int n, int r_points } if (points[i][0] == points[r_points[0]][0] && points[i][1] == points[r_points[0]][1]) { + BLI_assert(top + 1 <= n); return top + 1; /* special case (mgomes) */ } r_points[++top] = i; /* push points[i] onto stack */ } - if (minmax != minmin) { + if (minmax != minmin && r_points[0] != minmin) { r_points[++top] = minmin; /* push joining endpoint onto stack */ } + BLI_assert(top + 1 <= n); return top + 1; } @@ -162,35 +166,38 @@ static int pointref_cmp_yx(const void *a_, const void *b_) int BLI_convexhull_2d(const float (*points)[2], const int n, int r_points[]) { + BLI_assert(n >= 0); + if (n < 2) { + if (n == 1) { + r_points[0] = 0; + } + return n; + } struct PointRef *points_ref = MEM_mallocN(sizeof(*points_ref) * (size_t)n, __func__); float(*points_sort)[2] = MEM_mallocN(sizeof(*points_sort) * (size_t)n, __func__); - int *points_map; - int points_hull_num, i; - for (i = 0; i < n; i++) { + for (int i = 0; i < n; i++) { points_ref[i].pt = points[i]; } - /* Sort the points by X, then by Y (required by the algorithm) */ + /* Sort the points by X, then by Y. */ qsort(points_ref, (size_t)n, sizeof(struct PointRef), pointref_cmp_yx); - for (i = 0; i < n; i++) { + for (int i = 0; i < n; i++) { memcpy(points_sort[i], points_ref[i].pt, sizeof(float[2])); } - points_hull_num = BLI_convexhull_2d_sorted(points_sort, n, r_points); + int points_hull_num = BLI_convexhull_2d_sorted(points_sort, n, r_points); - /* map back to the original index values */ - points_map = (int *)points_sort; /* abuse float array for temp storage */ - for (i = 0; i < points_hull_num; i++) { - points_map[i] = (int)((const float(*)[2])points_ref[r_points[i]].pt - points); + /* Map back to the unsorted index values. */ + for (int i = 0; i < points_hull_num; i++) { + r_points[i] = (int)((const float(*)[2])points_ref[r_points[i]].pt - points); } - memcpy(r_points, points_map, (size_t)points_hull_num * sizeof(*points_map)); - MEM_freeN(points_ref); MEM_freeN(points_sort); + BLI_assert(points_hull_num <= n); return points_hull_num; } @@ -202,14 +209,13 @@ int BLI_convexhull_2d(const float (*points)[2], const int n, int r_points[]) /** \name Utility Convex-Hull Functions * \{ */ -float BLI_convexhull_aabb_fit_hull_2d(const float (*points_hull)[2], unsigned int n) +static float BLI_convexhull_aabb_fit_hull_2d(const float (*points_hull)[2], int n) { - unsigned int i, i_prev; float area_best = FLT_MAX; float dvec_best[2]; /* best angle, delay atan2 */ - i_prev = n - 1; - for (i = 0; i < n; i++) { + int i_prev = n - 1; + for (int i = 0; i < n; i++) { const float *ev_a = points_hull[i]; const float *ev_b = points_hull[i_prev]; float dvec[2]; /* 2d rotation matrix */ @@ -218,10 +224,9 @@ float BLI_convexhull_aabb_fit_hull_2d(const float (*points_hull)[2], unsigned in if (normalize_v2(dvec) != 0.0f) { /* rotation matrix */ float min[2] = {FLT_MAX, FLT_MAX}, max[2] = {-FLT_MAX, -FLT_MAX}; - unsigned int j; float area; - for (j = 0; j < n; j++) { + for (int j = 0; j < n; j++) { float tvec[2]; mul_v2_v2_cw(tvec, dvec, points_hull[j]); @@ -249,32 +254,24 @@ float BLI_convexhull_aabb_fit_hull_2d(const float (*points_hull)[2], unsigned in return (area_best != FLT_MAX) ? atan2f(dvec_best[0], dvec_best[1]) : 0.0f; } -float BLI_convexhull_aabb_fit_points_2d(const float (*points)[2], unsigned int n) +float BLI_convexhull_aabb_fit_points_2d(const float (*points)[2], int n) { - int *index_map; - int points_hull_num; + BLI_assert(n >= 0); + float angle = 0.0f; - float angle; + int *index_map = MEM_mallocN(sizeof(*index_map) * (size_t)n, __func__); - index_map = MEM_mallocN(sizeof(*index_map) * n * 2, __func__); + int points_hull_num = BLI_convexhull_2d(points, n, index_map); - points_hull_num = BLI_convexhull_2d(points, (int)n, index_map); - - if (points_hull_num) { - float(*points_hull)[2]; - int j; - - points_hull = MEM_mallocN(sizeof(*points_hull) * (size_t)points_hull_num, __func__); - for (j = 0; j < points_hull_num; j++) { + if (points_hull_num > 1) { + float(*points_hull)[2] = MEM_mallocN(sizeof(*points_hull) * (size_t)points_hull_num, __func__); + for (int j = 0; j < points_hull_num; j++) { copy_v2_v2(points_hull[j], points[index_map[j]]); } - angle = BLI_convexhull_aabb_fit_hull_2d(points_hull, (unsigned int)points_hull_num); + angle = BLI_convexhull_aabb_fit_hull_2d(points_hull, points_hull_num); MEM_freeN(points_hull); } - else { - angle = 0.0f; - } MEM_freeN(index_map); diff --git a/source/blender/blenlib/intern/delaunay_2d.cc b/source/blender/blenlib/intern/delaunay_2d.cc index db6cb0824dc..afecf9ea838 100644 --- a/source/blender/blenlib/intern/delaunay_2d.cc +++ b/source/blender/blenlib/intern/delaunay_2d.cc @@ -45,7 +45,7 @@ template<> double math_abs<double>(const double v) return fabs(v); } -template<typename T> double math_to_double(const T UNUSED(v)) +template<typename T> double math_to_double(const T /*v*/) { BLI_assert(false); /* Need implementation for other type. */ return 0.0; @@ -520,10 +520,10 @@ template<typename T> void cdt_draw(const std::string &label, const CDTArrangemen double height = maxy - miny; double aspect = height / width; int view_width = max_draw_width; - int view_height = static_cast<int>(view_width * aspect); + int view_height = int(view_width * aspect); if (view_height > max_draw_height) { view_height = max_draw_height; - view_width = static_cast<int>(view_height / aspect); + view_width = int(view_height / aspect); } double scale = view_width / width; @@ -2645,7 +2645,7 @@ void prepare_cdt_for_output(CDT_state<T> *cdt_state, const CDT_output_type outpu template<typename T> CDT_result<T> get_cdt_output(CDT_state<T> *cdt_state, - const CDT_input<T> UNUSED(input), + const CDT_input<T> /*input*/, CDT_output_type output_type) { CDT_output_type oty = output_type; @@ -2822,8 +2822,8 @@ extern "C" ::CDT_result *BLI_delaunay_2d_cdt_calc(const ::CDT_input *input, in.edge = blender::Array<std::pair<int, int>>(input->edges_len); in.face = blender::Array<blender::Vector<int>>(input->faces_len); for (int v = 0; v < input->verts_len; ++v) { - double x = static_cast<double>(input->vert_coords[v][0]); - double y = static_cast<double>(input->vert_coords[v][1]); + double x = double(input->vert_coords[v][0]); + double y = double(input->vert_coords[v][1]); in.vert[v] = blender::meshintersect::vec2<double>(x, y); } for (int e = 0; e < input->edges_len; ++e) { @@ -2836,7 +2836,7 @@ extern "C" ::CDT_result *BLI_delaunay_2d_cdt_calc(const ::CDT_input *input, in.face[f][j] = input->faces[fstart + j]; } } - in.epsilon = static_cast<double>(input->epsilon); + in.epsilon = double(input->epsilon); in.need_ids = input->need_ids; blender::meshintersect::CDT_result<double> res = blender::meshintersect::delaunay_2d_calc( @@ -2903,8 +2903,8 @@ extern "C" ::CDT_result *BLI_delaunay_2d_cdt_calc(const ::CDT_input *input, int v_orig_index = 0; for (int v = 0; v < nv; ++v) { - output->vert_coords[v][0] = static_cast<float>(res.vert[v][0]); - output->vert_coords[v][1] = static_cast<float>(res.vert[v][1]); + output->vert_coords[v][0] = float(res.vert[v][0]); + output->vert_coords[v][1] = float(res.vert[v][1]); if (input->need_ids) { int this_start = v_orig_index; output->verts_orig_start_table[v] = this_start; diff --git a/source/blender/blenlib/intern/dot_export.cc b/source/blender/blenlib/intern/dot_export.cc index 796fd6a934a..d577de9bc34 100644 --- a/source/blender/blenlib/intern/dot_export.cc +++ b/source/blender/blenlib/intern/dot_export.cc @@ -93,7 +93,7 @@ void Graph::set_random_cluster_bgcolors() void Cluster::set_random_cluster_bgcolors() { - float hue = rand() / (float)RAND_MAX; + float hue = rand() / float(RAND_MAX); float staturation = 0.3f; float value = 0.8f; this->attributes.set("bgcolor", color_attr_from_hsv(hue, staturation, value)); @@ -227,7 +227,7 @@ void Attributes::export__as_bracket_list(std::stringstream &ss) const void Node::export__as_id(std::stringstream &ss) const { - ss << '"' << (uintptr_t)this << '"'; + ss << '"' << uintptr_t(this) << '"'; } void Node::export__as_declaration(std::stringstream &ss) const diff --git a/source/blender/blenlib/intern/endian_switch.c b/source/blender/blenlib/intern/endian_switch.c index 10d0bfb815b..c1a5b69fb23 100644 --- a/source/blender/blenlib/intern/endian_switch.c +++ b/source/blender/blenlib/intern/endian_switch.c @@ -18,7 +18,7 @@ void BLI_endian_switch_int16_array(short *val, const int size) } } -void BLI_endian_switch_uint16_array(unsigned short *val, const int size) +void BLI_endian_switch_uint16_array(ushort *val, const int size) { if (size > 0) { int i = size; @@ -38,7 +38,7 @@ void BLI_endian_switch_int32_array(int *val, const int size) } } -void BLI_endian_switch_uint32_array(unsigned int *val, const int size) +void BLI_endian_switch_uint32_array(uint *val, const int size) { if (size > 0) { int i = size; diff --git a/source/blender/blenlib/intern/fileops.c b/source/blender/blenlib/intern/fileops.c index 3abd482d6b3..005de1f85b4 100644 --- a/source/blender/blenlib/intern/fileops.c +++ b/source/blender/blenlib/intern/fileops.c @@ -401,7 +401,7 @@ static bool delete_recursive(const char *dir) /* dir listing produces dir path without trailing slash... */ BLI_strncpy(path, fl->path, sizeof(path)); - BLI_path_slash_ensure(path); + BLI_path_slash_ensure(path, sizeof(path)); if (delete_recursive(path)) { err = true; @@ -627,7 +627,7 @@ static void join_dirfile_alloc(char **dst, size_t *alloc_len, const char *dir, c *alloc_len = len; - BLI_join_dirfile(*dst, len + 1, dir, file); + BLI_path_join(*dst, len + 1, dir, file); } static char *strip_last_slash(const char *dir) @@ -1184,7 +1184,7 @@ static const char *check_destination(const char *file, const char *to) len = strlen(to) + strlen(filename) + 1; path = MEM_callocN(len + 1, "check_destination path"); - BLI_join_dirfile(path, len + 1, to, filename); + BLI_path_join(path, len + 1, to, filename); MEM_freeN(str); diff --git a/source/blender/blenlib/intern/generic_virtual_array.cc b/source/blender/blenlib/intern/generic_virtual_array.cc index f66b1e14fc6..b0623175dc7 100644 --- a/source/blender/blenlib/intern/generic_virtual_array.cc +++ b/source/blender/blenlib/intern/generic_virtual_array.cc @@ -51,7 +51,7 @@ CommonVArrayInfo GVArrayImpl::common_info() const return {}; } -bool GVArrayImpl::try_assign_VArray(void *UNUSED(varray)) const +bool GVArrayImpl::try_assign_VArray(void * /*varray*/) const { return false; } @@ -102,7 +102,7 @@ void GVMutableArray::fill(const void *value) } } -bool GVMutableArrayImpl::try_assign_VMutableArray(void *UNUSED(varray)) const +bool GVMutableArrayImpl::try_assign_VMutableArray(void * /*varray*/) const { return false; } @@ -172,11 +172,11 @@ void GVArrayImpl_For_GSpan::materialize_compressed_to_uninitialized(const IndexM /* Generic virtual array where each element has the same value. The value is not owned. */ -void GVArrayImpl_For_SingleValueRef::get(const int64_t UNUSED(index), void *r_value) const +void GVArrayImpl_For_SingleValueRef::get(const int64_t /*index*/, void *r_value) const { type_->copy_assign(value_, r_value); } -void GVArrayImpl_For_SingleValueRef::get_to_uninitialized(const int64_t UNUSED(index), +void GVArrayImpl_For_SingleValueRef::get_to_uninitialized(const int64_t /*index*/, void *r_value) const { type_->copy_construct(value_, r_value); @@ -261,11 +261,11 @@ template<int BufferSize> class GVArrayImpl_For_SmallTrivialSingleValue : public } private: - void get(const int64_t UNUSED(index), void *r_value) const override + void get(const int64_t /*index*/, void *r_value) const override { this->copy_value_to(r_value); } - void get_to_uninitialized(const int64_t UNUSED(index), void *r_value) const override + void get_to_uninitialized(const int64_t /*index*/, void *r_value) const override { this->copy_value_to(r_value); } diff --git a/source/blender/blenlib/intern/generic_virtual_vector_array.cc b/source/blender/blenlib/intern/generic_virtual_vector_array.cc index 8fd1fb50b72..5d6985e16c8 100644 --- a/source/blender/blenlib/intern/generic_virtual_vector_array.cc +++ b/source/blender/blenlib/intern/generic_virtual_vector_array.cc @@ -16,12 +16,12 @@ void GVArray_For_GVVectorArrayIndex::get_to_uninitialized(const int64_t index_in vector_array_.get_vector_element(index_, index_in_vector, r_value); } -int64_t GVVectorArray_For_SingleGVArray::get_vector_size_impl(const int64_t UNUSED(index)) const +int64_t GVVectorArray_For_SingleGVArray::get_vector_size_impl(const int64_t /*index*/) const { return varray_.size(); } -void GVVectorArray_For_SingleGVArray::get_vector_element_impl(const int64_t UNUSED(index), +void GVVectorArray_For_SingleGVArray::get_vector_element_impl(const int64_t /*index*/, const int64_t index_in_vector, void *r_value) const { @@ -33,12 +33,12 @@ bool GVVectorArray_For_SingleGVArray::is_single_vector_impl() const return true; } -int64_t GVVectorArray_For_SingleGSpan::get_vector_size_impl(const int64_t UNUSED(index)) const +int64_t GVVectorArray_For_SingleGSpan::get_vector_size_impl(const int64_t /*index*/) const { return span_.size(); } -void GVVectorArray_For_SingleGSpan::get_vector_element_impl(const int64_t UNUSED(index), +void GVVectorArray_For_SingleGSpan::get_vector_element_impl(const int64_t /*index*/, const int64_t index_in_vector, void *r_value) const { diff --git a/source/blender/blenlib/intern/hash_mm2a.c b/source/blender/blenlib/intern/hash_mm2a.c index 8411b49ef38..d13c20e4edb 100644 --- a/source/blender/blenlib/intern/hash_mm2a.c +++ b/source/blender/blenlib/intern/hash_mm2a.c @@ -41,7 +41,7 @@ } \ (void)0 -static void mm2a_mix_tail(BLI_HashMurmur2A *mm2, const unsigned char **data, size_t *len) +static void mm2a_mix_tail(BLI_HashMurmur2A *mm2, const uchar **data, size_t *len) { while (*len && ((*len < 4) || mm2->count)) { mm2->tail |= (uint32_t)(**data) << (mm2->count * 8); @@ -66,7 +66,7 @@ void BLI_hash_mm2a_init(BLI_HashMurmur2A *mm2, uint32_t seed) mm2->size = 0; } -void BLI_hash_mm2a_add(BLI_HashMurmur2A *mm2, const unsigned char *data, size_t len) +void BLI_hash_mm2a_add(BLI_HashMurmur2A *mm2, const uchar *data, size_t len) { mm2->size += (uint32_t)len; @@ -83,7 +83,7 @@ void BLI_hash_mm2a_add(BLI_HashMurmur2A *mm2, const unsigned char *data, size_t void BLI_hash_mm2a_add_int(BLI_HashMurmur2A *mm2, int data) { - BLI_hash_mm2a_add(mm2, (const unsigned char *)&data, sizeof(data)); + BLI_hash_mm2a_add(mm2, (const uchar *)&data, sizeof(data)); } uint32_t BLI_hash_mm2a_end(BLI_HashMurmur2A *mm2) @@ -96,7 +96,7 @@ uint32_t BLI_hash_mm2a_end(BLI_HashMurmur2A *mm2) return mm2->hash; } -uint32_t BLI_hash_mm2(const unsigned char *data, size_t len, uint32_t seed) +uint32_t BLI_hash_mm2(const uchar *data, size_t len, uint32_t seed) { /* Initialize the hash to a 'random' value */ uint32_t h = seed ^ len; diff --git a/source/blender/blenlib/intern/hash_mm3.c b/source/blender/blenlib/intern/hash_mm3.c index cc1143bf55f..3c05ead5e62 100644 --- a/source/blender/blenlib/intern/hash_mm3.c +++ b/source/blender/blenlib/intern/hash_mm3.c @@ -69,7 +69,7 @@ BLI_INLINE uint64_t fmix64(uint64_t k) return k; } -uint32_t BLI_hash_mm3(const unsigned char *data, size_t len, uint32_t seed) +uint32_t BLI_hash_mm3(const uchar *data, size_t len, uint32_t seed) { const uint8_t *in_data = (const uint8_t *)data; const int nblocks = len / 4; diff --git a/source/blender/blenlib/intern/jitter_2d.c b/source/blender/blenlib/intern/jitter_2d.c index 8fa0f2c1e15..4b86f3cfeef 100644 --- a/source/blender/blenlib/intern/jitter_2d.c +++ b/source/blender/blenlib/intern/jitter_2d.c @@ -70,7 +70,7 @@ void BLI_jitterate1(float (*jit1)[2], float (*jit2)[2], int num, float radius1) jit2[i][0] = x; jit2[i][1] = y; } - memcpy(jit1, jit2, 2 * (unsigned int)num * sizeof(float)); + memcpy(jit1, jit2, 2 * (uint)num * sizeof(float)); } void BLI_jitterate2(float (*jit1)[2], float (*jit2)[2], int num, float radius2) @@ -120,7 +120,7 @@ void BLI_jitterate2(float (*jit1)[2], float (*jit2)[2], int num, float radius2) jit2[i][0] = x; jit2[i][1] = y; } - memcpy(jit1, jit2, (unsigned int)num * sizeof(float[2])); + memcpy(jit1, jit2, (uint)num * sizeof(float[2])); } void BLI_jitter_init(float (*jitarr)[2], int num) @@ -138,12 +138,12 @@ void BLI_jitter_init(float (*jitarr)[2], int num) number_fl = (float)num; number_fl_sqrt = sqrtf(number_fl); - jit2 = MEM_mallocN(12 + (unsigned int)num * sizeof(float[2]), "initjit"); + jit2 = MEM_mallocN(12 + (uint)num * sizeof(float[2]), "initjit"); rad1 = 1.0f / number_fl_sqrt; rad2 = 1.0f / number_fl; rad3 = number_fl_sqrt / number_fl; - rng = BLI_rng_new(31415926 + (unsigned int)num); + rng = BLI_rng_new(31415926 + (uint)num); x = 0; for (i = 0; i < num; i++) { diff --git a/source/blender/blenlib/intern/kdtree_impl.h b/source/blender/blenlib/intern/kdtree_impl.h index 6614f1bf964..f7993eb5adc 100644 --- a/source/blender/blenlib/intern/kdtree_impl.h +++ b/source/blender/blenlib/intern/kdtree_impl.h @@ -11,9 +11,9 @@ #include "BLI_strict_flags.h" #include "BLI_utildefines.h" -#define _CONCAT_AUX(MACRO_ARG1, MACRO_ARG2) MACRO_ARG1##MACRO_ARG2 -#define _CONCAT(MACRO_ARG1, MACRO_ARG2) _CONCAT_AUX(MACRO_ARG1, MACRO_ARG2) -#define BLI_kdtree_nd_(id) _CONCAT(KDTREE_PREFIX_ID, _##id) +#define _BLI_KDTREE_CONCAT_AUX(MACRO_ARG1, MACRO_ARG2) MACRO_ARG1##MACRO_ARG2 +#define _BLI_KDTREE_CONCAT(MACRO_ARG1, MACRO_ARG2) _BLI_KDTREE_CONCAT_AUX(MACRO_ARG1, MACRO_ARG2) +#define BLI_kdtree_nd_(id) _BLI_KDTREE_CONCAT(KDTREE_PREFIX_ID, _##id) typedef struct KDTreeNode_head { uint left, right; diff --git a/source/blender/blenlib/intern/lasso_2d.c b/source/blender/blenlib/intern/lasso_2d.c index 13b0e416b76..4752864ea3a 100644 --- a/source/blender/blenlib/intern/lasso_2d.c +++ b/source/blender/blenlib/intern/lasso_2d.c @@ -12,9 +12,9 @@ #include "BLI_lasso_2d.h" /* own include */ -void BLI_lasso_boundbox(rcti *rect, const int mcoords[][2], const unsigned int mcoords_len) +void BLI_lasso_boundbox(rcti *rect, const int mcoords[][2], const uint mcoords_len) { - unsigned int a; + uint a; rect->xmin = rect->xmax = mcoords[0][0]; rect->ymin = rect->ymax = mcoords[0][1]; @@ -36,7 +36,7 @@ void BLI_lasso_boundbox(rcti *rect, const int mcoords[][2], const unsigned int m } bool BLI_lasso_is_point_inside(const int mcoords[][2], - const unsigned int mcoords_len, + const uint mcoords_len, const int sx, const int sy, const int error_value) @@ -50,7 +50,7 @@ bool BLI_lasso_is_point_inside(const int mcoords[][2], } bool BLI_lasso_is_edge_inside(const int mcoords[][2], - const unsigned int mcoords_len, + const uint mcoords_len, int x0, int y0, int x1, @@ -77,7 +77,7 @@ bool BLI_lasso_is_edge_inside(const int mcoords[][2], if (isect_seg_seg_v2_int(mcoords[0], mcoords[mcoords_len - 1], v1, v2) > 0) { return true; } - for (unsigned int a = 0; a < mcoords_len - 1; a++) { + for (uint a = 0; a < mcoords_len - 1; a++) { if (isect_seg_seg_v2_int(mcoords[a], mcoords[a + 1], v1, v2) > 0) { return true; } diff --git a/source/blender/blenlib/intern/lazy_threading.cc b/source/blender/blenlib/intern/lazy_threading.cc new file mode 100644 index 00000000000..4f6d3a75ecc --- /dev/null +++ b/source/blender/blenlib/intern/lazy_threading.cc @@ -0,0 +1,50 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#include "BLI_lazy_threading.hh" +#include "BLI_stack.hh" +#include "BLI_vector.hh" + +namespace blender::lazy_threading { + +/** + * This uses a "raw" stack and vector so that it can be destructed after Blender checks for memory + * leaks. A new list of receivers is created whenever an isolated region is entered to avoid + * deadlocks. + */ +using HintReceivers = RawStack<RawVector<FunctionRef<void()>, 0>, 0>; +thread_local HintReceivers hint_receivers = []() { + HintReceivers receivers; + /* Make sure there is always at least one vector. */ + receivers.push_as(); + return receivers; +}(); + +void send_hint() +{ + for (const FunctionRef<void()> &fn : hint_receivers.peek()) { + fn(); + } +} + +HintReceiver::HintReceiver(const FunctionRef<void()> fn) +{ + hint_receivers.peek().append(fn); +} + +HintReceiver::~HintReceiver() +{ + hint_receivers.peek().pop_last(); +} + +ReceiverIsolation::ReceiverIsolation() +{ + hint_receivers.push_as(); +} + +ReceiverIsolation::~ReceiverIsolation() +{ + BLI_assert(hint_receivers.peek().is_empty()); + hint_receivers.pop(); +} + +} // namespace blender::lazy_threading diff --git a/source/blender/blenlib/intern/list_sort_impl.h b/source/blender/blenlib/intern/list_sort_impl.h index e1b93986f4a..7c38fc60b29 100644 --- a/source/blender/blenlib/intern/list_sort_impl.h +++ b/source/blender/blenlib/intern/list_sort_impl.h @@ -47,24 +47,25 @@ #endif #ifdef SORT_IMPL_USE_THUNK -# define THUNK_APPEND1(a, thunk) a, thunk -# define THUNK_PREPEND2(thunk, a, b) thunk, a, b +# define BLI_LIST_THUNK_APPEND1(a, thunk) a, thunk +# define BLI_LIST_THUNK_PREPEND2(thunk, a, b) thunk, a, b #else -# define THUNK_APPEND1(a, thunk) a -# define THUNK_PREPEND2(thunk, a, b) a, b +# define BLI_LIST_THUNK_APPEND1(a, thunk) a +# define BLI_LIST_THUNK_PREPEND2(thunk, a, b) a, b #endif -#define _CONCAT_AUX(MACRO_ARG1, MACRO_ARG2) MACRO_ARG1##MACRO_ARG2 -#define _CONCAT(MACRO_ARG1, MACRO_ARG2) _CONCAT_AUX(MACRO_ARG1, MACRO_ARG2) -#define _SORT_PREFIX(id) _CONCAT(SORT_IMPL_FUNC, _##id) +#define _BLI_LIST_SORT_CONCAT_AUX(MACRO_ARG1, MACRO_ARG2) MACRO_ARG1##MACRO_ARG2 +#define _BLI_LIST_SORT_CONCAT(MACRO_ARG1, MACRO_ARG2) \ + _BLI_LIST_SORT_CONCAT_AUX(MACRO_ARG1, MACRO_ARG2) +#define _BLI_LIST_SORT_PREFIX(id) _BLI_LIST_SORT_CONCAT(SORT_IMPL_FUNC, _##id) /* local identifiers */ -#define SortInfo _SORT_PREFIX(SortInfo) -#define CompareFn _SORT_PREFIX(CompareFn) -#define init_sort_info _SORT_PREFIX(init_sort_info) -#define merge_lists _SORT_PREFIX(merge_lists) -#define sweep_up _SORT_PREFIX(sweep_up) -#define insert_list _SORT_PREFIX(insert_list) +#define SortInfo _BLI_LIST_SORT_PREFIX(SortInfo) +#define CompareFn _BLI_LIST_SORT_PREFIX(CompareFn) +#define init_sort_info _BLI_LIST_SORT_PREFIX(init_sort_info) +#define merge_lists _BLI_LIST_SORT_PREFIX(merge_lists) +#define sweep_up _BLI_LIST_SORT_PREFIX(sweep_up) +#define insert_list _BLI_LIST_SORT_PREFIX(insert_list) typedef int (*CompareFn)( #ifdef SORT_IMPL_USE_THUNK @@ -159,7 +160,7 @@ BLI_INLINE list_node *merge_lists(list_node *first, list_node *list = NULL; list_node **pos = &list; while (first && second) { - if (func(THUNK_PREPEND2(thunk, SORT_ARG(first), SORT_ARG(second))) > 0) { + if (func(BLI_LIST_THUNK_PREPEND2(thunk, SORT_ARG(first), SORT_ARG(second))) > 0) { *pos = second; second = second->next; } @@ -181,7 +182,7 @@ BLI_INLINE list_node *sweep_up(struct SortInfo *si, list_node *list, unsigned in { unsigned int i; for (i = si->min_rank; i < upto; i++) { - list = merge_lists(si->ranks[i], list, THUNK_APPEND1(si->func, si->thunk)); + list = merge_lists(si->ranks[i], list, BLI_LIST_THUNK_APPEND1(si->func, si->thunk)); si->ranks[i] = NULL; } return list; @@ -225,17 +226,19 @@ BLI_INLINE void insert_list(struct SortInfo *si, list_node *list, unsigned int r // printf("Rank '%d' should not exceed " STRINGIFY(MAX_RANKS), rank); rank = MAX_RANKS; } - list = merge_lists(sweep_up(si, NULL, si->n_ranks), list, THUNK_APPEND1(si->func, si->thunk)); + list = merge_lists( + sweep_up(si, NULL, si->n_ranks), list, BLI_LIST_THUNK_APPEND1(si->func, si->thunk)); for (i = si->n_ranks; i < rank; i++) { si->ranks[i] = NULL; } } else { if (rank) { - list = merge_lists(sweep_up(si, NULL, rank), list, THUNK_APPEND1(si->func, si->thunk)); + list = merge_lists( + sweep_up(si, NULL, rank), list, BLI_LIST_THUNK_APPEND1(si->func, si->thunk)); } for (i = rank; i < si->n_ranks && si->ranks[i]; i++) { - list = merge_lists(si->ranks[i], list, THUNK_APPEND1(si->func, si->thunk)); + list = merge_lists(si->ranks[i], list, BLI_LIST_THUNK_APPEND1(si->func, si->thunk)); si->ranks[i] = NULL; } } @@ -281,7 +284,7 @@ BLI_INLINE list_node *list_sort_do(list_node *list, list_node *next = list->next; list_node *tail = next->next; - if (func(THUNK_PREPEND2(thunk, SORT_ARG(list), SORT_ARG(next))) > 0) { + if (func(BLI_LIST_THUNK_PREPEND2(thunk, SORT_ARG(list), SORT_ARG(next))) > 0) { next->next = list; next = list; list = list->next; @@ -296,8 +299,8 @@ BLI_INLINE list_node *list_sort_do(list_node *list, return sweep_up(&si, list, si.n_ranks); } -#undef _CONCAT_AUX -#undef _CONCAT +#undef _BLI_LIST_SORT_CONCAT_AUX +#undef _BLI_LIST_SORT_CONCAT #undef _SORT_PREFIX #undef SortInfo @@ -310,6 +313,6 @@ BLI_INLINE list_node *list_sort_do(list_node *list, #undef list_node #undef list_sort_do -#undef THUNK_APPEND1 -#undef THUNK_PREPEND2 +#undef BLI_LIST_THUNK_APPEND1 +#undef BLI_LIST_THUNK_PREPEND2 #undef SORT_ARG diff --git a/source/blender/blenlib/intern/math_base.c b/source/blender/blenlib/intern/math_base.c index 257153dc6fe..8a791030fce 100644 --- a/source/blender/blenlib/intern/math_base.c +++ b/source/blender/blenlib/intern/math_base.c @@ -65,7 +65,7 @@ float floor_power_of_10(float f) { BLI_assert(!(f < 0.0f)); if (f != 0.0f) { - return 1.0f / (powf(10.0f, ceilf(log10f(1.0f / f)))); + return 1.0f / powf(10.0f, ceilf(log10f(1.0f / f))); } return 0.0f; } @@ -74,7 +74,7 @@ float ceil_power_of_10(float f) { BLI_assert(!(f < 0.0f)); if (f != 0.0f) { - return 1.0f / (powf(10.0f, floorf(log10f(1.0f / f)))); + return 1.0f / powf(10.0f, floorf(log10f(1.0f / f))); } return 0.0f; } diff --git a/source/blender/blenlib/intern/math_boolean.cc b/source/blender/blenlib/intern/math_boolean.cc index 132d5dfda65..e5352540dd6 100644 --- a/source/blender/blenlib/intern/math_boolean.cc +++ b/source/blender/blenlib/intern/math_boolean.cc @@ -193,7 +193,7 @@ static RobustInitCaller init_caller; y = b - bvirt #define Fast_Two_Sum(a, b, x, y) \ - x = (double)(a + b); \ + x = double(a + b); \ Fast_Two_Sum_Tail(a, b, x, y) #define Fast_Two_Diff_Tail(a, b, x, y) \ @@ -205,30 +205,30 @@ static RobustInitCaller init_caller; Fast_Two_Diff_Tail(a, b, x, y) #define Two_Sum_Tail(a, b, x, y) \ - bvirt = (double)(x - a); \ + bvirt = double(x - a); \ avirt = x - bvirt; \ bround = b - bvirt; \ around = a - avirt; \ y = around + bround #define Two_Sum(a, b, x, y) \ - x = (double)(a + b); \ + x = double(a + b); \ Two_Sum_Tail(a, b, x, y) #define Two_Diff_Tail(a, b, x, y) \ - bvirt = (double)(a - x); \ + bvirt = double(a - x); \ avirt = x + bvirt; \ bround = bvirt - b; \ around = a - avirt; \ y = around + bround #define Two_Diff(a, b, x, y) \ - x = (double)(a - b); \ + x = double(a - b); \ Two_Diff_Tail(a, b, x, y) #define Split(a, ahi, alo) \ - c = (double)(splitter * a); \ - abig = (double)(c - a); \ + c = double(splitter * a); \ + abig = double(c - a); \ ahi = c - abig; \ alo = a - ahi @@ -241,11 +241,11 @@ static RobustInitCaller init_caller; y = (alo * blo) - err3 #define Two_Product(a, b, x, y) \ - x = (double)(a * b); \ + x = double(a * b); \ Two_Product_Tail(a, b, x, y) #define Two_Product_Presplit(a, b, bhi, blo, x, y) \ - x = (double)(a * b); \ + x = double(a * b); \ Split(a, ahi, alo); \ err1 = x - (ahi * bhi); \ err2 = err1 - (alo * bhi); \ @@ -266,7 +266,7 @@ static RobustInitCaller init_caller; y = (alo * alo) - err3 #define Square(a, x, y) \ - x = (double)(a * a); \ + x = double(a * a); \ Square_Tail(a, x, y) #define Two_One_Sum(a1, a0, b, x2, x1, x0) \ @@ -647,10 +647,10 @@ static double orient2dadapt(const double *pa, const double *pb, const double *pc INEXACT double _i, _j; double _0; - acx = (double)(pa[0] - pc[0]); - bcx = (double)(pb[0] - pc[0]); - acy = (double)(pa[1] - pc[1]); - bcy = (double)(pb[1] - pc[1]); + acx = double(pa[0] - pc[0]); + bcx = double(pb[0] - pc[0]); + acy = double(pa[1] - pc[1]); + bcy = double(pb[1] - pc[1]); Two_Product(acx, bcy, detleft, detlefttail); Two_Product(acy, bcx, detright, detrighttail); @@ -834,15 +834,15 @@ static double orient3dadapt( INEXACT double _i, _j, _k; double _0; - adx = (double)(pa[0] - pd[0]); - bdx = (double)(pb[0] - pd[0]); - cdx = (double)(pc[0] - pd[0]); - ady = (double)(pa[1] - pd[1]); - bdy = (double)(pb[1] - pd[1]); - cdy = (double)(pc[1] - pd[1]); - adz = (double)(pa[2] - pd[2]); - bdz = (double)(pb[2] - pd[2]); - cdz = (double)(pc[2] - pd[2]); + adx = double(pa[0] - pd[0]); + bdx = double(pb[0] - pd[0]); + cdx = double(pc[0] - pd[0]); + ady = double(pa[1] - pd[1]); + bdy = double(pb[1] - pd[1]); + cdy = double(pc[1] - pd[1]); + adz = double(pa[2] - pd[2]); + bdz = double(pb[2] - pd[2]); + cdz = double(pc[2] - pd[2]); Two_Product(bdx, cdy, bdxcdy1, bdxcdy0); Two_Product(cdx, bdy, cdxbdy1, cdxbdy0); @@ -1358,12 +1358,12 @@ static double incircleadapt( INEXACT double _i, _j; double _0; - adx = (double)(pa[0] - pd[0]); - bdx = (double)(pb[0] - pd[0]); - cdx = (double)(pc[0] - pd[0]); - ady = (double)(pa[1] - pd[1]); - bdy = (double)(pb[1] - pd[1]); - cdy = (double)(pc[1] - pd[1]); + adx = double(pa[0] - pd[0]); + bdx = double(pb[0] - pd[0]); + cdx = double(pc[0] - pd[0]); + ady = double(pa[1] - pd[1]); + bdy = double(pb[1] - pd[1]); + cdy = double(pc[1] - pd[1]); Two_Product(bdx, cdy, bdxcdy1, bdxcdy0); Two_Product(cdx, bdy, cdxbdy1, cdxbdy0); @@ -2191,18 +2191,18 @@ static double insphereadapt(const double *pa, INEXACT double _i, _j; double _0; - aex = (double)(pa[0] - pe[0]); - bex = (double)(pb[0] - pe[0]); - cex = (double)(pc[0] - pe[0]); - dex = (double)(pd[0] - pe[0]); - aey = (double)(pa[1] - pe[1]); - bey = (double)(pb[1] - pe[1]); - cey = (double)(pc[1] - pe[1]); - dey = (double)(pd[1] - pe[1]); - aez = (double)(pa[2] - pe[2]); - bez = (double)(pb[2] - pe[2]); - cez = (double)(pc[2] - pe[2]); - dez = (double)(pd[2] - pe[2]); + aex = double(pa[0] - pe[0]); + bex = double(pb[0] - pe[0]); + cex = double(pc[0] - pe[0]); + dex = double(pd[0] - pe[0]); + aey = double(pa[1] - pe[1]); + bey = double(pb[1] - pe[1]); + cey = double(pc[1] - pe[1]); + dey = double(pd[1] - pe[1]); + aez = double(pa[2] - pe[2]); + bez = double(pb[2] - pe[2]); + cez = double(pc[2] - pe[2]); + dez = double(pd[2] - pe[2]); Two_Product(aex, bey, aexbey1, aexbey0); Two_Product(bex, aey, bexaey1, bexaey0); diff --git a/source/blender/blenlib/intern/math_color.c b/source/blender/blenlib/intern/math_color.c index bdcf52ec521..51860c1abdb 100644 --- a/source/blender/blenlib/intern/math_color.c +++ b/source/blender/blenlib/intern/math_color.c @@ -176,7 +176,7 @@ void ycc_to_rgb(float y, float cb, float cr, float *r_r, float *r_g, float *r_b, void hex_to_rgb(const char *hexcol, float *r_r, float *r_g, float *r_b) { - unsigned int ri, gi, bi; + uint ri, gi, bi; if (hexcol[0] == '#') { hexcol++; @@ -329,29 +329,29 @@ void hsv_clamp_v(float hsv[3], float v_max) CLAMP(hsv[2], 0.0f, v_max); } -unsigned int hsv_to_cpack(float h, float s, float v) +uint hsv_to_cpack(float h, float s, float v) { - unsigned int r, g, b; + uint r, g, b; float rf, gf, bf; - unsigned int col; + uint col; hsv_to_rgb(h, s, v, &rf, &gf, &bf); - r = (unsigned int)(rf * 255.0f); - g = (unsigned int)(gf * 255.0f); - b = (unsigned int)(bf * 255.0f); + r = (uint)(rf * 255.0f); + g = (uint)(gf * 255.0f); + b = (uint)(bf * 255.0f); col = (r + (g * 256) + (b * 256 * 256)); return col; } -unsigned int rgb_to_cpack(float r, float g, float b) +uint rgb_to_cpack(float r, float g, float b) { - unsigned int ir, ig, ib; + uint ir, ig, ib; - ir = (unsigned int)floorf(255.0f * max_ff(r, 0.0f)); - ig = (unsigned int)floorf(255.0f * max_ff(g, 0.0f)); - ib = (unsigned int)floorf(255.0f * max_ff(b, 0.0f)); + ir = (uint)floorf(255.0f * max_ff(r, 0.0f)); + ig = (uint)floorf(255.0f * max_ff(g, 0.0f)); + ib = (uint)floorf(255.0f * max_ff(b, 0.0f)); if (ir > 255) { ir = 255; @@ -366,21 +366,21 @@ unsigned int rgb_to_cpack(float r, float g, float b) return (ir + (ig * 256) + (ib * 256 * 256)); } -void cpack_to_rgb(unsigned int col, float *r_r, float *r_g, float *r_b) +void cpack_to_rgb(uint col, float *r_r, float *r_g, float *r_b) { - *r_r = ((float)(((col)) & 0xFF)) * (1.0f / 255.0f); - *r_g = ((float)(((col) >> 8) & 0xFF)) * (1.0f / 255.0f); - *r_b = ((float)(((col) >> 16) & 0xFF)) * (1.0f / 255.0f); + *r_r = (float)(col & 0xFF) * (1.0f / 255.0f); + *r_g = (float)((col >> 8) & 0xFF) * (1.0f / 255.0f); + *r_b = (float)((col >> 16) & 0xFF) * (1.0f / 255.0f); } -void rgb_uchar_to_float(float r_col[3], const unsigned char col_ub[3]) +void rgb_uchar_to_float(float r_col[3], const uchar col_ub[3]) { r_col[0] = ((float)col_ub[0]) * (1.0f / 255.0f); r_col[1] = ((float)col_ub[1]) * (1.0f / 255.0f); r_col[2] = ((float)col_ub[2]) * (1.0f / 255.0f); } -void rgba_uchar_to_float(float r_col[4], const unsigned char col_ub[4]) +void rgba_uchar_to_float(float r_col[4], const uchar col_ub[4]) { r_col[0] = ((float)col_ub[0]) * (1.0f / 255.0f); r_col[1] = ((float)col_ub[1]) * (1.0f / 255.0f); @@ -388,12 +388,12 @@ void rgba_uchar_to_float(float r_col[4], const unsigned char col_ub[4]) r_col[3] = ((float)col_ub[3]) * (1.0f / 255.0f); } -void rgb_float_to_uchar(unsigned char r_col[3], const float col_f[3]) +void rgb_float_to_uchar(uchar r_col[3], const float col_f[3]) { unit_float_to_uchar_clamp_v3(r_col, col_f); } -void rgba_float_to_uchar(unsigned char r_col[4], const float col_f[4]) +void rgba_float_to_uchar(uchar r_col[4], const float col_f[4]) { unit_float_to_uchar_clamp_v4(r_col, col_f); } @@ -500,7 +500,7 @@ void rgb_float_set_hue_float_offset(float rgb[3], float hue_offset) hsv_to_rgb(hsv[0], hsv[1], hsv[2], rgb, rgb + 1, rgb + 2); } -void rgb_byte_set_hue_float_offset(unsigned char rgb[3], float hue_offset) +void rgb_byte_set_hue_float_offset(uchar rgb[3], float hue_offset) { float rgb_float[3]; @@ -515,13 +515,13 @@ void rgb_byte_set_hue_float_offset(unsigned char rgb[3], float hue_offset) */ float BLI_color_from_srgb_table[256]; -unsigned short BLI_color_to_srgb_table[0x10000]; +ushort BLI_color_to_srgb_table[0x10000]; -static unsigned short hipart(const float f) +static ushort hipart(const float f) { union { float f; - unsigned short us[2]; + ushort us[2]; } tmp; tmp.f = f; @@ -533,12 +533,12 @@ static unsigned short hipart(const float f) #endif } -static float index_to_float(const unsigned short i) +static float index_to_float(const ushort i) { union { float f; - unsigned short us[2]; + ushort us[2]; } tmp; /* positive and negative zeros, and all gradual underflow, turn into zero: */ @@ -567,7 +567,7 @@ static float index_to_float(const unsigned short i) void BLI_init_srgb_conversion(void) { static bool initialized = false; - unsigned int i, b; + uint i, b; if (initialized) { return; @@ -576,12 +576,12 @@ void BLI_init_srgb_conversion(void) /* Fill in the lookup table to convert floats to bytes: */ for (i = 0; i < 0x10000; i++) { - float f = linearrgb_to_srgb(index_to_float((unsigned short)i)) * 255.0f; + float f = linearrgb_to_srgb(index_to_float((ushort)i)) * 255.0f; if (f <= 0) { BLI_color_to_srgb_table[i] = 0; } else if (f < 255) { - BLI_color_to_srgb_table[i] = (unsigned short)(f * 0x100 + 0.5f); + BLI_color_to_srgb_table[i] = (ushort)(f * 0x100 + 0.5f); } else { BLI_color_to_srgb_table[i] = 0xff00; @@ -594,6 +594,6 @@ void BLI_init_srgb_conversion(void) BLI_color_from_srgb_table[b] = f; i = hipart(f); /* replace entries so byte->float->byte does not change the data: */ - BLI_color_to_srgb_table[i] = (unsigned short)(b * 0x100); + BLI_color_to_srgb_table[i] = (ushort)(b * 0x100); } } diff --git a/source/blender/blenlib/intern/math_geom.c b/source/blender/blenlib/intern/math_geom.c index 773aac95193..08152976f7d 100644 --- a/source/blender/blenlib/intern/math_geom.c +++ b/source/blender/blenlib/intern/math_geom.c @@ -68,7 +68,7 @@ float normal_quad_v3( return normalize_v3(n); } -float normal_poly_v3(float n[3], const float verts[][3], unsigned int nr) +float normal_poly_v3(float n[3], const float verts[][3], uint nr) { cross_poly_v3(n, verts, nr); return normalize_v3(n); @@ -122,14 +122,14 @@ float area_tri_signed_v3(const float v1[3], return area; } -float area_poly_v3(const float verts[][3], unsigned int nr) +float area_poly_v3(const float verts[][3], uint nr) { float n[3]; cross_poly_v3(n, verts, nr); return len_v3(n) * 0.5f; } -float area_squared_poly_v3(const float verts[][3], unsigned int nr) +float area_squared_poly_v3(const float verts[][3], uint nr) { float n[3]; @@ -138,9 +138,9 @@ float area_squared_poly_v3(const float verts[][3], unsigned int nr) return len_squared_v3(n); } -float cross_poly_v2(const float verts[][2], unsigned int nr) +float cross_poly_v2(const float verts[][2], uint nr) { - unsigned int a; + uint a; float cross; const float *co_curr, *co_prev; @@ -157,11 +157,11 @@ float cross_poly_v2(const float verts[][2], unsigned int nr) return cross; } -void cross_poly_v3(float n[3], const float verts[][3], unsigned int nr) +void cross_poly_v3(float n[3], const float verts[][3], uint nr) { const float *v_prev = verts[nr - 1]; const float *v_curr = verts[0]; - unsigned int i; + uint i; zero_v3(n); @@ -171,17 +171,17 @@ void cross_poly_v3(float n[3], const float verts[][3], unsigned int nr) } } -float area_poly_v2(const float verts[][2], unsigned int nr) +float area_poly_v2(const float verts[][2], uint nr) { return fabsf(0.5f * cross_poly_v2(verts, nr)); } -float area_poly_signed_v2(const float verts[][2], unsigned int nr) +float area_poly_signed_v2(const float verts[][2], uint nr) { return (0.5f * cross_poly_v2(verts, nr)); } -float area_squared_poly_v2(const float verts[][2], unsigned int nr) +float area_squared_poly_v2(const float verts[][2], uint nr) { float area = area_poly_signed_v2(verts, nr); return area * area; @@ -527,7 +527,7 @@ float dist_signed_squared_to_corner_v3v3v3(const float p[3], cross_v3_v3v3(axis, dir_a, dir_b); - if ((len_squared_v3(axis) < FLT_EPSILON)) { + if (len_squared_v3(axis) < FLT_EPSILON) { copy_v3_v3(axis, axis_ref); } else if (dot_v3v3(axis, axis_ref) < 0.0f) { @@ -1458,12 +1458,12 @@ int isect_line_sphere_v2(const float l1[2], bool isect_point_poly_v2(const float pt[2], const float verts[][2], - const unsigned int nr, + const uint nr, const bool UNUSED(use_holes)) { /* Keep in sync with #isect_point_poly_v2_int. */ - unsigned int i, j; + uint i, j; bool isect = false; for (i = 0, j = nr - 1; i < nr; j = i++) { if (((verts[i][1] > pt[1]) != (verts[j][1] > pt[1])) && @@ -1477,12 +1477,12 @@ bool isect_point_poly_v2(const float pt[2], } bool isect_point_poly_v2_int(const int pt[2], const int verts[][2], - const unsigned int nr, + const uint nr, const bool UNUSED(use_holes)) { /* Keep in sync with #isect_point_poly_v2. */ - unsigned int i, j; + uint i, j; bool isect = false; for (i = 0, j = nr - 1; i < nr; j = i++) { if (((verts[i][1] > pt[1]) != (verts[j][1] > pt[1])) && @@ -2208,7 +2208,7 @@ bool isect_planes_v3_fn( int i_test; for (i_test = 0; i_test < planes_len; i_test++) { const float *np_test = planes[i_test]; - if (((dot_v3v3(np_test, co_test) + np_test[3]) > eps_isect)) { + if ((dot_v3v3(np_test, co_test) + np_test[3]) > eps_isect) { /* For low epsilon values the point could intersect its own plane. */ if (!ELEM(i_test, i, j, k)) { break; @@ -2696,7 +2696,7 @@ bool isect_sweeping_sphere_tri_v3(const float p1[3], z = x + y - (a * c - b * b); if (z <= 0.0f && (x >= 0.0f && y >= 0.0f)) { - //(((unsigned int)z)& ~(((unsigned int)x)|((unsigned int)y))) & 0x80000000) { + //(((uint)z)& ~(((uint)x)|((uint)y))) & 0x80000000) { *r_lambda = t0; copy_v3_v3(ipoint, point); return true; @@ -2748,7 +2748,7 @@ bool isect_sweeping_sphere_tri_v3(const float p1[3], edotv = dot_v3v3(e1, vel); edotbv = dot_v3v3(e1, bv); - a = elen2 * (-dot_v3v3(vel, vel)) + edotv * edotv; + a = elen2 * -dot_v3v3(vel, vel) + edotv * edotv; b = 2.0f * (elen2 * dot_v3v3(vel, bv) - edotv * edotbv); c = elen2 * (radius2 - dot_v3v3(bv, bv)) + edotbv * edotbv; @@ -2770,7 +2770,7 @@ bool isect_sweeping_sphere_tri_v3(const float p1[3], edotv = dot_v3v3(e2, vel); edotbv = dot_v3v3(e2, bv); - a = elen2 * (-dot_v3v3(vel, vel)) + edotv * edotv; + a = elen2 * -dot_v3v3(vel, vel) + edotv * edotv; b = 2.0f * (elen2 * dot_v3v3(vel, bv) - edotv * edotbv); c = elen2 * (radius2 - dot_v3v3(bv, bv)) + edotbv * edotbv; @@ -2797,7 +2797,7 @@ bool isect_sweeping_sphere_tri_v3(const float p1[3], edotv = dot_v3v3(e3, vel); edotbv = dot_v3v3(e3, bv); - a = elen2 * (-dot_v3v3(vel, vel)) + edotv * edotv; + a = elen2 * -dot_v3v3(vel, vel) + edotv * edotv; b = 2.0f * (elen2 * dot_v3v3(vel, bv) - edotv * edotbv); c = elen2 * (radius2 - dot_v3v3(bv, bv)) + edotbv * edotbv; @@ -5803,10 +5803,10 @@ bool is_quad_convex_v2(const float v1[2], const float v2[2], const float v3[2], return (isect_seg_seg_v2(v1, v3, v2, v4) > 0); } -bool is_poly_convex_v2(const float verts[][2], unsigned int nr) +bool is_poly_convex_v2(const float verts[][2], uint nr) { - unsigned int sign_flag = 0; - unsigned int a; + uint sign_flag = 0; + uint a; const float *co_curr, *co_prev; float dir_curr[2], dir_prev[2]; diff --git a/source/blender/blenlib/intern/math_interp.c b/source/blender/blenlib/intern/math_interp.c index 34fcb583232..29907924bd8 100644 --- a/source/blender/blenlib/intern/math_interp.c +++ b/source/blender/blenlib/intern/math_interp.c @@ -56,7 +56,7 @@ static void vector_from_float(const float *data, float vector[4], int components } } -static void vector_from_byte(const unsigned char *data, float vector[4], int components) +static void vector_from_byte(const uchar *data, float vector[4], int components) { if (components == 1) { vector[0] = data[0]; @@ -75,9 +75,9 @@ static void vector_from_byte(const unsigned char *data, float vector[4], int com } /* BICUBIC INTERPOLATION */ -BLI_INLINE void bicubic_interpolation(const unsigned char *byte_buffer, +BLI_INLINE void bicubic_interpolation(const uchar *byte_buffer, const float *float_buffer, - unsigned char *byte_output, + uchar *byte_output, float *float_output, int width, int height, @@ -135,7 +135,7 @@ BLI_INLINE void bicubic_interpolation(const unsigned char *byte_buffer, vector_from_float(float_data, data, components); } else { - const unsigned char *byte_data = byte_buffer + width * y1 * components + components * x1; + const uchar *byte_data = byte_buffer + width * y1 * components + components * x1; vector_from_byte(byte_data, data, components); } @@ -174,7 +174,7 @@ BLI_INLINE void bicubic_interpolation(const unsigned char *byte_buffer, vector_from_float(float_data, data, components); } else { - const unsigned char *byte_data = byte_buffer + width * y1 * components + components * x1; + const uchar *byte_data = byte_buffer + width * y1 * components + components * x1; vector_from_byte(byte_data, data, components); } @@ -211,18 +211,18 @@ BLI_INLINE void bicubic_interpolation(const unsigned char *byte_buffer, } else { if (components == 1) { - byte_output[0] = (unsigned char)(out[0] + 0.5f); + byte_output[0] = (uchar)(out[0] + 0.5f); } else if (components == 3) { - byte_output[0] = (unsigned char)(out[0] + 0.5f); - byte_output[1] = (unsigned char)(out[1] + 0.5f); - byte_output[2] = (unsigned char)(out[2] + 0.5f); + byte_output[0] = (uchar)(out[0] + 0.5f); + byte_output[1] = (uchar)(out[1] + 0.5f); + byte_output[2] = (uchar)(out[2] + 0.5f); } else { - byte_output[0] = (unsigned char)(out[0] + 0.5f); - byte_output[1] = (unsigned char)(out[1] + 0.5f); - byte_output[2] = (unsigned char)(out[2] + 0.5f); - byte_output[3] = (unsigned char)(out[3] + 0.5f); + byte_output[0] = (uchar)(out[0] + 0.5f); + byte_output[1] = (uchar)(out[1] + 0.5f); + byte_output[2] = (uchar)(out[2] + 0.5f); + byte_output[3] = (uchar)(out[3] + 0.5f); } } } @@ -233,21 +233,16 @@ void BLI_bicubic_interpolation_fl( bicubic_interpolation(NULL, buffer, NULL, output, width, height, components, u, v); } -void BLI_bicubic_interpolation_char(const unsigned char *buffer, - unsigned char *output, - int width, - int height, - int components, - float u, - float v) +void BLI_bicubic_interpolation_char( + const uchar *buffer, uchar *output, int width, int height, int components, float u, float v) { bicubic_interpolation(buffer, NULL, output, NULL, width, height, components, u, v); } /* BILINEAR INTERPOLATION */ -BLI_INLINE void bilinear_interpolation(const unsigned char *byte_buffer, +BLI_INLINE void bilinear_interpolation(const uchar *byte_buffer, const float *float_buffer, - unsigned char *byte_output, + uchar *byte_output, float *float_output, int width, int height, @@ -351,8 +346,8 @@ BLI_INLINE void bilinear_interpolation(const unsigned char *byte_buffer, } } else { - const unsigned char *row1, *row2, *row3, *row4; - unsigned char empty[4] = {0, 0, 0, 0}; + const uchar *row1, *row2, *row3, *row4; + uchar empty[4] = {0, 0, 0, 0}; /* pixel value must be already wrapped, however values at boundaries may flip */ if (wrap_x) { @@ -418,26 +413,26 @@ BLI_INLINE void bilinear_interpolation(const unsigned char *byte_buffer, ma_mb = (1.0f - a) * (1.0f - b); if (components == 1) { - byte_output[0] = (unsigned char)(ma_mb * row1[0] + a_mb * row3[0] + ma_b * row2[0] + - a_b * row4[0] + 0.5f); + byte_output[0] = (uchar)(ma_mb * row1[0] + a_mb * row3[0] + ma_b * row2[0] + a_b * row4[0] + + 0.5f); } else if (components == 3) { - byte_output[0] = (unsigned char)(ma_mb * row1[0] + a_mb * row3[0] + ma_b * row2[0] + - a_b * row4[0] + 0.5f); - byte_output[1] = (unsigned char)(ma_mb * row1[1] + a_mb * row3[1] + ma_b * row2[1] + - a_b * row4[1] + 0.5f); - byte_output[2] = (unsigned char)(ma_mb * row1[2] + a_mb * row3[2] + ma_b * row2[2] + - a_b * row4[2] + 0.5f); + byte_output[0] = (uchar)(ma_mb * row1[0] + a_mb * row3[0] + ma_b * row2[0] + a_b * row4[0] + + 0.5f); + byte_output[1] = (uchar)(ma_mb * row1[1] + a_mb * row3[1] + ma_b * row2[1] + a_b * row4[1] + + 0.5f); + byte_output[2] = (uchar)(ma_mb * row1[2] + a_mb * row3[2] + ma_b * row2[2] + a_b * row4[2] + + 0.5f); } else { - byte_output[0] = (unsigned char)(ma_mb * row1[0] + a_mb * row3[0] + ma_b * row2[0] + - a_b * row4[0] + 0.5f); - byte_output[1] = (unsigned char)(ma_mb * row1[1] + a_mb * row3[1] + ma_b * row2[1] + - a_b * row4[1] + 0.5f); - byte_output[2] = (unsigned char)(ma_mb * row1[2] + a_mb * row3[2] + ma_b * row2[2] + - a_b * row4[2] + 0.5f); - byte_output[3] = (unsigned char)(ma_mb * row1[3] + a_mb * row3[3] + ma_b * row2[3] + - a_b * row4[3] + 0.5f); + byte_output[0] = (uchar)(ma_mb * row1[0] + a_mb * row3[0] + ma_b * row2[0] + a_b * row4[0] + + 0.5f); + byte_output[1] = (uchar)(ma_mb * row1[1] + a_mb * row3[1] + ma_b * row2[1] + a_b * row4[1] + + 0.5f); + byte_output[2] = (uchar)(ma_mb * row1[2] + a_mb * row3[2] + ma_b * row2[2] + a_b * row4[2] + + 0.5f); + byte_output[3] = (uchar)(ma_mb * row1[3] + a_mb * row3[3] + ma_b * row2[3] + a_b * row4[3] + + 0.5f); } } } @@ -449,13 +444,8 @@ void BLI_bilinear_interpolation_fl( NULL, buffer, NULL, output, width, height, components, u, v, false, false); } -void BLI_bilinear_interpolation_char(const unsigned char *buffer, - unsigned char *output, - int width, - int height, - int components, - float u, - float v) +void BLI_bilinear_interpolation_char( + const uchar *buffer, uchar *output, int width, int height, int components, float u, float v) { bilinear_interpolation( buffer, NULL, output, NULL, width, height, components, u, v, false, false); @@ -475,8 +465,8 @@ void BLI_bilinear_interpolation_wrap_fl(const float *buffer, NULL, buffer, NULL, output, width, height, components, u, v, wrap_x, wrap_y); } -void BLI_bilinear_interpolation_wrap_char(const unsigned char *buffer, - unsigned char *output, +void BLI_bilinear_interpolation_wrap_char(const uchar *buffer, + uchar *output, int width, int height, int components, @@ -634,10 +624,10 @@ void BLI_ewa_filter(const int width, U0 = uv[0] * (float)width; V0 = uv[1] * (float)height; - u1 = (int)(floorf(U0 - ue)); - u2 = (int)(ceilf(U0 + ue)); - v1 = (int)(floorf(V0 - ve)); - v2 = (int)(ceilf(V0 + ve)); + u1 = (int)floorf(U0 - ue); + u2 = (int)ceilf(U0 + ue); + v1 = (int)floorf(V0 - ve); + v2 = (int)ceilf(V0 + ve); /* sane clamping to avoid unnecessarily huge loops */ /* NOTE: if eccentricity gets clamped (see above), @@ -679,7 +669,7 @@ void BLI_ewa_filter(const int width, for (u = u1; u <= u2; u++) { if (Q < (float)(EWA_MAXIDX + 1)) { float tc[4]; - const float wt = EWA_WTS[(Q < 0.0f) ? 0 : (unsigned int)Q]; + const float wt = EWA_WTS[(Q < 0.0f) ? 0 : (uint)Q]; read_pixel_cb(userdata, u, v, tc); madd_v3_v3fl(result, tc, wt); result[3] += use_alpha ? tc[3] * wt : 0.0f; diff --git a/source/blender/blenlib/intern/math_matrix.c b/source/blender/blenlib/intern/math_matrix.c index 221ae84e74d..d997eae26fb 100644 --- a/source/blender/blenlib/intern/math_matrix.c +++ b/source/blender/blenlib/intern/math_matrix.c @@ -3116,6 +3116,34 @@ bool has_zero_axis_m4(const float matrix[4][4]) len_squared_v3(matrix[2]) < FLT_EPSILON; } +void zero_axis_bias_m4(float mat[4][4]) +{ + const bool axis_x_degenerate = len_squared_v3(mat[0]) < FLT_EPSILON; + const bool axis_y_degenerate = len_squared_v3(mat[1]) < FLT_EPSILON; + const bool axis_z_degenerate = len_squared_v3(mat[2]) < FLT_EPSILON; + + /* X Axis. */ + if (axis_x_degenerate && !axis_y_degenerate && !axis_z_degenerate) { + cross_v3_v3v3(mat[0], mat[1], mat[2]); + mul_v3_fl(mat[0], FLT_EPSILON); + return; + } + + /* Y Axis. */ + if (!axis_x_degenerate && axis_y_degenerate && !axis_z_degenerate) { + cross_v3_v3v3(mat[1], mat[2], mat[0]); + mul_v3_fl(mat[1], FLT_EPSILON); + return; + } + + /* Z Axis. */ + if (!axis_x_degenerate && !axis_y_degenerate && axis_z_degenerate) { + cross_v3_v3v3(mat[2], mat[0], mat[1]); + mul_v3_fl(mat[2], FLT_EPSILON); + return; + } +} + void invert_m4_m4_safe(float inverse[4][4], const float mat[4][4]) { if (!invert_m4_m4(inverse, mat)) { diff --git a/source/blender/blenlib/intern/math_rotation.c b/source/blender/blenlib/intern/math_rotation.c index ae068e3fb19..180412c4a14 100644 --- a/source/blender/blenlib/intern/math_rotation.c +++ b/source/blender/blenlib/intern/math_rotation.c @@ -275,64 +275,83 @@ void mat3_normalized_to_quat_fast(float q[4], const float mat[3][3]) /* Caller must ensure matrices aren't negative for valid results, see: T24291, T94231. */ BLI_assert(!is_negative_m3(mat)); - /* Check the trace of the matrix - bad precision if close to -1. */ - const float trace = mat[0][0] + mat[1][1] + mat[2][2]; - - if (trace > 0) { - float s = 2.0f * sqrtf(1.0f + trace); - - q[0] = 0.25f * s; - - s = 1.0f / s; - - q[1] = (mat[1][2] - mat[2][1]) * s; - q[2] = (mat[2][0] - mat[0][2]) * s; - q[3] = (mat[0][1] - mat[1][0]) * s; - } - else { - /* Find the biggest diagonal element to choose the best formula. - * Here trace should also be always >= 0, avoiding bad precision. */ - if (mat[0][0] > mat[1][1] && mat[0][0] > mat[2][2]) { - float s = 2.0f * sqrtf(1.0f + mat[0][0] - mat[1][1] - mat[2][2]); - + /* Method outlined by Mike Day, ref: https://math.stackexchange.com/a/3183435/220949 + * with an additional `sqrtf(..)` for higher precision result. + * Removing the `sqrt` causes tests to fail unless the precision is set to 1e-6 or larger. */ + + if (mat[2][2] < 0.0f) { + if (mat[0][0] > mat[1][1]) { + const float trace = 1.0f + mat[0][0] - mat[1][1] - mat[2][2]; + float s = 2.0f * sqrtf(trace); + if (mat[1][2] < mat[2][1]) { + /* Ensure W is non-negative for a canonical result. */ + s = -s; + } q[1] = 0.25f * s; - s = 1.0f / s; - q[0] = (mat[1][2] - mat[2][1]) * s; - q[2] = (mat[1][0] + mat[0][1]) * s; + q[2] = (mat[0][1] + mat[1][0]) * s; q[3] = (mat[2][0] + mat[0][2]) * s; + if (UNLIKELY((trace == 1.0f) && (q[0] == 0.0f && q[2] == 0.0f && q[3] == 0.0f))) { + /* Avoids the need to normalize the degenerate case. */ + q[1] = 1.0f; + } } - else if (mat[1][1] > mat[2][2]) { - float s = 2.0f * sqrtf(1.0f + mat[1][1] - mat[0][0] - mat[2][2]); - + else { + const float trace = 1.0f - mat[0][0] + mat[1][1] - mat[2][2]; + float s = 2.0f * sqrtf(trace); + if (mat[2][0] < mat[0][2]) { + /* Ensure W is non-negative for a canonical result. */ + s = -s; + } q[2] = 0.25f * s; - s = 1.0f / s; - q[0] = (mat[2][0] - mat[0][2]) * s; - q[1] = (mat[1][0] + mat[0][1]) * s; - q[3] = (mat[2][1] + mat[1][2]) * s; + q[1] = (mat[0][1] + mat[1][0]) * s; + q[3] = (mat[1][2] + mat[2][1]) * s; + if (UNLIKELY((trace == 1.0f) && (q[0] == 0.0f && q[1] == 0.0f && q[3] == 0.0f))) { + /* Avoids the need to normalize the degenerate case. */ + q[2] = 1.0f; + } } - else { - float s = 2.0f * sqrtf(1.0f + mat[2][2] - mat[0][0] - mat[1][1]); - + } + else { + if (mat[0][0] < -mat[1][1]) { + const float trace = 1.0f - mat[0][0] - mat[1][1] + mat[2][2]; + float s = 2.0f * sqrtf(trace); + if (mat[0][1] < mat[1][0]) { + /* Ensure W is non-negative for a canonical result. */ + s = -s; + } q[3] = 0.25f * s; - s = 1.0f / s; - q[0] = (mat[0][1] - mat[1][0]) * s; q[1] = (mat[2][0] + mat[0][2]) * s; - q[2] = (mat[2][1] + mat[1][2]) * s; + q[2] = (mat[1][2] + mat[2][1]) * s; + if (UNLIKELY((trace == 1.0f) && (q[0] == 0.0f && q[1] == 0.0f && q[2] == 0.0f))) { + /* Avoids the need to normalize the degenerate case. */ + q[3] = 1.0f; + } } - - /* Make sure W is non-negative for a canonical result. */ - if (q[0] < 0) { - negate_v4(q); + else { + /* NOTE(@campbellbarton): A zero matrix will fall through to this block, + * needed so a zero scaled matrices to return a quaternion without rotation, see: T101848. */ + const float trace = 1.0f + mat[0][0] + mat[1][1] + mat[2][2]; + float s = 2.0f * sqrtf(trace); + q[0] = 0.25f * s; + s = 1.0f / s; + q[1] = (mat[1][2] - mat[2][1]) * s; + q[2] = (mat[2][0] - mat[0][2]) * s; + q[3] = (mat[0][1] - mat[1][0]) * s; + if (UNLIKELY((trace == 1.0f) && (q[1] == 0.0f && q[2] == 0.0f && q[3] == 0.0f))) { + /* Avoids the need to normalize the degenerate case. */ + q[0] = 1.0f; + } } } - normalize_qt(q); + BLI_assert(!(q[0] < 0.0f)); + BLI_ASSERT_UNIT_QUAT(q); } static void mat3_normalized_to_quat_with_checks(float q[4], float mat[3][3]) @@ -1477,7 +1496,7 @@ void compatible_eul(float eul[3], const float oldrot[3]) const float pi_x2 = (2.0f * (float)M_PI); float deul[3]; - unsigned int i; + uint i; /* correct differences of about 360 degrees first */ for (i = 0; i < 3; i++) { @@ -2178,8 +2197,8 @@ void quat_apply_track(float quat[4], short axis, short upflag) * up axis is used X->Y, Y->X, Z->X, if this first up axis isn't used then rotate 90d * the strange bit shift below just find the low axis {X:Y, Y:X, Z:X} */ if (upflag != (2 - axis) >> 1) { - float q[4] = {sqrt_1_2, 0.0, 0.0, 0.0}; /* assign 90d rotation axis */ - q[axis + 1] = ((axis == 1)) ? sqrt_1_2 : -sqrt_1_2; /* flip non Y axis */ + float q[4] = {sqrt_1_2, 0.0, 0.0, 0.0}; /* assign 90d rotation axis */ + q[axis + 1] = (axis == 1) ? sqrt_1_2 : -sqrt_1_2; /* flip non Y axis */ mul_qt_qtqt(quat, quat, q); } } @@ -2360,8 +2379,8 @@ bool mat3_from_axis_conversion( value = ((src_forward << (0 * 3)) | (src_up << (1 * 3)) | (dst_forward << (2 * 3)) | (dst_up << (3 * 3))); - for (uint i = 0; i < (ARRAY_SIZE(_axis_convert_matrix)); i++) { - for (uint j = 0; j < (ARRAY_SIZE(*_axis_convert_lut)); j++) { + for (uint i = 0; i < ARRAY_SIZE(_axis_convert_matrix); i++) { + for (uint j = 0; j < ARRAY_SIZE(*_axis_convert_lut); j++) { if (_axis_convert_lut[i][j] == value) { copy_m3_m3(r_mat, _axis_convert_matrix[i]); return true; diff --git a/source/blender/blenlib/intern/math_solvers.c b/source/blender/blenlib/intern/math_solvers.c index b5650410a70..1196c0bed7f 100644 --- a/source/blender/blenlib/intern/math_solvers.c +++ b/source/blender/blenlib/intern/math_solvers.c @@ -45,7 +45,7 @@ bool BLI_tridiagonal_solve( return false; } - size_t bytes = sizeof(double) * (unsigned)count; + size_t bytes = sizeof(double) * (uint)count; double *c1 = (double *)MEM_mallocN(bytes * 2, "tridiagonal_c1d1"); double *d1 = c1 + count; @@ -112,7 +112,7 @@ bool BLI_tridiagonal_solve_cyclic( return BLI_tridiagonal_solve(a, b, c, d, r_x, count); } - size_t bytes = sizeof(float) * (unsigned)count; + size_t bytes = sizeof(float) * (uint)count; float *tmp = (float *)MEM_mallocN(bytes * 2, "tridiagonal_ex"); float *b2 = tmp + count; diff --git a/source/blender/blenlib/intern/math_vec.cc b/source/blender/blenlib/intern/math_vec.cc index 99c873299fe..8d1f850d8e5 100644 --- a/source/blender/blenlib/intern/math_vec.cc +++ b/source/blender/blenlib/intern/math_vec.cc @@ -108,7 +108,7 @@ isect_result<mpq2> isect_seg_seg(const mpq2 &v1, const mpq2 &v2, const mpq2 &v3, uint64_t hash_mpq_class(const mpq_class &value) { /* TODO: better/faster implementation of this. */ - return get_default_hash(static_cast<float>(value.get_d())); + return get_default_hash(float(value.get_d())); } #endif diff --git a/source/blender/blenlib/intern/math_vector.c b/source/blender/blenlib/intern/math_vector.c index 5dcdabaf760..f65a5acceae 100644 --- a/source/blender/blenlib/intern/math_vector.c +++ b/source/blender/blenlib/intern/math_vector.c @@ -499,7 +499,7 @@ float angle_signed_on_axis_v3v3_v3(const float v1[3], const float v2[3], const f /* calculate the sign (reuse 'tproj') */ cross_v3_v3v3(tproj, v2_proj, v1_proj); if (dot_v3v3(tproj, axis) < 0.0f) { - angle = ((float)(M_PI * 2.0)) - angle; + angle = (float)(M_PI * 2.0) - angle; } return angle; diff --git a/source/blender/blenlib/intern/mesh_boolean.cc b/source/blender/blenlib/intern/mesh_boolean.cc index 0d8ad1da582..3efe62d2984 100644 --- a/source/blender/blenlib/intern/mesh_boolean.cc +++ b/source/blender/blenlib/intern/mesh_boolean.cc @@ -2527,7 +2527,7 @@ class InsideShapeTestData { static void inside_shape_callback(void *userdata, int index, const BVHTreeRay *ray, - BVHTreeRayHit *UNUSED(hit)) + BVHTreeRayHit * /*hit*/) { const int dbg_level = 0; if (dbg_level > 0) { diff --git a/source/blender/blenlib/intern/mesh_intersect.cc b/source/blender/blenlib/intern/mesh_intersect.cc index e8aa359fbe4..ee29662698a 100644 --- a/source/blender/blenlib/intern/mesh_intersect.cc +++ b/source/blender/blenlib/intern/mesh_intersect.cc @@ -829,13 +829,13 @@ struct BBPadData { static void pad_face_bb_range_func(void *__restrict userdata, const int iter, - const TaskParallelTLS *__restrict UNUSED(tls)) + const TaskParallelTLS *__restrict /*tls*/) { BBPadData *pad_data = static_cast<BBPadData *>(userdata); (*pad_data->face_bounding_box)[iter].expand(pad_data->pad); } -static void calc_face_bb_reduce(const void *__restrict UNUSED(userdata), +static void calc_face_bb_reduce(const void *__restrict /*userdata*/, void *__restrict chunk_join, void *__restrict chunk) { @@ -2032,10 +2032,10 @@ static Array<Face *> polyfill_triangulate_poly(Face *f, IMeshArena *arena) } /* Project along negative face normal so (x,y) can be used in 2d. */ float axis_mat[3][3]; float(*projverts)[2]; - unsigned int(*tris)[3]; + uint(*tris)[3]; const int totfilltri = flen - 2; /* Prepare projected vertices and array to receive triangles in tessellation. */ - tris = static_cast<unsigned int(*)[3]>(MEM_malloc_arrayN(totfilltri, sizeof(*tris), __func__)); + tris = static_cast<uint(*)[3]>(MEM_malloc_arrayN(totfilltri, sizeof(*tris), __func__)); projverts = static_cast<float(*)[2]>(MEM_malloc_arrayN(flen, sizeof(*projverts), __func__)); axis_dominant_v3_to_m3_negate(axis_mat, no); for (int j = 0; j < flen; ++j) { @@ -2047,7 +2047,7 @@ static Array<Face *> polyfill_triangulate_poly(Face *f, IMeshArena *arena) /* Put tessellation triangles into Face form. Record original edges where they exist. */ Array<Face *> ans(totfilltri); for (int t = 0; t < totfilltri; ++t) { - unsigned int *tri = tris[t]; + uint *tri = tris[t]; int eo[3]; const Vert *v[3]; for (int k = 0; k < 3; k++) { @@ -2419,7 +2419,7 @@ class TriOverlaps { } } first_overlap_ = Array<int>(tm.face_size(), -1); - for (int i = 0; i < static_cast<int>(overlap_num_); ++i) { + for (int i = 0; i < int(overlap_num_); ++i) { int t = overlap_[i].indexA; if (first_overlap_[t] == -1) { first_overlap_[t] = i; @@ -2451,7 +2451,7 @@ class TriOverlaps { } private: - static bool only_different_shapes(void *userdata, int index_a, int index_b, int UNUSED(thread)) + static bool only_different_shapes(void *userdata, int index_a, int index_b, int /*thread*/) { CBData *cbdata = static_cast<CBData *>(userdata); return cbdata->tm.face(index_a)->orig != cbdata->tm.face(index_b)->orig; @@ -2487,7 +2487,7 @@ static std::pair<int, int> canon_int_pair(int a, int b) static void calc_overlap_itts_range_func(void *__restrict userdata, const int iter, - const TaskParallelTLS *__restrict UNUSED(tls)) + const TaskParallelTLS *__restrict /*tls*/) { constexpr int dbg_level = 0; OverlapIttsData *data = static_cast<OverlapIttsData *>(userdata); @@ -2682,7 +2682,7 @@ static CDT_data calc_cluster_subdivided(const CoplanarClusterInfo &clinfo, const IMesh &tm, const TriOverlaps &ov, const Map<std::pair<int, int>, ITT_value> &itt_map, - IMeshArena *UNUSED(arena)) + IMeshArena * /*arena*/) { constexpr int dbg_level = 0; BLI_assert(c < clinfo.tot_cluster()); @@ -2889,7 +2889,7 @@ static void degenerate_range_func(void *__restrict userdata, chunk_data->has_degenerate_tri |= is_degenerate; } -static void degenerate_reduce(const void *__restrict UNUSED(userdata), +static void degenerate_reduce(const void *__restrict /*userdata*/, void *__restrict chunk_join, void *__restrict chunk) { @@ -2931,7 +2931,7 @@ static IMesh remove_degenerate_tris(const IMesh &tm_in) IMesh trimesh_self_intersect(const IMesh &tm_in, IMeshArena *arena) { return trimesh_nary_intersect( - tm_in, 1, [](int UNUSED(t)) { return 0; }, true, arena); + tm_in, 1, [](int /*t*/) { return 0; }, true, arena); } IMesh trimesh_nary_intersect(const IMesh &tm_in, diff --git a/source/blender/blenlib/intern/noise.c b/source/blender/blenlib/intern/noise.c index 3ec7c3f9804..8da35e5ab56 100644 --- a/source/blender/blenlib/intern/noise.c +++ b/source/blender/blenlib/intern/noise.c @@ -115,8 +115,8 @@ static const float hashpntf[768] = { 0.713870, 0.555261, 0.951333, }; -extern const unsigned char BLI_noise_hash_uchar_512[512]; /* Quiet warning. */ -const unsigned char BLI_noise_hash_uchar_512[512] = { +extern const uchar BLI_noise_hash_uchar_512[512]; /* Quiet warning. */ +const uchar BLI_noise_hash_uchar_512[512] = { 0xA2, 0xA0, 0x19, 0x3B, 0xF8, 0xEB, 0xAA, 0xEE, 0xF3, 0x1C, 0x67, 0x28, 0x1D, 0xED, 0x0, 0xDE, 0x95, 0x2E, 0xDC, 0x3F, 0x3A, 0x82, 0x35, 0x4D, 0x6C, 0xBA, 0x36, 0xD0, 0xF6, 0xC, 0x79, 0x32, 0xD1, 0x59, 0xF4, 0x8, 0x8B, 0x63, 0x89, 0x2F, 0xB8, 0xB4, 0x97, 0x83, 0xF2, 0x8F, 0x18, 0xC7, @@ -939,9 +939,9 @@ void BLI_noise_voronoi(float x, float y, float z, float *da, float *pa, float me break; } - int xi = (int)(floor(x)); - int yi = (int)(floor(y)); - int zi = (int)(floor(z)); + int xi = (int)floor(x); + int yi = (int)floor(y); + int zi = (int)floor(z); da[0] = da[1] = da[2] = da[3] = 1e10f; for (int xx = xi - 1; xx <= xi + 1; xx++) { for (int yy = yi - 1; yy <= yi + 1; yy++) { @@ -1112,10 +1112,10 @@ static float BLI_cellNoiseU(float x, float y, float z) y = (y + 0.000001f) * 1.00001f; z = (z + 0.000001f) * 1.00001f; - int xi = (int)(floor(x)); - int yi = (int)(floor(y)); - int zi = (int)(floor(z)); - unsigned int n = xi + yi * 1301 + zi * 314159; + int xi = (int)floor(x); + int yi = (int)floor(y); + int zi = (int)floor(z); + uint n = xi + yi * 1301 + zi * 314159; n ^= (n << 13); return ((float)(n * (n * n * 15731 + 789221) + 1376312589) / 4294967296.0f); } @@ -1132,9 +1132,9 @@ void BLI_noise_cell_v3(float x, float y, float z, float r_ca[3]) y = (y + 0.000001f) * 1.00001f; z = (z + 0.000001f) * 1.00001f; - int xi = (int)(floor(x)); - int yi = (int)(floor(y)); - int zi = (int)(floor(z)); + int xi = (int)floor(x); + int yi = (int)floor(y); + int zi = (int)floor(z); const float *p = HASHPNT(xi, yi, zi); r_ca[0] = p[0]; r_ca[1] = p[1]; @@ -1329,8 +1329,8 @@ float BLI_noise_mg_fbm( float BLI_noise_mg_multi_fractal( float x, float y, float z, float H, float lacunarity, float octaves, int noisebasis) { - /* This one is in fact rather confusing, - * there seem to be errors in the original source code (in all three versions of proc.text&mod), + /* This one is in fact rather confusing, there seem to be errors in the original source code + * (in all three versions of `proc.text & mod`), * I modified it to something that made sense to me, so it might be wrong. */ float (*noisefunc)(float, float, float); diff --git a/source/blender/blenlib/intern/noise.cc b/source/blender/blenlib/intern/noise.cc index 8a073239b31..65a6f102a7b 100644 --- a/source/blender/blenlib/intern/noise.cc +++ b/source/blender/blenlib/intern/noise.cc @@ -150,7 +150,7 @@ uint32_t hash_float(float4 k) BLI_INLINE float uint_to_float_01(uint32_t k) { - return static_cast<float>(k) / static_cast<float>(0xFFFFFFFFu); + return float(k) / float(0xFFFFFFFFu); } float hash_to_float(uint32_t kx) @@ -379,7 +379,7 @@ BLI_INLINE float noise_grad(uint32_t hash, float x, float y, float z, float w) BLI_INLINE float floor_fraction(float x, int &i) { - i = (int)x - ((x < 0) ? 1 : 0); + i = int(x) - ((x < 0) ? 1 : 0); return x - i; } @@ -536,7 +536,7 @@ template<typename T> float perlin_fractal_template(T position, float octaves, fl float maxamp = 0.0f; float sum = 0.0f; octaves = CLAMPIS(octaves, 0.0f, 15.0f); - int n = static_cast<int>(octaves); + int n = int(octaves); for (int i = 0; i <= n; i++) { float t = perlin(fscale * position); sum += t * amp; @@ -729,7 +729,7 @@ float musgrave_fBm(const float co, const float pwHL = std::pow(lacunarity, -H); const float octaves = CLAMPIS(octaves_unclamped, 0.0f, 15.0f); - for (int i = 0; i < (int)octaves; i++) { + for (int i = 0; i < int(octaves); i++) { value += perlin_signed(p) * pwr; pwr *= pwHL; p *= lacunarity; @@ -754,7 +754,7 @@ float musgrave_multi_fractal(const float co, const float pwHL = std::pow(lacunarity, -H); const float octaves = CLAMPIS(octaves_unclamped, 0.0f, 15.0f); - for (int i = 0; i < (int)octaves; i++) { + for (int i = 0; i < int(octaves); i++) { value *= (pwr * perlin_signed(p) + 1.0f); pwr *= pwHL; p *= lacunarity; @@ -783,7 +783,7 @@ float musgrave_hetero_terrain(const float co, float value = offset + perlin_signed(p); p *= lacunarity; - for (int i = 1; i < (int)octaves; i++) { + for (int i = 1; i < int(octaves); i++) { float increment = (perlin_signed(p) + offset) * pwr * value; value += increment; pwr *= pwHL; @@ -815,7 +815,7 @@ float musgrave_hybrid_multi_fractal(const float co, const float octaves = CLAMPIS(octaves_unclamped, 0.0f, 15.0f); - for (int i = 0; (weight > 0.001f) && (i < (int)octaves); i++) { + for (int i = 0; (weight > 0.001f) && (i < int(octaves)); i++) { if (weight > 1.0f) { weight = 1.0f; } @@ -857,7 +857,7 @@ float musgrave_ridged_multi_fractal(const float co, const float octaves = CLAMPIS(octaves_unclamped, 0.0f, 15.0f); - for (int i = 1; i < (int)octaves; i++) { + for (int i = 1; i < int(octaves); i++) { p *= lacunarity; weight = CLAMPIS(signal * gain, 0.0f, 1.0f); signal = offset - std::abs(perlin_signed(p)); @@ -883,7 +883,7 @@ float musgrave_fBm(const float2 co, const float pwHL = std::pow(lacunarity, -H); const float octaves = CLAMPIS(octaves_unclamped, 0.0f, 15.0f); - for (int i = 0; i < (int)octaves; i++) { + for (int i = 0; i < int(octaves); i++) { value += perlin_signed(p) * pwr; pwr *= pwHL; p *= lacunarity; @@ -908,7 +908,7 @@ float musgrave_multi_fractal(const float2 co, const float pwHL = std::pow(lacunarity, -H); const float octaves = CLAMPIS(octaves_unclamped, 0.0f, 15.0f); - for (int i = 0; i < (int)octaves; i++) { + for (int i = 0; i < int(octaves); i++) { value *= (pwr * perlin_signed(p) + 1.0f); pwr *= pwHL; p *= lacunarity; @@ -938,7 +938,7 @@ float musgrave_hetero_terrain(const float2 co, const float octaves = CLAMPIS(octaves_unclamped, 0.0f, 15.0f); - for (int i = 1; i < (int)octaves; i++) { + for (int i = 1; i < int(octaves); i++) { float increment = (perlin_signed(p) + offset) * pwr * value; value += increment; pwr *= pwHL; @@ -970,7 +970,7 @@ float musgrave_hybrid_multi_fractal(const float2 co, const float octaves = CLAMPIS(octaves_unclamped, 0.0f, 15.0f); - for (int i = 0; (weight > 0.001f) && (i < (int)octaves); i++) { + for (int i = 0; (weight > 0.001f) && (i < int(octaves)); i++) { if (weight > 1.0f) { weight = 1.0f; } @@ -1012,7 +1012,7 @@ float musgrave_ridged_multi_fractal(const float2 co, const float octaves = CLAMPIS(octaves_unclamped, 0.0f, 15.0f); - for (int i = 1; i < (int)octaves; i++) { + for (int i = 1; i < int(octaves); i++) { p *= lacunarity; weight = CLAMPIS(signal * gain, 0.0f, 1.0f); signal = offset - std::abs(perlin_signed(p)); @@ -1039,7 +1039,7 @@ float musgrave_fBm(const float3 co, const float octaves = CLAMPIS(octaves_unclamped, 0.0f, 15.0f); - for (int i = 0; i < (int)octaves; i++) { + for (int i = 0; i < int(octaves); i++) { value += perlin_signed(p) * pwr; pwr *= pwHL; p *= lacunarity; @@ -1065,7 +1065,7 @@ float musgrave_multi_fractal(const float3 co, const float octaves = CLAMPIS(octaves_unclamped, 0.0f, 15.0f); - for (int i = 0; i < (int)octaves; i++) { + for (int i = 0; i < int(octaves); i++) { value *= (pwr * perlin_signed(p) + 1.0f); pwr *= pwHL; p *= lacunarity; @@ -1095,7 +1095,7 @@ float musgrave_hetero_terrain(const float3 co, const float octaves = CLAMPIS(octaves_unclamped, 0.0f, 15.0f); - for (int i = 1; i < (int)octaves; i++) { + for (int i = 1; i < int(octaves); i++) { float increment = (perlin_signed(p) + offset) * pwr * value; value += increment; pwr *= pwHL; @@ -1127,7 +1127,7 @@ float musgrave_hybrid_multi_fractal(const float3 co, const float octaves = CLAMPIS(octaves_unclamped, 0.0f, 15.0f); - for (int i = 0; (weight > 0.001f) && (i < (int)octaves); i++) { + for (int i = 0; (weight > 0.001f) && (i < int(octaves)); i++) { if (weight > 1.0f) { weight = 1.0f; } @@ -1169,7 +1169,7 @@ float musgrave_ridged_multi_fractal(const float3 co, const float octaves = CLAMPIS(octaves_unclamped, 0.0f, 15.0f); - for (int i = 1; i < (int)octaves; i++) { + for (int i = 1; i < int(octaves); i++) { p *= lacunarity; weight = CLAMPIS(signal * gain, 0.0f, 1.0f); signal = offset - std::abs(perlin_signed(p)); @@ -1196,7 +1196,7 @@ float musgrave_fBm(const float4 co, const float octaves = CLAMPIS(octaves_unclamped, 0.0f, 15.0f); - for (int i = 0; i < (int)octaves; i++) { + for (int i = 0; i < int(octaves); i++) { value += perlin_signed(p) * pwr; pwr *= pwHL; p *= lacunarity; @@ -1222,7 +1222,7 @@ float musgrave_multi_fractal(const float4 co, const float octaves = CLAMPIS(octaves_unclamped, 0.0f, 15.0f); - for (int i = 0; i < (int)octaves; i++) { + for (int i = 0; i < int(octaves); i++) { value *= (pwr * perlin_signed(p) + 1.0f); pwr *= pwHL; p *= lacunarity; @@ -1252,7 +1252,7 @@ float musgrave_hetero_terrain(const float4 co, const float octaves = CLAMPIS(octaves_unclamped, 0.0f, 15.0f); - for (int i = 1; i < (int)octaves; i++) { + for (int i = 1; i < int(octaves); i++) { float increment = (perlin_signed(p) + offset) * pwr * value; value += increment; pwr *= pwHL; @@ -1284,7 +1284,7 @@ float musgrave_hybrid_multi_fractal(const float4 co, const float octaves = CLAMPIS(octaves_unclamped, 0.0f, 15.0f); - for (int i = 0; (weight > 0.001f) && (i < (int)octaves); i++) { + for (int i = 0; (weight > 0.001f) && (i < int(octaves)); i++) { if (weight > 1.0f) { weight = 1.0f; } @@ -1326,7 +1326,7 @@ float musgrave_ridged_multi_fractal(const float4 co, const float octaves = CLAMPIS(octaves_unclamped, 0.0f, 15.0f); - for (int i = 1; i < (int)octaves; i++) { + for (int i = 1; i < int(octaves); i++) { p *= lacunarity; weight = CLAMPIS(signal * gain, 0.0f, 1.0f); signal = offset - std::abs(perlin_signed(p)); diff --git a/source/blender/blenlib/intern/path_util.c b/source/blender/blenlib/intern/path_util.c index c053c3907db..2376bd82b69 100644 --- a/source/blender/blenlib/intern/path_util.c +++ b/source/blender/blenlib/intern/path_util.c @@ -121,9 +121,9 @@ int BLI_path_sequence_decode(const char *string, char *head, char *tail, ushort } void BLI_path_sequence_encode( - char *string, const char *head, const char *tail, unsigned short numlen, int pic) + char *string, const char *head, const char *tail, ushort numlen, int pic) { - sprintf(string, "%s%.*d%s", head, numlen, MAX2(0, pic), tail); + BLI_sprintf(string, "%s%.*d%s", head, numlen, MAX2(0, pic), tail); } static int BLI_path_unc_prefix_len(const char *path); /* defined below in same file */ @@ -153,6 +153,19 @@ void BLI_path_normalize(const char *relabase, char *path) */ #ifdef WIN32 + + while ((start = strstr(path, "\\.\\"))) { + eind = start + strlen("\\.\\") - 1; + memmove(start, eind, strlen(eind) + 1); + } + + /* remove two consecutive backslashes, but skip the UNC prefix, + * which needs to be preserved */ + while ((start = strstr(path + BLI_path_unc_prefix_len(path), "\\\\"))) { + eind = start + strlen("\\\\") - 1; + memmove(start, eind, strlen(eind) + 1); + } + while ((start = strstr(path, "\\..\\"))) { eind = start + strlen("\\..\\") - 1; a = start - path - 1; @@ -170,18 +183,18 @@ void BLI_path_normalize(const char *relabase, char *path) } } - while ((start = strstr(path, "\\.\\"))) { - eind = start + strlen("\\.\\") - 1; +#else + + while ((start = strstr(path, "/./"))) { + eind = start + (3 - 1) /* strlen("/./") - 1 */; memmove(start, eind, strlen(eind) + 1); } - /* remove two consecutive backslashes, but skip the UNC prefix, - * which needs to be preserved */ - while ((start = strstr(path + BLI_path_unc_prefix_len(path), "\\\\"))) { - eind = start + strlen("\\\\") - 1; + while ((start = strstr(path, "//"))) { + eind = start + (2 - 1) /* strlen("//") - 1 */; memmove(start, eind, strlen(eind) + 1); } -#else + while ((start = strstr(path, "/../"))) { a = start - path - 1; if (a > 0) { @@ -206,19 +219,10 @@ void BLI_path_normalize(const char *relabase, char *path) } } - while ((start = strstr(path, "/./"))) { - eind = start + (3 - 1) /* strlen("/./") - 1 */; - memmove(start, eind, strlen(eind) + 1); - } - - while ((start = strstr(path, "//"))) { - eind = start + (2 - 1) /* strlen("//") - 1 */; - memmove(start, eind, strlen(eind) + 1); - } #endif } -void BLI_path_normalize_dir(const char *relabase, char *dir) +void BLI_path_normalize_dir(const char *relabase, char *dir, size_t dir_maxlen) { /* Would just create an unexpected "/" path, just early exit entirely. */ if (dir[0] == '\0') { @@ -226,7 +230,7 @@ void BLI_path_normalize_dir(const char *relabase, char *dir) } BLI_path_normalize(relabase, dir); - BLI_path_slash_ensure(dir); + BLI_path_slash_ensure(dir, dir_maxlen); } bool BLI_filename_make_safe_ex(char *fname, bool allow_tokens) @@ -466,8 +470,8 @@ void BLI_path_rel(char *file, const char *relfile) #ifdef WIN32 if (BLI_strnlen(relfile, 3) > 2 && !BLI_path_is_abs(relfile)) { char *ptemp; - /* fix missing volume name in relative base, - * can happen with old recent-files.txt files */ + /* Fix missing volume name in relative base, + * can happen with old `recent-files.txt` files. */ BLI_windows_get_default_root_dir(temp); ptemp = &temp[2]; if (!ELEM(relfile[0], '\\', '/')) { @@ -616,24 +620,34 @@ bool BLI_path_suffix(char *string, size_t maxlen, const char *suffix, const char } BLI_strncpy(extension, string + a, sizeof(extension)); - sprintf(string + a, "%s%s%s", sep, suffix, extension); + BLI_sprintf(string + a, "%s%s%s", sep, suffix, extension); return true; } bool BLI_path_parent_dir(char *path) { - const char parent_dir[] = {'.', '.', SEP, '\0'}; /* "../" or "..\\" */ - char tmp[FILE_MAX + 4]; - - BLI_join_dirfile(tmp, sizeof(tmp), path, parent_dir); - BLI_path_normalize(NULL, tmp); /* does all the work of normalizing the path for us */ - - if (!BLI_path_extension_check(tmp, parent_dir)) { - strcpy(path, tmp); /* We assume the parent directory is always shorter. */ - return true; + /* Use #BLI_path_name_at_index instead of checking if the strings ends with `parent_dir` + * to ensure the logic isn't confused by: + * - Directory names that happen to end with `..`. + * - When `path` is empty, the contents will be `../` + * which would cause checking for a tailing `/../` fail. + * Extracting the span of the final directory avoids both these issues. */ + int tail_ofs = 0, tail_len = 0; + if (!BLI_path_name_at_index(path, -1, &tail_ofs, &tail_len)) { + return false; + } + if (tail_len == 1) { + /* Last path is ".", as normalize should remove this, it's safe to assume failure. + * This happens when the input a single period (possibly with slashes before or after). */ + if (path[tail_ofs] == '.') { + return false; + } } - return false; + /* Input paths should already be normalized if `..` is part of the path. */ + BLI_assert(!((tail_len == 2) && (path[tail_ofs] == '.') && (path[tail_ofs + 1] == '.'))); + path[tail_ofs] = '\0'; + return true; } bool BLI_path_parent_dir_until_exists(char *dir) @@ -1025,7 +1039,7 @@ bool BLI_path_abs_from_cwd(char *path, const size_t maxlen) if (BLI_current_working_dir(cwd, sizeof(cwd))) { char origpath[FILE_MAX]; BLI_strncpy(origpath, path, FILE_MAX); - BLI_join_dirfile(path, maxlen, cwd, origpath); + BLI_path_join(path, maxlen, cwd, origpath); } else { printf("Could not get the current working directory - $PWD for an unknown reason.\n"); @@ -1347,7 +1361,7 @@ bool BLI_path_extension_ensure(char *path, size_t maxlen, const char *ext) ssize_t a; /* first check the extension is already there */ - if ((ext_len <= path_len) && (STREQ(path + (path_len - ext_len), ext))) { + if ((ext_len <= path_len) && STREQ(path + (path_len - ext_len), ext)) { return true; } @@ -1431,73 +1445,50 @@ const char *BLI_path_extension(const char *filepath) return extension; } -void BLI_path_append(char *__restrict dst, const size_t maxlen, const char *__restrict file) +size_t BLI_path_append(char *__restrict dst, const size_t maxlen, const char *__restrict file) { size_t dirlen = BLI_strnlen(dst, maxlen); - /* inline BLI_path_slash_ensure */ + /* Inline #BLI_path_slash_ensure. */ if ((dirlen > 0) && (dst[dirlen - 1] != SEP)) { dst[dirlen++] = SEP; dst[dirlen] = '\0'; } if (dirlen >= maxlen) { - return; /* fills the path */ + return dirlen; /* fills the path */ } - BLI_strncpy(dst + dirlen, file, maxlen - dirlen); + return dirlen + BLI_strncpy_rlen(dst + dirlen, file, maxlen - dirlen); } -void BLI_join_dirfile(char *__restrict dst, - const size_t maxlen, - const char *__restrict dir, - const char *__restrict file) +size_t BLI_path_append_dir(char *__restrict dst, const size_t maxlen, const char *__restrict dir) { -#ifdef DEBUG_STRSIZE - memset(dst, 0xff, sizeof(*dst) * maxlen); -#endif - size_t dirlen = BLI_strnlen(dir, maxlen); - - /* Arguments can't match. */ - BLI_assert(!ELEM(dst, dir, file)); - - /* Files starting with a separator cause a double-slash which could later be interpreted - * as a relative path where: `dir == "/"` and `file == "/file"` would result in "//file". */ - BLI_assert(file[0] != SEP); - - if (dirlen == maxlen) { - memcpy(dst, dir, dirlen); - dst[dirlen - 1] = '\0'; - return; /* dir fills the path */ - } - - memcpy(dst, dir, dirlen + 1); - - if (dirlen + 1 >= maxlen) { - return; /* fills the path */ - } - - /* inline BLI_path_slash_ensure */ - if ((dirlen > 0) && !ELEM(dst[dirlen - 1], SEP, ALTSEP)) { - dst[dirlen++] = SEP; - dst[dirlen] = '\0'; - } - - if (dirlen >= maxlen) { - return; /* fills the path */ + size_t dirlen = BLI_path_append(dst, maxlen, dir); + if (dirlen + 1 < maxlen) { + /* Inline #BLI_path_slash_ensure. */ + if ((dirlen > 0) && (dst[dirlen - 1] != SEP)) { + dst[dirlen++] = SEP; + dst[dirlen] = '\0'; + } } - - BLI_strncpy(dst + dirlen, file, maxlen - dirlen); + return dirlen; } -size_t BLI_path_join(char *__restrict dst, const size_t dst_len, const char *path, ...) +size_t BLI_path_join_array(char *__restrict dst, + const size_t dst_len, + const char *path_array[], + const int path_array_num) { + BLI_assert(path_array_num > 0); #ifdef DEBUG_STRSIZE memset(dst, 0xff, sizeof(*dst) * dst_len); #endif if (UNLIKELY(dst_len == 0)) { return 0; } + const char *path = path_array[0]; + const size_t dst_last = dst_len - 1; size_t ofs = BLI_strncpy_rlen(dst, path, dst_len); @@ -1505,37 +1496,58 @@ size_t BLI_path_join(char *__restrict dst, const size_t dst_len, const char *pat return ofs; } +#ifdef WIN32 + /* Special case "//" for relative paths, don't use separator #SEP + * as this has a special meaning on both WIN32 & UNIX. + * Without this check joining `"//", "path"`. results in `"//\path"`. */ + if (ofs != 0) { + size_t i; + for (i = 0; i < ofs; i++) { + if (dst[i] != '/') { + break; + } + } + if (i == ofs) { + /* All slashes, keep them as-is, and join the remaining path array. */ + return path_array_num > 1 ? + BLI_path_join_array( + dst + ofs, dst_len - ofs, &path_array[1], path_array_num - 1) : + ofs; + } + } +#endif + /* Remove trailing slashes, unless there are *only* trailing slashes * (allow `//` or `//some_path` as the first argument). */ bool has_trailing_slash = false; if (ofs != 0) { size_t len = ofs; - while ((len != 0) && ELEM(path[len - 1], SEP, ALTSEP)) { + while ((len != 0) && (path[len - 1] == SEP)) { len -= 1; } + if (len != 0) { ofs = len; } has_trailing_slash = (path[len] != '\0'); } - va_list args; - va_start(args, path); - while ((path = (const char *)va_arg(args, const char *))) { + for (int path_index = 1; path_index < path_array_num; path_index++) { + path = path_array[path_index]; has_trailing_slash = false; const char *path_init = path; - while (ELEM(path[0], SEP, ALTSEP)) { + while (path[0] == SEP) { path++; } size_t len = strlen(path); if (len != 0) { - while ((len != 0) && ELEM(path[len - 1], SEP, ALTSEP)) { + while ((len != 0) && (path[len - 1] == SEP)) { len -= 1; } if (len != 0) { /* the very first path may have a slash at the end */ - if (ofs && !ELEM(dst[ofs - 1], SEP, ALTSEP)) { + if (ofs && (dst[ofs - 1] != SEP)) { dst[ofs++] = SEP; if (ofs == dst_last) { break; @@ -1556,10 +1568,9 @@ size_t BLI_path_join(char *__restrict dst, const size_t dst_len, const char *pat has_trailing_slash = (path_init != path); } } - va_end(args); if (has_trailing_slash) { - if ((ofs != dst_last) && (ofs != 0) && (ELEM(dst[ofs - 1], SEP, ALTSEP) == 0)) { + if ((ofs != dst_last) && (ofs != 0) && (dst[ofs - 1] != SEP)) { dst[ofs++] = SEP; } } @@ -1576,53 +1587,64 @@ const char *BLI_path_basename(const char *path) return filename ? filename + 1 : path; } -bool BLI_path_name_at_index(const char *__restrict path, - const int index, - int *__restrict r_offset, - int *__restrict r_len) +static bool path_name_at_index_forward(const char *__restrict path, + const int index, + int *__restrict r_offset, + int *__restrict r_len) { - if (index >= 0) { - int index_step = 0; - int prev = -1; - int i = 0; - while (true) { - const char c = path[i]; - if (ELEM(c, SEP, ALTSEP, '\0')) { - if (prev + 1 != i) { - prev += 1; + BLI_assert(index >= 0); + int index_step = 0; + int prev = -1; + int i = 0; + while (true) { + const char c = path[i]; + if (ELEM(c, SEP, '\0')) { + if (prev + 1 != i) { + prev += 1; + /* Skip '/./' (behave as if they don't exist). */ + if (!((i - prev == 1) && (prev != 0) && (path[prev] == '.'))) { if (index_step == index) { *r_offset = prev; *r_len = i - prev; - // printf("!!! %d %d\n", start, end); return true; } index_step += 1; } - if (c == '\0') { - break; - } - prev = i; } - i += 1; + if (c == '\0') { + break; + } + prev = i; } - return false; + i += 1; } + return false; +} - /* negative number, reverse where -1 is the last element */ +static bool path_name_at_index_backward(const char *__restrict path, + const int index, + int *__restrict r_offset, + int *__restrict r_len) +{ + /* Negative number, reverse where -1 is the last element. */ + BLI_assert(index < 0); int index_step = -1; int prev = strlen(path); int i = prev - 1; while (true) { const char c = i >= 0 ? path[i] : '\0'; - if (ELEM(c, SEP, ALTSEP, '\0')) { + if (ELEM(c, SEP, '\0')) { if (prev - 1 != i) { i += 1; - if (index_step == index) { - *r_offset = i; - *r_len = prev - i; - return true; + /* Skip '/./' (behave as if they don't exist). */ + if (!((prev - i == 1) && (i != 0) && (path[i] == '.'))) { + if (index_step == index) { + *r_offset = i; + *r_len = prev - i; + return true; + } + index_step -= 1; } - index_step -= 1; } if (c == '\0') { break; @@ -1634,6 +1656,15 @@ bool BLI_path_name_at_index(const char *__restrict path, return false; } +bool BLI_path_name_at_index(const char *__restrict path, + const int index, + int *__restrict r_offset, + int *__restrict r_len) +{ + return (index >= 0) ? path_name_at_index_forward(path, index, r_offset, r_len) : + path_name_at_index_backward(path, index, r_offset, r_len); +} + bool BLI_path_contains(const char *container_path, const char *containee_path) { char container_native[PATH_MAX]; @@ -1662,7 +1693,7 @@ bool BLI_path_contains(const char *container_path, const char *containee_path) /* Add a trailing slash to prevent same-prefix directories from matching. * e.g. "/some/path" doesn't contain "/some/path_lib". */ - BLI_path_slash_ensure(container_native); + BLI_path_slash_ensure(container_native, sizeof(container_native)); return BLI_str_startswith(containee_native, container_native); } @@ -1697,13 +1728,17 @@ const char *BLI_path_slash_rfind(const char *string) return (lfslash > lbslash) ? lfslash : lbslash; } -int BLI_path_slash_ensure(char *string) +int BLI_path_slash_ensure(char *string, size_t string_maxlen) { int len = strlen(string); + BLI_assert(len < string_maxlen); if (len == 0 || string[len - 1] != SEP) { - string[len] = SEP; - string[len + 1] = '\0'; - return len + 1; + /* Avoid unlikely buffer overflow. */ + if (len + 1 < string_maxlen) { + string[len] = SEP; + string[len + 1] = '\0'; + return len + 1; + } } return len; } diff --git a/source/blender/blenlib/intern/polyfill_2d.c b/source/blender/blenlib/intern/polyfill_2d.c index eed87eda436..2b59de5b569 100644 --- a/source/blender/blenlib/intern/polyfill_2d.c +++ b/source/blender/blenlib/intern/polyfill_2d.c @@ -373,12 +373,12 @@ static bool kdtree2d_isect_tri_recursive(const struct KDTree2D *tree, # define KDTREE2D_ISECT_TRI_RECURSE_NEG \ (((node->neg != KDNODE_UNSET) && (co[node->axis] >= bounds[node->axis].min)) && \ - (kdtree2d_isect_tri_recursive( \ - tree, tri_index, tri_coords, tri_center, bounds, &tree->nodes[node->neg]))) + kdtree2d_isect_tri_recursive( \ + tree, tri_index, tri_coords, tri_center, bounds, &tree->nodes[node->neg])) # define KDTREE2D_ISECT_TRI_RECURSE_POS \ (((node->pos != KDNODE_UNSET) && (co[node->axis] <= bounds[node->axis].max)) && \ - (kdtree2d_isect_tri_recursive( \ - tree, tri_index, tri_coords, tri_center, bounds, &tree->nodes[node->pos]))) + kdtree2d_isect_tri_recursive( \ + tree, tri_index, tri_coords, tri_center, bounds, &tree->nodes[node->pos])) if (tri_center[node->axis] > co[node->axis]) { if (KDTREE2D_ISECT_TRI_RECURSE_POS) { diff --git a/source/blender/blenlib/intern/rand.cc b/source/blender/blenlib/intern/rand.cc index f6d91cdcc4f..2e9b15c623e 100644 --- a/source/blender/blenlib/intern/rand.cc +++ b/source/blender/blenlib/intern/rand.cc @@ -24,7 +24,7 @@ #include "BLI_strict_flags.h" #include "BLI_sys_types.h" -extern "C" unsigned char BLI_noise_hash_uchar_512[512]; /* noise.c */ +extern "C" uchar BLI_noise_hash_uchar_512[512]; /* noise.c */ #define hash BLI_noise_hash_uchar_512 /** @@ -36,14 +36,14 @@ struct RNG { MEM_CXX_CLASS_ALLOC_FUNCS("RNG") }; -RNG *BLI_rng_new(unsigned int seed) +RNG *BLI_rng_new(uint seed) { RNG *rng = new RNG(); rng->rng.seed(seed); return rng; } -RNG *BLI_rng_new_srandom(unsigned int seed) +RNG *BLI_rng_new_srandom(uint seed) { RNG *rng = new RNG(); rng->rng.seed_random(seed); @@ -60,19 +60,19 @@ void BLI_rng_free(RNG *rng) delete rng; } -void BLI_rng_seed(RNG *rng, unsigned int seed) +void BLI_rng_seed(RNG *rng, uint seed) { rng->rng.seed(seed); } -void BLI_rng_srandom(RNG *rng, unsigned int seed) +void BLI_rng_srandom(RNG *rng, uint seed) { rng->rng.seed_random(seed); } void BLI_rng_get_char_n(RNG *rng, char *bytes, size_t bytes_len) { - rng->rng.get_bytes(blender::MutableSpan(bytes, static_cast<int64_t>(bytes_len))); + rng->rng.get_bytes(blender::MutableSpan(bytes, int64_t(bytes_len))); } int BLI_rng_get_int(RNG *rng) @@ -80,7 +80,7 @@ int BLI_rng_get_int(RNG *rng) return rng->rng.get_int32(); } -unsigned int BLI_rng_get_uint(RNG *rng) +uint BLI_rng_get_uint(RNG *rng) { return rng->rng.get_uint32(); } @@ -117,21 +117,21 @@ void BLI_rng_get_tri_sample_float_v3( copy_v3_v3(r_pt, rng->rng.get_triangle_sample_3d(v1, v2, v3)); } -void BLI_rng_shuffle_array(RNG *rng, void *data, unsigned int elem_size_i, unsigned int elem_num) +void BLI_rng_shuffle_array(RNG *rng, void *data, uint elem_size_i, uint elem_num) { if (elem_num <= 1) { return; } const uint elem_size = elem_size_i; - unsigned int i = elem_num; + uint i = elem_num; void *temp = malloc(elem_size); while (i--) { - const unsigned int j = BLI_rng_get_uint(rng) % elem_num; + const uint j = BLI_rng_get_uint(rng) % elem_num; if (i != j) { - void *iElem = (unsigned char *)data + i * elem_size_i; - void *jElem = (unsigned char *)data + j * elem_size_i; + void *iElem = (uchar *)data + i * elem_size_i; + void *jElem = (uchar *)data + j * elem_size_i; memcpy(temp, iElem, elem_size); memcpy(iElem, jElem, elem_size); memcpy(jElem, temp, elem_size); @@ -141,15 +141,15 @@ void BLI_rng_shuffle_array(RNG *rng, void *data, unsigned int elem_size_i, unsig free(temp); } -void BLI_rng_shuffle_bitmap(struct RNG *rng, BLI_bitmap *bitmap, unsigned int bits_num) +void BLI_rng_shuffle_bitmap(struct RNG *rng, BLI_bitmap *bitmap, uint bits_num) { if (bits_num <= 1) { return; } - unsigned int i = bits_num; + uint i = bits_num; while (i--) { - const unsigned int j = BLI_rng_get_uint(rng) % bits_num; + const uint j = BLI_rng_get_uint(rng) % bits_num; if (i != j) { const bool i_bit = BLI_BITMAP_TEST(bitmap, i); const bool j_bit = BLI_BITMAP_TEST(bitmap, j); @@ -161,12 +161,12 @@ void BLI_rng_shuffle_bitmap(struct RNG *rng, BLI_bitmap *bitmap, unsigned int bi void BLI_rng_skip(RNG *rng, int n) { - rng->rng.skip((uint)n); + rng->rng.skip(uint(n)); } /***/ -void BLI_array_frand(float *ar, int count, unsigned int seed) +void BLI_array_frand(float *ar, int count, uint seed) { RNG rng; @@ -177,7 +177,7 @@ void BLI_array_frand(float *ar, int count, unsigned int seed) } } -float BLI_hash_frand(unsigned int seed) +float BLI_hash_frand(uint seed) { RNG rng; @@ -185,10 +185,7 @@ float BLI_hash_frand(unsigned int seed) return BLI_rng_get_float(&rng); } -void BLI_array_randomize(void *data, - unsigned int elem_size, - unsigned int elem_num, - unsigned int seed) +void BLI_array_randomize(void *data, uint elem_size, uint elem_num, uint seed) { RNG rng; @@ -196,7 +193,7 @@ void BLI_array_randomize(void *data, BLI_rng_shuffle_array(&rng, data, elem_size, elem_num); } -void BLI_bitmap_randomize(BLI_bitmap *bitmap, unsigned int bits_num, unsigned int seed) +void BLI_bitmap_randomize(BLI_bitmap *bitmap, uint bits_num, uint seed) { RNG rng; @@ -208,7 +205,7 @@ void BLI_bitmap_randomize(BLI_bitmap *bitmap, unsigned int bits_num, unsigned in static RNG rng_tab[BLENDER_MAX_THREADS]; -void BLI_thread_srandom(int thread, unsigned int seed) +void BLI_thread_srandom(int thread, uint seed) { if (thread >= BLENDER_MAX_THREADS) { thread = 0; @@ -237,12 +234,12 @@ struct RNG_THREAD_ARRAY { RNG_THREAD_ARRAY *BLI_rng_threaded_new() { - unsigned int i; + uint i; RNG_THREAD_ARRAY *rngarr = (RNG_THREAD_ARRAY *)MEM_mallocN(sizeof(RNG_THREAD_ARRAY), "random_array"); for (i = 0; i < BLENDER_MAX_THREADS; i++) { - BLI_rng_srandom(&rngarr->rng_tab[i], (unsigned int)clock()); + BLI_rng_srandom(&rngarr->rng_tab[i], uint(clock())); } return rngarr; @@ -284,9 +281,9 @@ BLI_INLINE double halton_ex(double invprimes, double *offset) return *offset; } -void BLI_halton_1d(unsigned int prime, double offset, int n, double *r) +void BLI_halton_1d(uint prime, double offset, int n, double *r) { - const double invprime = 1.0 / (double)prime; + const double invprime = 1.0 / double(prime); *r = 0.0; @@ -295,9 +292,9 @@ void BLI_halton_1d(unsigned int prime, double offset, int n, double *r) } } -void BLI_halton_2d(const unsigned int prime[2], double offset[2], int n, double *r) +void BLI_halton_2d(const uint prime[2], double offset[2], int n, double *r) { - const double invprimes[2] = {1.0 / (double)prime[0], 1.0 / (double)prime[1]}; + const double invprimes[2] = {1.0 / double(prime[0]), 1.0 / double(prime[1])}; r[0] = r[1] = 0.0; @@ -308,10 +305,10 @@ void BLI_halton_2d(const unsigned int prime[2], double offset[2], int n, double } } -void BLI_halton_3d(const unsigned int prime[3], double offset[3], int n, double *r) +void BLI_halton_3d(const uint prime[3], double offset[3], int n, double *r) { const double invprimes[3] = { - 1.0 / (double)prime[0], 1.0 / (double)prime[1], 1.0 / (double)prime[2]}; + 1.0 / double(prime[0]), 1.0 / double(prime[1]), 1.0 / double(prime[2])}; r[0] = r[1] = r[2] = 0.0; @@ -322,9 +319,9 @@ void BLI_halton_3d(const unsigned int prime[3], double offset[3], int n, double } } -void BLI_halton_2d_sequence(const unsigned int prime[2], double offset[2], int n, double *r) +void BLI_halton_2d_sequence(const uint prime[2], double offset[2], int n, double *r) { - const double invprimes[2] = {1.0 / (double)prime[0], 1.0 / (double)prime[1]}; + const double invprimes[2] = {1.0 / double(prime[0]), 1.0 / double(prime[1])}; for (int s = 0; s < n; s++) { for (int i = 0; i < 2; i++) { @@ -335,7 +332,7 @@ void BLI_halton_2d_sequence(const unsigned int prime[2], double offset[2], int n /* From "Sampling with Hammersley and Halton Points" TT Wong * Appendix: Source Code 1 */ -BLI_INLINE double radical_inverse(unsigned int n) +BLI_INLINE double radical_inverse(uint n) { double u = 0; @@ -350,15 +347,15 @@ BLI_INLINE double radical_inverse(unsigned int n) return u; } -void BLI_hammersley_1d(unsigned int n, double *r) +void BLI_hammersley_1d(uint n, double *r) { *r = radical_inverse(n); } -void BLI_hammersley_2d_sequence(unsigned int n, double *r) +void BLI_hammersley_2d_sequence(uint n, double *r) { - for (unsigned int s = 0; s < n; s++) { - r[s * 2 + 0] = (double)(s + 0.5) / (double)n; + for (uint s = 0; s < n; s++) { + r[s * 2 + 0] = double(s + 0.5) / double(n); r[s * 2 + 1] = radical_inverse(s); } } @@ -380,12 +377,12 @@ int RandomNumberGenerator::round_probabilistic(float x) BLI_assert(x >= 0.0f); const float round_up_probability = fractf(x); const bool round_up = round_up_probability > this->get_float(); - return (int)x + (int)round_up; + return int(x) + int(round_up); } float2 RandomNumberGenerator::get_unit_float2() { - float a = (float)(M_PI * 2.0) * this->get_float(); + float a = float(M_PI * 2.0) * this->get_float(); return {cosf(a), sinf(a)}; } @@ -394,7 +391,7 @@ float3 RandomNumberGenerator::get_unit_float3() float z = (2.0f * this->get_float()) - 1.0f; float r = 1.0f - z * z; if (r > 0.0f) { - float a = (float)(M_PI * 2.0) * this->get_float(); + float a = float(M_PI * 2.0) * this->get_float(); r = sqrtf(r); float x = r * cosf(a); float y = r * sinf(a); @@ -444,7 +441,7 @@ float3 RandomNumberGenerator::get_triangle_sample_3d(float3 v1, float3 v2, float void RandomNumberGenerator::get_bytes(MutableSpan<char> r_bytes) { constexpr int64_t mask_bytes = 2; - constexpr int64_t rand_stride = static_cast<int64_t>(sizeof(x_)) - mask_bytes; + constexpr int64_t rand_stride = int64_t(sizeof(x_)) - mask_bytes; int64_t last_len = 0; int64_t trim_len = r_bytes.size(); diff --git a/source/blender/blenlib/intern/scanfill.c b/source/blender/blenlib/intern/scanfill.c index 92fd7f5937b..4145125c1d7 100644 --- a/source/blender/blenlib/intern/scanfill.c +++ b/source/blender/blenlib/intern/scanfill.c @@ -33,9 +33,9 @@ /* local types */ typedef struct PolyFill { - unsigned int edges, verts; + uint edges, verts; float min_xy[2], max_xy[2]; - unsigned short nr; + ushort nr; bool f; } PolyFill; @@ -44,7 +44,7 @@ typedef struct ScanFillVertLink { ScanFillEdge *edge_first, *edge_last; } ScanFillVertLink; -/* local funcs */ +/* Local functions. */ #define SF_EPSILON 0.00003f #define SF_EPSILON_SQ (SF_EPSILON * SF_EPSILON) @@ -304,9 +304,7 @@ static bool addedgetoscanvert(ScanFillVertLink *sc, ScanFillEdge *eed) return true; } -static ScanFillVertLink *addedgetoscanlist(ScanFillVertLink *scdata, - ScanFillEdge *eed, - unsigned int len) +static ScanFillVertLink *addedgetoscanlist(ScanFillVertLink *scdata, ScanFillEdge *eed, uint len) { /* inserts edge at correct location in ScanFillVertLink list */ /* returns sc when edge already exists */ @@ -428,10 +426,7 @@ static void testvertexnearedge(ScanFillContext *sf_ctx) } } -static void splitlist(ScanFillContext *sf_ctx, - ListBase *tempve, - ListBase *temped, - unsigned short nr) +static void splitlist(ScanFillContext *sf_ctx, ListBase *tempve, ListBase *temped, ushort nr) { /* Everything is in temp-list, write only poly nr to fill-list. */ ScanFillVert *eve, *eve_next; @@ -457,14 +452,14 @@ static void splitlist(ScanFillContext *sf_ctx, } } -static unsigned int scanfill(ScanFillContext *sf_ctx, PolyFill *pf, const int flag) +static uint scanfill(ScanFillContext *sf_ctx, PolyFill *pf, const int flag) { ScanFillVertLink *scdata; ScanFillVertLink *sc = NULL, *sc1; ScanFillVert *eve, *v1, *v2, *v3; ScanFillEdge *eed, *eed_next, *ed1, *ed2, *ed3; - unsigned int a, b, verts, maxface, totface; - const unsigned short nr = pf->nr; + uint a, b, verts, maxface, totface; + const ushort nr = pf->nr; bool twoconnected = false; /* PRINTS */ @@ -810,7 +805,7 @@ void BLI_scanfill_end_arena(ScanFillContext *sf_ctx, MemArena *arena) BLI_listbase_clear(&sf_ctx->fillfacebase); } -unsigned int BLI_scanfill_calc_ex(ScanFillContext *sf_ctx, const int flag, const float nor_proj[3]) +uint BLI_scanfill_calc_ex(ScanFillContext *sf_ctx, const int flag, const float nor_proj[3]) { /* * - fill works with its own lists, so create that first (no faces!) @@ -825,8 +820,8 @@ unsigned int BLI_scanfill_calc_ex(ScanFillContext *sf_ctx, const int flag, const ScanFillEdge *eed, *eed_next; PolyFill *pflist, *pf; float *min_xy_p, *max_xy_p; - unsigned int totfaces = 0; /* total faces added */ - unsigned short a, c, poly = 0; + uint totfaces = 0; /* total faces added */ + ushort a, c, poly = 0; bool ok; float mat_2d[3][3]; @@ -895,7 +890,7 @@ unsigned int BLI_scanfill_calc_ex(ScanFillContext *sf_ctx, const int flag, const /* STEP 1: COUNT POLYS */ if (sf_ctx->poly_nr != SF_POLY_UNSET) { - poly = (unsigned short)(sf_ctx->poly_nr + 1); + poly = (ushort)(sf_ctx->poly_nr + 1); sf_ctx->poly_nr = SF_POLY_UNSET; } @@ -905,7 +900,7 @@ unsigned int BLI_scanfill_calc_ex(ScanFillContext *sf_ctx, const int flag, const /* get first vertex with no poly number */ if (eve->poly_nr == SF_POLY_UNSET) { - unsigned int toggle = 0; + uint toggle = 0; /* now a sort of select connected */ ok = true; eve->poly_nr = poly; @@ -962,7 +957,7 @@ unsigned int BLI_scanfill_calc_ex(ScanFillContext *sf_ctx, const int flag, const /* STEP 2: remove loose edges and strings of edges */ if (flag & BLI_SCANFILL_CALC_LOOSE) { - unsigned int toggle = 0; + uint toggle = 0; for (eed = sf_ctx->filledgebase.first; eed; eed = eed->next) { if (eed->v1->edge_count++ > 250) { break; @@ -1069,7 +1064,7 @@ unsigned int BLI_scanfill_calc_ex(ScanFillContext *sf_ctx, const int flag, const * WATCH IT: ONLY WORKS WITH SORTED POLYS!!! */ if ((flag & BLI_SCANFILL_CALC_HOLES) && (poly > 1)) { - unsigned short *polycache, *pc; + ushort *polycache, *pc; /* so, sort first */ qsort(pflist, (size_t)poly, sizeof(PolyFill), vergpoly); @@ -1086,7 +1081,7 @@ unsigned int BLI_scanfill_calc_ex(ScanFillContext *sf_ctx, const int flag, const polycache = pc = MEM_callocN(sizeof(*polycache) * (size_t)poly, "polycache"); pf = pflist; for (a = 0; a < poly; a++, pf++) { - for (c = (unsigned short)(a + 1); c < poly; c++) { + for (c = (ushort)(a + 1); c < poly; c++) { /* if 'a' inside 'c': join (bbox too) * Careful: 'a' can also be inside another poly. @@ -1142,7 +1137,7 @@ unsigned int BLI_scanfill_calc_ex(ScanFillContext *sf_ctx, const int flag, const return totfaces; } -unsigned int BLI_scanfill_calc(ScanFillContext *sf_ctx, const int flag) +uint BLI_scanfill_calc(ScanFillContext *sf_ctx, const int flag) { return BLI_scanfill_calc_ex(sf_ctx, flag, NULL); } diff --git a/source/blender/blenlib/intern/scanfill_utils.c b/source/blender/blenlib/intern/scanfill_utils.c index 1d2225a5b56..6bf3c4719f6 100644 --- a/source/blender/blenlib/intern/scanfill_utils.c +++ b/source/blender/blenlib/intern/scanfill_utils.c @@ -41,14 +41,14 @@ typedef struct ScanFillIsect { #define EFLAG_SET(eed, val) \ { \ CHECK_TYPE(eed, ScanFillEdge *); \ - (eed)->user_flag = (eed)->user_flag | (unsigned int)val; \ + (eed)->user_flag = (eed)->user_flag | (uint)val; \ } \ (void)0 #if 0 # define EFLAG_CLEAR(eed, val) \ { \ CHECK_TYPE(eed, ScanFillEdge *); \ - (eed)->user_flag = (eed)->user_flag & ~(unsigned int)val; \ + (eed)->user_flag = (eed)->user_flag & ~(uint)val; \ } \ (void)0 #endif @@ -56,14 +56,14 @@ typedef struct ScanFillIsect { #define VFLAG_SET(eve, val) \ { \ CHECK_TYPE(eve, ScanFillVert *); \ - (eve)->user_flag = (eve)->user_flag | (unsigned int)val; \ + (eve)->user_flag = (eve)->user_flag | (uint)val; \ } \ (void)0 #if 0 # define VFLAG_CLEAR(eve, val) \ { \ CHECK_TYPE(eve, ScanFillVert *); \ - (eve)->user_flags = (eve)->user_flag & ~(unsigned int)val; \ + (eve)->user_flags = (eve)->user_flag & ~(uint)val; \ } \ (void)0 #endif @@ -72,7 +72,7 @@ typedef struct ScanFillIsect { void BLI_scanfill_obj_dump(ScanFillContext *sf_ctx) { FILE *f = fopen("test.obj", "w"); - unsigned int i = 1; + uint i = 1; ScanFillVert *eve; ScanFillEdge *eed; @@ -130,7 +130,7 @@ static int edge_isect_ls_sort_cb(void *thunk, const void *def_a_ptr, const void } static ScanFillEdge *edge_step(PolyInfo *poly_info, - const unsigned short poly_nr, + const ushort poly_nr, ScanFillVert *v_prev, ScanFillVert *v_curr, ScanFillEdge *e_curr) @@ -158,7 +158,7 @@ static ScanFillEdge *edge_step(PolyInfo *poly_info, static bool scanfill_preprocess_self_isect(ScanFillContext *sf_ctx, PolyInfo *poly_info, - const unsigned short poly_nr, + const ushort poly_nr, ListBase *filledgebase) { PolyInfo *pi = &poly_info[poly_nr]; @@ -359,8 +359,8 @@ bool BLI_scanfill_calc_self_isect(ScanFillContext *sf_ctx, ListBase *remvertbase, ListBase *remedgebase) { - const unsigned int poly_num = (unsigned int)sf_ctx->poly_nr + 1; - unsigned int eed_index = 0; + const uint poly_num = (uint)sf_ctx->poly_nr + 1; + uint eed_index = 0; int totvert_new = 0; bool changed = false; @@ -378,7 +378,7 @@ bool BLI_scanfill_calc_self_isect(ScanFillContext *sf_ctx, poly_info->edge_last = sf_ctx->filledgebase.last; } else { - unsigned short poly_nr; + ushort poly_nr; ScanFillEdge *eed; poly_nr = 0; @@ -407,7 +407,7 @@ bool BLI_scanfill_calc_self_isect(ScanFillContext *sf_ctx, /* self-intersect each polygon */ { - unsigned short poly_nr; + ushort poly_nr; for (poly_nr = 0; poly_nr < poly_num; poly_nr++) { changed |= scanfill_preprocess_self_isect(sf_ctx, poly_info, poly_nr, remedgebase); } diff --git a/source/blender/blenlib/intern/stack.c b/source/blender/blenlib/intern/stack.c index ff34cfe41cb..1a83e8cd86c 100644 --- a/source/blender/blenlib/intern/stack.c +++ b/source/blender/blenlib/intern/stack.c @@ -141,7 +141,7 @@ void BLI_stack_pop(BLI_Stack *stack, void *dst) BLI_stack_discard(stack); } -void BLI_stack_pop_n(BLI_Stack *stack, void *dst, unsigned int n) +void BLI_stack_pop_n(BLI_Stack *stack, void *dst, uint n) { BLI_assert(n <= BLI_stack_count(stack)); @@ -151,7 +151,7 @@ void BLI_stack_pop_n(BLI_Stack *stack, void *dst, unsigned int n) } } -void BLI_stack_pop_n_reverse(BLI_Stack *stack, void *dst, unsigned int n) +void BLI_stack_pop_n_reverse(BLI_Stack *stack, void *dst, uint n) { BLI_assert(n <= BLI_stack_count(stack)); diff --git a/source/blender/blenlib/intern/storage.c b/source/blender/blenlib/intern/storage.c index 4fa5ca0c088..c04fc41ab4d 100644 --- a/source/blender/blenlib/intern/storage.c +++ b/source/blender/blenlib/intern/storage.c @@ -259,7 +259,7 @@ eFileAttributes BLI_file_attributes(const char *path) #ifndef __APPLE__ bool BLI_file_alias_target(const char *filepath, /* This parameter can only be `const` on Linux since - * redirections are not supported there. + * redirection is not supported there. * NOLINTNEXTLINE: readability-non-const-parameter. */ char r_targetpath[/*FILE_MAXDIR*/]) { diff --git a/source/blender/blenlib/intern/string.c b/source/blender/blenlib/intern/string.c index 976b9a5cd02..3c3dcaf90f4 100644 --- a/source/blender/blenlib/intern/string.c +++ b/source/blender/blenlib/intern/string.c @@ -241,6 +241,17 @@ char *BLI_sprintfN(const char *__restrict format, ...) return n; } +int BLI_sprintf(char *__restrict str, const char *__restrict format, ...) +{ + va_list arg; + + va_start(arg, format); + const int result = vsprintf(str, format, arg); + va_end(arg); + + return result; +} + /** \} */ /* -------------------------------------------------------------------- */ @@ -314,7 +325,7 @@ size_t BLI_str_unescape_ex(char *__restrict dst, break; } char c = *src; - if (UNLIKELY(c == '\\') && (str_unescape_pair(*(src + 1), &c))) { + if (UNLIKELY(c == '\\') && str_unescape_pair(*(src + 1), &c)) { src++; } dst[len++] = c; @@ -329,7 +340,7 @@ size_t BLI_str_unescape(char *__restrict dst, const char *__restrict src, const size_t len = 0; for (const char *src_end = src + src_maxncpy; (src < src_end) && *src; src++) { char c = *src; - if (UNLIKELY(c == '\\') && (str_unescape_pair(*(src + 1), &c))) { + if (UNLIKELY(c == '\\') && str_unescape_pair(*(src + 1), &c)) { src++; } dst[len++] = c; @@ -1114,17 +1125,17 @@ static size_t BLI_str_format_int_grouped_ex(char src[16], char dst[16], int num_ size_t BLI_str_format_int_grouped(char dst[16], int num) { char src[16]; - int num_len = sprintf(src, "%d", num); + const int num_len = BLI_snprintf(src, sizeof(src), "%d", num); return BLI_str_format_int_grouped_ex(src, dst, num_len); } size_t BLI_str_format_uint64_grouped(char dst[16], uint64_t num) { - /* NOTE: Buffer to hold maximum unsigned int64, which is 1.8e+19. but + /* NOTE: Buffer to hold maximum `uint64`, which is 1.8e+19. but * we also need space for commas and null-terminator. */ char src[27]; - int num_len = sprintf(src, "%" PRIu64 "", num); + const int num_len = BLI_snprintf(src, sizeof(src), "%" PRIu64 "", num); return BLI_str_format_int_grouped_ex(src, dst, num_len); } @@ -1176,4 +1187,34 @@ void BLI_str_format_decimal_unit(char dst[7], int number_to_format) BLI_snprintf(dst, dst_len, "%.*f%s", decimals, number_to_format_converted, units[order]); } +void BLI_str_format_integer_unit(char dst[5], const int number_to_format) +{ + float number_to_format_converted = number_to_format; + int order = 0; + const float base = 1000; + const char *units[] = {"", "K", "M", "B"}; + const int units_num = ARRAY_SIZE(units); + + while ((fabsf(number_to_format_converted) >= base) && ((order + 1) < units_num)) { + number_to_format_converted /= base; + order++; + } + + const bool add_dot = (abs(number_to_format) > 99999) && fabsf(number_to_format_converted) > 99; + + if (add_dot) { + number_to_format_converted /= 100; + order++; + } + + const size_t dst_len = 5; + BLI_snprintf(dst, + dst_len, + "%s%s%d%s", + number_to_format < 0 ? "-" : "", + add_dot ? "." : "", + (int)floorf(fabsf(number_to_format_converted)), + units[order]); +} + /** \} */ diff --git a/source/blender/blenlib/intern/string_cursor_utf8.c b/source/blender/blenlib/intern/string_cursor_utf8.c index 7a23b4bb4ad..2405b134428 100644 --- a/source/blender/blenlib/intern/string_cursor_utf8.c +++ b/source/blender/blenlib/intern/string_cursor_utf8.c @@ -96,27 +96,35 @@ static eStrCursorDelimType cursor_delim_type_utf8(const char *ch_utf8, return cursor_delim_type_unicode(uch); } +/* Keep in sync with BLI_str_cursor_step_next_utf32. */ bool BLI_str_cursor_step_next_utf8(const char *str, size_t maxlen, int *pos) { + if ((*pos) >= (int)maxlen) { + return false; + } const char *str_end = str + (maxlen + 1); const char *str_pos = str + (*pos); - const char *str_next = BLI_str_find_next_char_utf8(str_pos, str_end); - if (str_next != str_end) { - (*pos) += (str_next - str_pos); - if ((*pos) > (int)maxlen) { - (*pos) = (int)maxlen; - } - return true; + const char *str_next = str_pos; + do { + str_next = BLI_str_find_next_char_utf8(str_next, str_end); + } while (str_next < str_end && str_next[0] != 0 && BLI_str_utf8_char_width(str_next) < 1); + (*pos) += (str_next - str_pos); + if ((*pos) > (int)maxlen) { + (*pos) = (int)maxlen; } - return false; + return true; } -bool BLI_str_cursor_step_prev_utf8(const char *str, size_t UNUSED(maxlen), int *pos) +/* Keep in sync with BLI_str_cursor_step_prev_utf32. */ +bool BLI_str_cursor_step_prev_utf8(const char *str, size_t maxlen, int *pos) { - if ((*pos) > 0) { + if ((*pos) > 0 && (*pos) <= maxlen) { const char *str_pos = str + (*pos); - const char *str_prev = BLI_str_find_prev_char_utf8(str_pos, str); + const char *str_prev = str_pos; + do { + str_prev = BLI_str_find_prev_char_utf8(str_prev, str); + } while (str_prev > str && BLI_str_utf8_char_width(str_prev) == 0); (*pos) -= (str_pos - str_prev); return true; } @@ -202,26 +210,29 @@ void BLI_str_cursor_step_utf8(const char *str, } } -/* UTF32 version of BLI_str_cursor_step_utf8 (keep in sync!) - * less complex since it doesn't need to do multi-byte stepping. - */ - -/* helper funcs so we can match BLI_str_cursor_step_utf8 */ -static bool cursor_step_next_utf32(const char32_t *UNUSED(str), size_t maxlen, int *pos) +/* Keep in sync with BLI_str_cursor_step_next_utf8. */ +bool BLI_str_cursor_step_next_utf32(const char32_t *str, size_t maxlen, int *pos) { if ((*pos) >= (int)maxlen) { return false; } - (*pos)++; + do { + (*pos)++; + } while (*pos < (int)maxlen && str[*pos] != 0 && BLI_wcwidth(str[*pos]) == 0); + return true; } -static bool cursor_step_prev_utf32(const char32_t *UNUSED(str), size_t UNUSED(maxlen), int *pos) +/* Keep in sync with BLI_str_cursor_step_prev_utf8. */ +bool BLI_str_cursor_step_prev_utf32(const char32_t *str, size_t UNUSED(maxlen), int *pos) { if ((*pos) <= 0) { return false; } - (*pos)--; + do { + (*pos)--; + } while (*pos > 0 && BLI_wcwidth(str[*pos]) == 0); + return true; } @@ -236,7 +247,7 @@ void BLI_str_cursor_step_utf32(const char32_t *str, if (direction == STRCUR_DIR_NEXT) { if (use_init_step) { - cursor_step_next_utf32(str, maxlen, pos); + BLI_str_cursor_step_next_utf32(str, maxlen, pos); } else { BLI_assert(jump == STRCUR_JUMP_DELIM); @@ -250,7 +261,7 @@ void BLI_str_cursor_step_utf32(const char32_t *str, * look at function cursor_delim_type_unicode() for complete * list of special character, ctr -> */ while ((*pos) < maxlen) { - if (cursor_step_next_utf32(str, maxlen, pos)) { + if (BLI_str_cursor_step_next_utf32(str, maxlen, pos)) { if ((jump != STRCUR_JUMP_ALL) && (delim_type != cursor_delim_type_unicode((uint)str[*pos]))) { break; @@ -264,7 +275,7 @@ void BLI_str_cursor_step_utf32(const char32_t *str, } else if (direction == STRCUR_DIR_PREV) { if (use_init_step) { - cursor_step_prev_utf32(str, maxlen, pos); + BLI_str_cursor_step_prev_utf32(str, maxlen, pos); } else { BLI_assert(jump == STRCUR_JUMP_DELIM); @@ -279,7 +290,7 @@ void BLI_str_cursor_step_utf32(const char32_t *str, * list of special character, ctr -> */ while ((*pos) > 0) { const int pos_prev = *pos; - if (cursor_step_prev_utf32(str, maxlen, pos)) { + if (BLI_str_cursor_step_prev_utf32(str, maxlen, pos)) { if ((jump != STRCUR_JUMP_ALL) && (delim_type != cursor_delim_type_unicode((uint)str[*pos]))) { /* left only: compensate for index/change in direction */ diff --git a/source/blender/blenlib/intern/string_search.cc b/source/blender/blenlib/intern/string_search.cc index 31ea24eb494..f87304863c9 100644 --- a/source/blender/blenlib/intern/string_search.cc +++ b/source/blender/blenlib/intern/string_search.cc @@ -18,7 +18,7 @@ namespace blender::string_search { static int64_t count_utf8_code_points(StringRef str) { - return static_cast<int64_t>(BLI_strnlen_utf8(str.data(), static_cast<size_t>(str.size()))); + return int64_t(BLI_strnlen_utf8(str.data(), size_t(str.size()))); } int damerau_levenshtein_distance(StringRef a, StringRef b) @@ -205,7 +205,7 @@ static bool match_word_initials(StringRef query, StringRef word = words[word_index]; /* Try to match the current character with the current word. */ - if (static_cast<int>(char_index) < word.size()) { + if (int(char_index) < word.size()) { const uint32_t char_unicode = BLI_str_utf8_as_unicode_step( word.data(), word.size(), &char_index); if (query_unicode == char_unicode) { @@ -345,7 +345,7 @@ void extract_normalized_words(StringRef str, LinearAllocator<> &allocator, Vector<StringRef, 64> &r_words) { - const uint32_t unicode_space = (uint32_t)' '; + const uint32_t unicode_space = uint32_t(' '); const uint32_t unicode_right_triangle = UI_MENU_ARROW_SEP_UNICODE; BLI_assert(unicode_space == BLI_str_utf8_as_unicode(" ")); @@ -358,7 +358,7 @@ void extract_normalized_words(StringRef str, /* Make a copy of the string so that we can edit it. */ StringRef str_copy = allocator.copy_string(str); char *mutable_copy = const_cast<char *>(str_copy.data()); - const size_t str_size_in_bytes = static_cast<size_t>(str.size()); + const size_t str_size_in_bytes = size_t(str.size()); BLI_str_tolower_ascii(mutable_copy, str_size_in_bytes); /* Iterate over all unicode code points to split individual words. */ @@ -371,8 +371,7 @@ void extract_normalized_words(StringRef str, size -= offset; if (is_separator(unicode)) { if (is_in_word) { - r_words.append( - str_copy.substr(static_cast<int>(word_start), static_cast<int>(offset - word_start))); + r_words.append(str_copy.substr(int(word_start), int(offset - word_start))); is_in_word = false; } } @@ -386,7 +385,7 @@ void extract_normalized_words(StringRef str, } /* If the last word is not followed by a separator, it has to be handled separately. */ if (is_in_word) { - r_words.append(str_copy.drop_prefix(static_cast<int>(word_start))); + r_words.append(str_copy.drop_prefix(int(word_start))); } } @@ -419,7 +418,7 @@ void BLI_string_search_add(StringSearch *search, StringRef str_ref{str}; string_search::extract_normalized_words(str_ref, search->allocator, words); search->items.append({search->allocator.construct_array_copy(words.as_span()), - (int)str_ref.size(), + int(str_ref.size()), user_data, weight}); } @@ -458,7 +457,7 @@ int BLI_string_search_query(StringSearch *search, const char *query, void ***r_d if (score == found_scores[0] && !query_str.is_empty()) { /* Sort items with best score by length. Shorter items are more likely the ones you are * looking for. This also ensures that exact matches will be at the top, even if the query is - * a substring of another item. */ + * a sub-string of another item. */ std::sort(indices.begin(), indices.end(), [&](int a, int b) { return search->items[a].length < search->items[b].length; }); @@ -472,7 +471,7 @@ int BLI_string_search_query(StringSearch *search, const char *query, void ***r_d } void **sorted_data = static_cast<void **>( - MEM_malloc_arrayN(static_cast<size_t>(sorted_result_indices.size()), sizeof(void *), AT)); + MEM_malloc_arrayN(size_t(sorted_result_indices.size()), sizeof(void *), AT)); for (const int i : sorted_result_indices.index_range()) { const int result_index = sorted_result_indices[i]; SearchItem &item = search->items[result_index]; diff --git a/source/blender/blenlib/intern/string_utf8.c b/source/blender/blenlib/intern/string_utf8.c index 17fb451e422..26facda7abf 100644 --- a/source/blender/blenlib/intern/string_utf8.c +++ b/source/blender/blenlib/intern/string_utf8.c @@ -55,11 +55,11 @@ ptrdiff_t BLI_str_utf8_invalid_byte(const char *str, size_t length) * length is in bytes, since without knowing whether the string is valid * it's hard to know how many characters there are! */ - const unsigned char *p, *perr, *pend = (const unsigned char *)str + length; - unsigned char c; + const uchar *p, *perr, *pend = (const uchar *)str + length; + uchar c; int ab; - for (p = (const unsigned char *)str; p < pend; p++, length--) { + for (p = (const uchar *)str; p < pend; p++, length--) { c = *p; perr = p; /* Erroneous char is always the first of an invalid utf8 sequence... */ if (ELEM(c, 0xfe, 0xff, 0x00)) { @@ -454,7 +454,7 @@ int BLI_str_utf8_size(const char *p) /* NOTE: uses glib functions but not from GLIB. */ int mask = 0, len; - const unsigned char c = (unsigned char)*p; + const uchar c = (uchar)*p; UTF8_COMPUTE(c, mask, len, -1); @@ -466,7 +466,7 @@ int BLI_str_utf8_size(const char *p) int BLI_str_utf8_size_safe(const char *p) { int mask = 0, len; - const unsigned char c = (unsigned char)*p; + const uchar c = (uchar)*p; UTF8_COMPUTE(c, mask, len, 1); @@ -482,7 +482,7 @@ uint BLI_str_utf8_as_unicode(const char *p) int i, len; uint mask = 0; uint result; - const unsigned char c = (unsigned char)*p; + const uchar c = (uchar)*p; UTF8_COMPUTE(c, mask, len, -1); if (UNLIKELY(len == -1)) { @@ -500,7 +500,7 @@ uint BLI_str_utf8_as_unicode_step_or_error(const char *__restrict p, int i, len; uint mask = 0; uint result; - const unsigned char c = (unsigned char)*(p += *index); + const uchar c = (uchar) * (p += *index); BLI_assert(*index < p_len); BLI_assert(c != '\0'); diff --git a/source/blender/blenlib/intern/string_utils.c b/source/blender/blenlib/intern/string_utils.c index 0b9baaff3e9..27734d2f429 100644 --- a/source/blender/blenlib/intern/string_utils.c +++ b/source/blender/blenlib/intern/string_utils.c @@ -344,10 +344,10 @@ bool BLI_uniquename( * * \{ */ -char *BLI_string_join_array(char *result, - size_t result_len, - const char *strings[], - uint strings_len) +size_t BLI_string_join_array(char *result, + size_t result_len, + const char *strings[], + uint strings_len) { char *c = result; char *c_end = &result[result_len - 1]; @@ -358,10 +358,10 @@ char *BLI_string_join_array(char *result, } } *c = '\0'; - return c; + return (size_t)(c - result); } -char *BLI_string_join_array_by_sep_char( +size_t BLI_string_join_array_by_sep_char( char *result, size_t result_len, char sep, const char *strings[], uint strings_len) { char *c = result; @@ -378,7 +378,7 @@ char *BLI_string_join_array_by_sep_char( } } *c = '\0'; - return c; + return (size_t)(c - result); } char *BLI_string_join_arrayN(const char *strings[], uint strings_len) diff --git a/source/blender/blenlib/intern/system.c b/source/blender/blenlib/intern/system.c index f7249e491d7..40a8fa24570 100644 --- a/source/blender/blenlib/intern/system.c +++ b/source/blender/blenlib/intern/system.c @@ -34,7 +34,7 @@ int BLI_cpu_support_sse2(void) return 1; #elif defined(__GNUC__) && defined(i386) /* for GCC x86 we check cpuid */ - unsigned int d; + uint d; __asm__( "pushl %%ebx\n\t" "cpuid\n\t" @@ -44,7 +44,7 @@ int BLI_cpu_support_sse2(void) return (d & 0x04000000) != 0; #elif (defined(_MSC_VER) && defined(_M_IX86)) /* also check cpuid for MSVC x86 */ - unsigned int d; + uint d; __asm { xor eax, eax inc eax diff --git a/source/blender/blenlib/intern/task_graph.cc b/source/blender/blenlib/intern/task_graph.cc index 6c1cc818d75..5bc84bf7573 100644 --- a/source/blender/blenlib/intern/task_graph.cc +++ b/source/blender/blenlib/intern/task_graph.cc @@ -75,7 +75,7 @@ struct TaskNode { } #ifdef WITH_TBB - tbb::flow::continue_msg run(const tbb::flow::continue_msg UNUSED(input)) + tbb::flow::continue_msg run(const tbb::flow::continue_msg /*input*/) { run_func(task_data); return tbb::flow::continue_msg(); diff --git a/source/blender/blenlib/intern/task_iterator.c b/source/blender/blenlib/intern/task_iterator.c index d5afbb2b117..99e966de975 100644 --- a/source/blender/blenlib/intern/task_iterator.c +++ b/source/blender/blenlib/intern/task_iterator.c @@ -26,10 +26,10 @@ * \{ */ /* Allows to avoid using malloc for userdata_chunk in tasks, when small enough. */ -#define MALLOCA(_size) ((_size) <= 8192) ? alloca((_size)) : MEM_mallocN((_size), __func__) +#define MALLOCA(_size) ((_size) <= 8192) ? alloca(_size) : MEM_mallocN((_size), __func__) #define MALLOCA_FREE(_mem, _size) \ if (((_mem) != NULL) && ((_size) > 8192)) { \ - MEM_freeN((_mem)); \ + MEM_freeN(_mem); \ } \ ((void)0) diff --git a/source/blender/blenlib/intern/task_range.cc b/source/blender/blenlib/intern/task_range.cc index 7e405529f03..20551aba93b 100644 --- a/source/blender/blenlib/intern/task_range.cc +++ b/source/blender/blenlib/intern/task_range.cc @@ -12,6 +12,7 @@ #include "DNA_listBase.h" +#include "BLI_lazy_threading.hh" #include "BLI_task.h" #include "BLI_threads.h" @@ -104,6 +105,8 @@ void BLI_task_parallel_range(const int start, const size_t grainsize = MAX2(settings->min_iter_per_thread, 1); const tbb::blocked_range<int> range(start, stop, grainsize); + blender::lazy_threading::send_hint(); + if (settings->func_reduce) { parallel_reduce(range, task); if (settings->userdata_chunk) { @@ -129,7 +132,7 @@ void BLI_task_parallel_range(const int start, } } -int BLI_task_parallel_thread_id(const TaskParallelTLS *UNUSED(tls)) +int BLI_task_parallel_thread_id(const TaskParallelTLS * /*tls*/) { #ifdef WITH_TBB /* Get a unique thread ID for texture nodes. In the future we should get rid diff --git a/source/blender/blenlib/intern/task_scheduler.cc b/source/blender/blenlib/intern/task_scheduler.cc index 1f7747453c1..5b056df78b4 100644 --- a/source/blender/blenlib/intern/task_scheduler.cc +++ b/source/blender/blenlib/intern/task_scheduler.cc @@ -8,6 +8,7 @@ #include "MEM_guardedalloc.h" +#include "BLI_lazy_threading.hh" #include "BLI_task.h" #include "BLI_threads.h" @@ -67,6 +68,7 @@ int BLI_task_scheduler_num_threads() void BLI_task_isolate(void (*func)(void *userdata), void *userdata) { #ifdef WITH_TBB + blender::lazy_threading::ReceiverIsolation isolation; tbb::this_task_arena::isolate([&] { func(userdata); }); #else func(userdata); diff --git a/source/blender/blenlib/intern/threads.cc b/source/blender/blenlib/intern/threads.cc index 37fccf6f4fe..f99a27c2475 100644 --- a/source/blender/blenlib/intern/threads.cc +++ b/source/blender/blenlib/intern/threads.cc @@ -37,17 +37,6 @@ #include "atomic_ops.h" -#if defined(__APPLE__) && defined(_OPENMP) && (__GNUC__ == 4) && (__GNUC_MINOR__ == 2) && \ - !defined(__clang__) -# define USE_APPLE_OMP_FIX -#endif - -#ifdef USE_APPLE_OMP_FIX -/* ************** libgomp (Apple gcc 4.2.1) TLS bug workaround *************** */ -extern pthread_key_t gomp_tls_key; -static void *thread_tls_data; -#endif - /** * Basic Thread Control API * ======================== @@ -108,7 +97,7 @@ static pthread_mutex_t _colormanage_lock = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t _fftw_lock = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t _view3d_lock = PTHREAD_MUTEX_INITIALIZER; static pthread_t mainid; -static unsigned int thread_levels = 0; /* threads can be invoked inside threads */ +static uint thread_levels = 0; /* threads can be invoked inside threads */ static int threads_override_num = 0; /* just a max for security reasons */ @@ -153,15 +142,7 @@ void BLI_threadpool_init(ListBase *threadbase, void *(*do_thread)(void *), int t } } - unsigned int level = atomic_fetch_and_add_u(&thread_levels, 1); - if (level == 0) { -#ifdef USE_APPLE_OMP_FIX - /* Workaround for Apple gcc 4.2.1 OMP vs background thread bug, - * we copy GOMP thread local storage pointer to setting it again - * inside the thread that we start. */ - thread_tls_data = pthread_getspecific(gomp_tls_key); -#endif - } + atomic_fetch_and_add_u(&thread_levels, 1); } int BLI_available_threads(ListBase *threadbase) @@ -194,13 +175,6 @@ int BLI_threadpool_available_thread_index(ListBase *threadbase) static void *tslot_thread_start(void *tslot_p) { ThreadSlot *tslot = (ThreadSlot *)tslot_p; - -#ifdef USE_APPLE_OMP_FIX - /* Workaround for Apple gcc 4.2.1 OMP vs background thread bug, - * set GOMP thread local storage pointer which was copied beforehand */ - pthread_setspecific(gomp_tls_key, thread_tls_data); -#endif - return tslot->do_thread(tslot->callerdata); } @@ -293,7 +267,7 @@ int BLI_system_thread_count() #ifdef WIN32 SYSTEM_INFO info; GetSystemInfo(&info); - t = (int)info.dwNumberOfProcessors; + t = int(info.dwNumberOfProcessors); #else # ifdef __APPLE__ int mib[2]; @@ -304,7 +278,7 @@ int BLI_system_thread_count() len = sizeof(t); sysctl(mib, 2, &t, &len, nullptr, 0); # else - t = (int)sysconf(_SC_NPROCESSORS_ONLN); + t = int(sysconf(_SC_NPROCESSORS_ONLN)); # endif #endif } @@ -524,7 +498,7 @@ void BLI_rw_mutex_free(ThreadRWMutex *mutex) struct TicketMutex { pthread_cond_t cond; pthread_mutex_t mutex; - unsigned int queue_head, queue_tail; + uint queue_head, queue_tail; }; TicketMutex *BLI_ticket_mutex_alloc() @@ -547,7 +521,7 @@ void BLI_ticket_mutex_free(TicketMutex *ticket) void BLI_ticket_mutex_lock(TicketMutex *ticket) { - unsigned int queue_me; + uint queue_me; pthread_mutex_lock(&ticket->mutex); queue_me = ticket->queue_tail++; diff --git a/source/blender/blenlib/intern/timecode.c b/source/blender/blenlib/intern/timecode.c index fc78b0ad98d..ecaa469984d 100644 --- a/source/blender/blenlib/intern/timecode.c +++ b/source/blender/blenlib/intern/timecode.c @@ -176,7 +176,7 @@ size_t BLI_timecode_string_from_time_simple(char *str, const int hr = ((int)time_seconds) / (60 * 60); const int min = (((int)time_seconds) / 60) % 60; const int sec = ((int)time_seconds) % 60; - const int hun = ((int)(fmod(time_seconds, 1.0) * 100)); + const int hun = (int)(fmod(time_seconds, 1.0) * 100); if (hr) { rlen = BLI_snprintf_rlen(str, maxncpy, "%.2d:%.2d:%.2d.%.2d", hr, min, sec, hun); diff --git a/source/blender/blenlib/intern/uuid.cc b/source/blender/blenlib/intern/uuid.cc index 890a721a9d1..b845208f0da 100644 --- a/source/blender/blenlib/intern/uuid.cc +++ b/source/blender/blenlib/intern/uuid.cc @@ -5,6 +5,7 @@ */ #include "BLI_assert.h" +#include "BLI_string.h" #include "BLI_uuid.h" #include <cstdio> @@ -85,19 +86,19 @@ bool BLI_uuid_equal(const bUUID uuid1, const bUUID uuid2) void BLI_uuid_format(char *buffer, const bUUID uuid) { - std::sprintf(buffer, - "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x", - uuid.time_low, - uuid.time_mid, - uuid.time_hi_and_version, - uuid.clock_seq_hi_and_reserved, - uuid.clock_seq_low, - uuid.node[0], - uuid.node[1], - uuid.node[2], - uuid.node[3], - uuid.node[4], - uuid.node[5]); + BLI_sprintf(buffer, + "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x", + uuid.time_low, + uuid.time_mid, + uuid.time_hi_and_version, + uuid.clock_seq_hi_and_reserved, + uuid.clock_seq_low, + uuid.node[0], + uuid.node[1], + uuid.node[2], + uuid.node[3], + uuid.node[4], + uuid.node[5]); } bool BLI_uuid_parse_string(bUUID *uuid, const char *buffer) @@ -136,10 +137,10 @@ bUUID::bUUID(const std::initializer_list<uint32_t> field_values) const auto *field_iter = field_values.begin(); this->time_low = *field_iter++; - this->time_mid = static_cast<uint16_t>(*field_iter++); - this->time_hi_and_version = static_cast<uint16_t>(*field_iter++); - this->clock_seq_hi_and_reserved = static_cast<uint8_t>(*field_iter++); - this->clock_seq_low = static_cast<uint8_t>(*field_iter++); + this->time_mid = uint16_t(*field_iter++); + this->time_hi_and_version = uint16_t(*field_iter++); + this->clock_seq_hi_and_reserved = uint8_t(*field_iter++); + this->clock_seq_low = uint8_t(*field_iter++); std::copy(field_iter, field_values.end(), this->node); } diff --git a/source/blender/blenlib/intern/uvproject.c b/source/blender/blenlib/intern/uvproject.c index 347166bd57d..0398bf0b3fe 100644 --- a/source/blender/blenlib/intern/uvproject.c +++ b/source/blender/blenlib/intern/uvproject.c @@ -129,7 +129,7 @@ ProjCameraInfo *BLI_uvproject_camera_info(Object *ob, float rotmat[4][4], float uci.camsize = uci.do_persp ? tanf(uci.camangle) : camera->ortho_scale; /* account for scaled cameras */ - copy_m4_m4(uci.caminv, ob->obmat); + copy_m4_m4(uci.caminv, ob->object_to_world); normalize_m4(uci.caminv); if (invert_m4(uci.caminv)) { diff --git a/source/blender/blenlib/intern/winstuff.c b/source/blender/blenlib/intern/winstuff.c index 7e2c5e8f1dd..3a574b60ae2 100644 --- a/source/blender/blenlib/intern/winstuff.c +++ b/source/blender/blenlib/intern/winstuff.c @@ -110,7 +110,7 @@ bool BLI_windows_register_blend_extension(const bool background) &hkey, &dwd); if (lresult == ERROR_SUCCESS) { - sprintf(buffer, "\"%s\" \"%%1\"", BlPath); + BLI_snprintf(buffer, sizeof(buffer), "\"%s\" \"%%1\"", BlPath); lresult = RegSetValueEx(hkey, NULL, 0, REG_SZ, (BYTE *)buffer, strlen(buffer) + 1); RegCloseKey(hkey); } @@ -129,7 +129,7 @@ bool BLI_windows_register_blend_extension(const bool background) &hkey, &dwd); if (lresult == ERROR_SUCCESS) { - sprintf(buffer, "\"%s\", 1", BlPath); + BLI_snprintf(buffer, sizeof(buffer), "\"%s\", 1", BlPath); lresult = RegSetValueEx(hkey, NULL, 0, REG_SZ, (BYTE *)buffer, strlen(buffer) + 1); RegCloseKey(hkey); } @@ -167,10 +167,12 @@ bool BLI_windows_register_blend_extension(const bool background) RegCloseKey(root); printf("success (%s)\n", usr_mode ? "user" : "system"); if (!background) { - sprintf(MBox, - "File extension registered for %s.", - usr_mode ? "the current user. To register for all users, run as an administrator" : - "all users"); + BLI_snprintf(MBox, + sizeof(MBox), + "File extension registered for %s.", + usr_mode ? + "the current user. To register for all users, run as an administrator" : + "all users"); MessageBox(0, MBox, "Blender", MB_OK | MB_ICONINFORMATION); } return true; |