GFXprim
2D bitmap graphics library with emphasis on speed and correctness
Loading...
Searching...
No Matches
gp_clamp.h
Go to the documentation of this file.
1// SPDX-License-Identifier: LGPL-2.1-or-later
2/*
3 * Copyright (C) 2009-2014 Cyril Hrubis <metan@ucw.cz>
4 */
5
10#ifndef CORE_GP_CLAMP_H
11#define CORE_GP_CLAMP_H
12
13#include <core/gp_compiler.h>
14
15#define GP_CLAMP_GENERIC(val, min, max) ({ \
16 typeof(val) gp_val_tmp = (val); \
17 typeof(max) gp_max_tmp = (max); \
18 typeof(min) gp_min_tmp = (min); \
19 gp_val_tmp = gp_val_tmp < gp_min_tmp ? gp_min_tmp : gp_val_tmp; \
20 gp_val_tmp = gp_val_tmp > gp_max_tmp ? gp_max_tmp : gp_val_tmp; \
21 gp_val_tmp; \
22})
23
24#define GP_CLAMP_INT_0_255(val) ({ \
25 typeof(val) gp_val_tmp = (val); \
26 typeof(val) gp_mask_tmp = ~0xff; \
27 (gp_val_tmp & gp_mask_tmp) ? (gp_val_tmp < 0 ? 0 : 255) : gp_val_tmp; \
28})
29
41#define GP_CLAMP(val, min, max) ({ \
42 (GP_IS_CONSTANT(min) && GP_IS_CONSTANT(max) && \
43 min == 0 && max == 255) ? \
44 GP_CLAMP_INT_0_255(val) : \
45 GP_CLAMP_GENERIC(val, min, max); \
46})
47
56#define GP_CLAMP_DOWN(val, max) ({ \
57 typeof(val) gp_val_tmp = (val); \
58 typeof(val) gp_max_tmp = (max); \
59 gp_val_tmp > gp_max_tmp ? gp_max_tmp : gp_val_tmp; \
60})
61
73#define GP_SAT_ADD(val, add, max) ({ \
74 typeof(val) gp_val_tmp = (val); \
75 typeof(add) gp_add_tmp = (add); \
76 typeof(val) gp_max_tmp = (max); \
77 typeof(val) gp_ret_tmp; \
78 typeof(val) gp_add_neg_tmp = -gp_add_tmp; \
79 if (gp_add_tmp > 0) \
80 gp_ret_tmp = gp_val_tmp + gp_add_tmp > gp_max_tmp ? gp_max_tmp : gp_val_tmp + gp_add_tmp; \
81 else \
82 gp_ret_tmp = gp_val_tmp < gp_add_neg_tmp ? 0 : gp_val_tmp + gp_add_tmp; \
83 gp_ret_tmp; \
84})
85
86#endif /* CORE_GP_CLAMP_H */
A compiler dependent macros.