Skip to content

Commit 638ef47

Browse files
author
Cristy
committed
optimize cast methods
1 parent ffc9d2a commit 638ef47

File tree

2 files changed

+24
-25
lines changed

2 files changed

+24
-25
lines changed

configure

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5316,7 +5316,7 @@ MAGICK_PATCHLEVEL_VERSION=33
53165316

53175317
MAGICK_VERSION=6.9.13-33
53185318

5319-
MAGICK_GIT_REVISION=e0c34a2f8:20251014
5319+
MAGICK_GIT_REVISION=ffc9d2a5d:20251014
53205320

53215321

53225322
# Substitute library versioning

magick/image-private.h

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ extern "C" {
4545
#define MagickPHI 1.61803398874989484820458683436563811772030917980576
4646
#define MagickPI2 1.57079632679489661923132169163975144209858469968755
4747
#define MagickPI 3.14159265358979323846264338327950288419716939937510
48+
#define MAGICK_PTRDIFF_MAX (PTRDIFF_MAX)
49+
#define MAGICK_PTRDIFF_MIN (-PTRDIFF_MAX-1)
4850
#define MagickSQ1_2 0.70710678118654752440084436210484903928483593768847
4951
#define MagickSQ2 1.41421356237309504880168872420969807856967187537695
5052
#define MagickSQ2PI 2.50662827463100024161235523934010416269302368164062
@@ -73,45 +75,42 @@ static inline ssize_t CastDoubleToLong(const double x)
7375
errno=ERANGE;
7476
return(0);
7577
}
76-
if (x < 0.0)
78+
value=(x < 0.0) ? ceil(x) : floor(x);
79+
if (value < ((double) MAGICK_SSIZE_MIN))
7780
{
78-
value=ceil(x);
79-
if (value < ((double) MAGICK_SSIZE_MIN))
80-
{
81-
errno=ERANGE;
82-
return((ssize_t) MAGICK_SSIZE_MIN);
83-
}
81+
errno=ERANGE;
82+
return(MAGICK_SSIZE_MIN);
8483
}
85-
else
84+
if (value > ((double) MAGICK_SSIZE_MAX))
8685
{
87-
value=floor(x);
88-
if (value > ((double) MAGICK_SSIZE_MAX))
89-
{
90-
errno=ERANGE;
91-
return((ssize_t) MAGICK_SSIZE_MAX);
92-
}
86+
errno=ERANGE;
87+
return(MAGICK_SSIZE_MAX);
9388
}
9489
return((ssize_t) value);
9590
}
9691

9792
static inline QuantumAny CastDoubleToQuantumAny(const double x)
9893
{
94+
double
95+
value;
96+
9997
if (IsNaN(x) != 0)
10098
{
10199
errno=ERANGE;
102100
return(0);
103101
}
104-
if (x > ((double) ((QuantumAny) ~0)))
102+
value=(x < 0.0) ? ceil(x) : floor(x);
103+
if (value < 0.0)
105104
{
106105
errno=ERANGE;
107-
return((QuantumAny) ~0);
106+
return(0);
108107
}
109-
if (x < 0.0)
108+
if (value > ((double) ((QuantumAny) ~0)))
110109
{
111110
errno=ERANGE;
112-
return((QuantumAny) 0);
111+
return((QuantumAny) ~0);
113112
}
114-
return((QuantumAny) (x+0.5));
113+
return((QuantumAny) value);
115114
}
116115

117116
static inline size_t CastDoubleToUnsigned(const double x)
@@ -124,16 +123,16 @@ static inline size_t CastDoubleToUnsigned(const double x)
124123
errno=ERANGE;
125124
return(0);
126125
}
127-
value=floor(x);
128-
if (value >= ((double) MAGICK_SIZE_MAX))
126+
value=(x < 0.0) ? ceil(x) : floor(x);
127+
if (value < 0.0)
129128
{
130129
errno=ERANGE;
131-
return((size_t) MAGICK_SIZE_MAX);
130+
return(0);
132131
}
133-
if (value < 0.0)
132+
if (value > ((double) MAGICK_SIZE_MAX))
134133
{
135134
errno=ERANGE;
136-
return(0);
135+
return(MAGICK_SIZE_MAX);
137136
}
138137
return((size_t) value);
139138
}

0 commit comments

Comments
 (0)