1 // After editing this file, run "go generate" in the ../data directory.
2 
3 // Copyright 2017 The Wuffs Authors.
4 //
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //    https://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 
17 // ---------------- Ranges and Rects
18 
19 // See https://github.com/google/wuffs/blob/master/doc/note/ranges-and-rects.md
20 
21 typedef struct wuffs_base__range_ii_u32__struct {
22   uint32_t min_incl;
23   uint32_t max_incl;
24 
25 #ifdef __cplusplus
26   inline bool is_empty() const;
27   inline bool equals(wuffs_base__range_ii_u32__struct s) const;
28   inline wuffs_base__range_ii_u32__struct intersect(
29       wuffs_base__range_ii_u32__struct s) const;
30   inline wuffs_base__range_ii_u32__struct unite(
31       wuffs_base__range_ii_u32__struct s) const;
32   inline bool contains(uint32_t x) const;
33   inline bool contains_range(wuffs_base__range_ii_u32__struct s) const;
34 #endif  // __cplusplus
35 
36 } wuffs_base__range_ii_u32;
37 
38 static inline wuffs_base__range_ii_u32  //
wuffs_base__empty_range_ii_u32()39 wuffs_base__empty_range_ii_u32() {
40   wuffs_base__range_ii_u32 ret;
41   ret.min_incl = 0;
42   ret.max_incl = 0;
43   return ret;
44 }
45 
46 static inline wuffs_base__range_ii_u32  //
wuffs_base__make_range_ii_u32(uint32_t min_incl,uint32_t max_incl)47 wuffs_base__make_range_ii_u32(uint32_t min_incl, uint32_t max_incl) {
48   wuffs_base__range_ii_u32 ret;
49   ret.min_incl = min_incl;
50   ret.max_incl = max_incl;
51   return ret;
52 }
53 
54 static inline bool  //
wuffs_base__range_ii_u32__is_empty(const wuffs_base__range_ii_u32 * r)55 wuffs_base__range_ii_u32__is_empty(const wuffs_base__range_ii_u32* r) {
56   return r->min_incl > r->max_incl;
57 }
58 
59 static inline bool  //
wuffs_base__range_ii_u32__equals(const wuffs_base__range_ii_u32 * r,wuffs_base__range_ii_u32 s)60 wuffs_base__range_ii_u32__equals(const wuffs_base__range_ii_u32* r,
61                                  wuffs_base__range_ii_u32 s) {
62   return (r->min_incl == s.min_incl && r->max_incl == s.max_incl) ||
63          (wuffs_base__range_ii_u32__is_empty(r) &&
64           wuffs_base__range_ii_u32__is_empty(&s));
65 }
66 
67 static inline wuffs_base__range_ii_u32  //
wuffs_base__range_ii_u32__intersect(const wuffs_base__range_ii_u32 * r,wuffs_base__range_ii_u32 s)68 wuffs_base__range_ii_u32__intersect(const wuffs_base__range_ii_u32* r,
69                                     wuffs_base__range_ii_u32 s) {
70   wuffs_base__range_ii_u32 t;
71   t.min_incl = wuffs_base__u32__max(r->min_incl, s.min_incl);
72   t.max_incl = wuffs_base__u32__min(r->max_incl, s.max_incl);
73   return t;
74 }
75 
76 static inline wuffs_base__range_ii_u32  //
wuffs_base__range_ii_u32__unite(const wuffs_base__range_ii_u32 * r,wuffs_base__range_ii_u32 s)77 wuffs_base__range_ii_u32__unite(const wuffs_base__range_ii_u32* r,
78                                 wuffs_base__range_ii_u32 s) {
79   if (wuffs_base__range_ii_u32__is_empty(r)) {
80     return s;
81   }
82   if (wuffs_base__range_ii_u32__is_empty(&s)) {
83     return *r;
84   }
85   wuffs_base__range_ii_u32 t;
86   t.min_incl = wuffs_base__u32__min(r->min_incl, s.min_incl);
87   t.max_incl = wuffs_base__u32__max(r->max_incl, s.max_incl);
88   return t;
89 }
90 
91 static inline bool  //
wuffs_base__range_ii_u32__contains(const wuffs_base__range_ii_u32 * r,uint32_t x)92 wuffs_base__range_ii_u32__contains(const wuffs_base__range_ii_u32* r,
93                                    uint32_t x) {
94   return (r->min_incl <= x) && (x <= r->max_incl);
95 }
96 
97 static inline bool  //
wuffs_base__range_ii_u32__contains_range(const wuffs_base__range_ii_u32 * r,wuffs_base__range_ii_u32 s)98 wuffs_base__range_ii_u32__contains_range(const wuffs_base__range_ii_u32* r,
99                                          wuffs_base__range_ii_u32 s) {
100   return wuffs_base__range_ii_u32__equals(
101       &s, wuffs_base__range_ii_u32__intersect(r, s));
102 }
103 
104 #ifdef __cplusplus
105 
106 inline bool  //
is_empty()107 wuffs_base__range_ii_u32::is_empty() const {
108   return wuffs_base__range_ii_u32__is_empty(this);
109 }
110 
111 inline bool  //
equals(wuffs_base__range_ii_u32 s)112 wuffs_base__range_ii_u32::equals(wuffs_base__range_ii_u32 s) const {
113   return wuffs_base__range_ii_u32__equals(this, s);
114 }
115 
116 inline wuffs_base__range_ii_u32  //
intersect(wuffs_base__range_ii_u32 s)117 wuffs_base__range_ii_u32::intersect(wuffs_base__range_ii_u32 s) const {
118   return wuffs_base__range_ii_u32__intersect(this, s);
119 }
120 
121 inline wuffs_base__range_ii_u32  //
unite(wuffs_base__range_ii_u32 s)122 wuffs_base__range_ii_u32::unite(wuffs_base__range_ii_u32 s) const {
123   return wuffs_base__range_ii_u32__unite(this, s);
124 }
125 
126 inline bool  //
contains(uint32_t x)127 wuffs_base__range_ii_u32::contains(uint32_t x) const {
128   return wuffs_base__range_ii_u32__contains(this, x);
129 }
130 
131 inline bool  //
contains_range(wuffs_base__range_ii_u32 s)132 wuffs_base__range_ii_u32::contains_range(wuffs_base__range_ii_u32 s) const {
133   return wuffs_base__range_ii_u32__contains_range(this, s);
134 }
135 
136 #endif  // __cplusplus
137 
138 // --------
139 
140 typedef struct wuffs_base__range_ie_u32__struct {
141   uint32_t min_incl;
142   uint32_t max_excl;
143 
144 #ifdef __cplusplus
145   inline bool is_empty() const;
146   inline bool equals(wuffs_base__range_ie_u32__struct s) const;
147   inline wuffs_base__range_ie_u32__struct intersect(
148       wuffs_base__range_ie_u32__struct s) const;
149   inline wuffs_base__range_ie_u32__struct unite(
150       wuffs_base__range_ie_u32__struct s) const;
151   inline bool contains(uint32_t x) const;
152   inline bool contains_range(wuffs_base__range_ie_u32__struct s) const;
153   inline uint32_t length() const;
154 #endif  // __cplusplus
155 
156 } wuffs_base__range_ie_u32;
157 
158 static inline wuffs_base__range_ie_u32  //
wuffs_base__empty_range_ie_u32()159 wuffs_base__empty_range_ie_u32() {
160   wuffs_base__range_ie_u32 ret;
161   ret.min_incl = 0;
162   ret.max_excl = 0;
163   return ret;
164 }
165 
166 static inline wuffs_base__range_ie_u32  //
wuffs_base__make_range_ie_u32(uint32_t min_incl,uint32_t max_excl)167 wuffs_base__make_range_ie_u32(uint32_t min_incl, uint32_t max_excl) {
168   wuffs_base__range_ie_u32 ret;
169   ret.min_incl = min_incl;
170   ret.max_excl = max_excl;
171   return ret;
172 }
173 
174 static inline bool  //
wuffs_base__range_ie_u32__is_empty(const wuffs_base__range_ie_u32 * r)175 wuffs_base__range_ie_u32__is_empty(const wuffs_base__range_ie_u32* r) {
176   return r->min_incl >= r->max_excl;
177 }
178 
179 static inline bool  //
wuffs_base__range_ie_u32__equals(const wuffs_base__range_ie_u32 * r,wuffs_base__range_ie_u32 s)180 wuffs_base__range_ie_u32__equals(const wuffs_base__range_ie_u32* r,
181                                  wuffs_base__range_ie_u32 s) {
182   return (r->min_incl == s.min_incl && r->max_excl == s.max_excl) ||
183          (wuffs_base__range_ie_u32__is_empty(r) &&
184           wuffs_base__range_ie_u32__is_empty(&s));
185 }
186 
187 static inline wuffs_base__range_ie_u32  //
wuffs_base__range_ie_u32__intersect(const wuffs_base__range_ie_u32 * r,wuffs_base__range_ie_u32 s)188 wuffs_base__range_ie_u32__intersect(const wuffs_base__range_ie_u32* r,
189                                     wuffs_base__range_ie_u32 s) {
190   wuffs_base__range_ie_u32 t;
191   t.min_incl = wuffs_base__u32__max(r->min_incl, s.min_incl);
192   t.max_excl = wuffs_base__u32__min(r->max_excl, s.max_excl);
193   return t;
194 }
195 
196 static inline wuffs_base__range_ie_u32  //
wuffs_base__range_ie_u32__unite(const wuffs_base__range_ie_u32 * r,wuffs_base__range_ie_u32 s)197 wuffs_base__range_ie_u32__unite(const wuffs_base__range_ie_u32* r,
198                                 wuffs_base__range_ie_u32 s) {
199   if (wuffs_base__range_ie_u32__is_empty(r)) {
200     return s;
201   }
202   if (wuffs_base__range_ie_u32__is_empty(&s)) {
203     return *r;
204   }
205   wuffs_base__range_ie_u32 t;
206   t.min_incl = wuffs_base__u32__min(r->min_incl, s.min_incl);
207   t.max_excl = wuffs_base__u32__max(r->max_excl, s.max_excl);
208   return t;
209 }
210 
211 static inline bool  //
wuffs_base__range_ie_u32__contains(const wuffs_base__range_ie_u32 * r,uint32_t x)212 wuffs_base__range_ie_u32__contains(const wuffs_base__range_ie_u32* r,
213                                    uint32_t x) {
214   return (r->min_incl <= x) && (x < r->max_excl);
215 }
216 
217 static inline bool  //
wuffs_base__range_ie_u32__contains_range(const wuffs_base__range_ie_u32 * r,wuffs_base__range_ie_u32 s)218 wuffs_base__range_ie_u32__contains_range(const wuffs_base__range_ie_u32* r,
219                                          wuffs_base__range_ie_u32 s) {
220   return wuffs_base__range_ie_u32__equals(
221       &s, wuffs_base__range_ie_u32__intersect(r, s));
222 }
223 
224 static inline uint32_t  //
wuffs_base__range_ie_u32__length(const wuffs_base__range_ie_u32 * r)225 wuffs_base__range_ie_u32__length(const wuffs_base__range_ie_u32* r) {
226   return wuffs_base__u32__sat_sub(r->max_excl, r->min_incl);
227 }
228 
229 #ifdef __cplusplus
230 
231 inline bool  //
is_empty()232 wuffs_base__range_ie_u32::is_empty() const {
233   return wuffs_base__range_ie_u32__is_empty(this);
234 }
235 
236 inline bool  //
equals(wuffs_base__range_ie_u32 s)237 wuffs_base__range_ie_u32::equals(wuffs_base__range_ie_u32 s) const {
238   return wuffs_base__range_ie_u32__equals(this, s);
239 }
240 
241 inline wuffs_base__range_ie_u32  //
intersect(wuffs_base__range_ie_u32 s)242 wuffs_base__range_ie_u32::intersect(wuffs_base__range_ie_u32 s) const {
243   return wuffs_base__range_ie_u32__intersect(this, s);
244 }
245 
246 inline wuffs_base__range_ie_u32  //
unite(wuffs_base__range_ie_u32 s)247 wuffs_base__range_ie_u32::unite(wuffs_base__range_ie_u32 s) const {
248   return wuffs_base__range_ie_u32__unite(this, s);
249 }
250 
251 inline bool  //
contains(uint32_t x)252 wuffs_base__range_ie_u32::contains(uint32_t x) const {
253   return wuffs_base__range_ie_u32__contains(this, x);
254 }
255 
256 inline bool  //
contains_range(wuffs_base__range_ie_u32 s)257 wuffs_base__range_ie_u32::contains_range(wuffs_base__range_ie_u32 s) const {
258   return wuffs_base__range_ie_u32__contains_range(this, s);
259 }
260 
261 inline uint32_t  //
length()262 wuffs_base__range_ie_u32::length() const {
263   return wuffs_base__range_ie_u32__length(this);
264 }
265 
266 #endif  // __cplusplus
267 
268 // --------
269 
270 typedef struct wuffs_base__range_ii_u64__struct {
271   uint64_t min_incl;
272   uint64_t max_incl;
273 
274 #ifdef __cplusplus
275   inline bool is_empty() const;
276   inline bool equals(wuffs_base__range_ii_u64__struct s) const;
277   inline wuffs_base__range_ii_u64__struct intersect(
278       wuffs_base__range_ii_u64__struct s) const;
279   inline wuffs_base__range_ii_u64__struct unite(
280       wuffs_base__range_ii_u64__struct s) const;
281   inline bool contains(uint64_t x) const;
282   inline bool contains_range(wuffs_base__range_ii_u64__struct s) const;
283 #endif  // __cplusplus
284 
285 } wuffs_base__range_ii_u64;
286 
287 static inline wuffs_base__range_ii_u64  //
wuffs_base__empty_range_ii_u64()288 wuffs_base__empty_range_ii_u64() {
289   wuffs_base__range_ii_u64 ret;
290   ret.min_incl = 0;
291   ret.max_incl = 0;
292   return ret;
293 }
294 
295 static inline wuffs_base__range_ii_u64  //
wuffs_base__make_range_ii_u64(uint64_t min_incl,uint64_t max_incl)296 wuffs_base__make_range_ii_u64(uint64_t min_incl, uint64_t max_incl) {
297   wuffs_base__range_ii_u64 ret;
298   ret.min_incl = min_incl;
299   ret.max_incl = max_incl;
300   return ret;
301 }
302 
303 static inline bool  //
wuffs_base__range_ii_u64__is_empty(const wuffs_base__range_ii_u64 * r)304 wuffs_base__range_ii_u64__is_empty(const wuffs_base__range_ii_u64* r) {
305   return r->min_incl > r->max_incl;
306 }
307 
308 static inline bool  //
wuffs_base__range_ii_u64__equals(const wuffs_base__range_ii_u64 * r,wuffs_base__range_ii_u64 s)309 wuffs_base__range_ii_u64__equals(const wuffs_base__range_ii_u64* r,
310                                  wuffs_base__range_ii_u64 s) {
311   return (r->min_incl == s.min_incl && r->max_incl == s.max_incl) ||
312          (wuffs_base__range_ii_u64__is_empty(r) &&
313           wuffs_base__range_ii_u64__is_empty(&s));
314 }
315 
316 static inline wuffs_base__range_ii_u64  //
wuffs_base__range_ii_u64__intersect(const wuffs_base__range_ii_u64 * r,wuffs_base__range_ii_u64 s)317 wuffs_base__range_ii_u64__intersect(const wuffs_base__range_ii_u64* r,
318                                     wuffs_base__range_ii_u64 s) {
319   wuffs_base__range_ii_u64 t;
320   t.min_incl = wuffs_base__u64__max(r->min_incl, s.min_incl);
321   t.max_incl = wuffs_base__u64__min(r->max_incl, s.max_incl);
322   return t;
323 }
324 
325 static inline wuffs_base__range_ii_u64  //
wuffs_base__range_ii_u64__unite(const wuffs_base__range_ii_u64 * r,wuffs_base__range_ii_u64 s)326 wuffs_base__range_ii_u64__unite(const wuffs_base__range_ii_u64* r,
327                                 wuffs_base__range_ii_u64 s) {
328   if (wuffs_base__range_ii_u64__is_empty(r)) {
329     return s;
330   }
331   if (wuffs_base__range_ii_u64__is_empty(&s)) {
332     return *r;
333   }
334   wuffs_base__range_ii_u64 t;
335   t.min_incl = wuffs_base__u64__min(r->min_incl, s.min_incl);
336   t.max_incl = wuffs_base__u64__max(r->max_incl, s.max_incl);
337   return t;
338 }
339 
340 static inline bool  //
wuffs_base__range_ii_u64__contains(const wuffs_base__range_ii_u64 * r,uint64_t x)341 wuffs_base__range_ii_u64__contains(const wuffs_base__range_ii_u64* r,
342                                    uint64_t x) {
343   return (r->min_incl <= x) && (x <= r->max_incl);
344 }
345 
346 static inline bool  //
wuffs_base__range_ii_u64__contains_range(const wuffs_base__range_ii_u64 * r,wuffs_base__range_ii_u64 s)347 wuffs_base__range_ii_u64__contains_range(const wuffs_base__range_ii_u64* r,
348                                          wuffs_base__range_ii_u64 s) {
349   return wuffs_base__range_ii_u64__equals(
350       &s, wuffs_base__range_ii_u64__intersect(r, s));
351 }
352 
353 #ifdef __cplusplus
354 
355 inline bool  //
is_empty()356 wuffs_base__range_ii_u64::is_empty() const {
357   return wuffs_base__range_ii_u64__is_empty(this);
358 }
359 
360 inline bool  //
equals(wuffs_base__range_ii_u64 s)361 wuffs_base__range_ii_u64::equals(wuffs_base__range_ii_u64 s) const {
362   return wuffs_base__range_ii_u64__equals(this, s);
363 }
364 
365 inline wuffs_base__range_ii_u64  //
intersect(wuffs_base__range_ii_u64 s)366 wuffs_base__range_ii_u64::intersect(wuffs_base__range_ii_u64 s) const {
367   return wuffs_base__range_ii_u64__intersect(this, s);
368 }
369 
370 inline wuffs_base__range_ii_u64  //
unite(wuffs_base__range_ii_u64 s)371 wuffs_base__range_ii_u64::unite(wuffs_base__range_ii_u64 s) const {
372   return wuffs_base__range_ii_u64__unite(this, s);
373 }
374 
375 inline bool  //
contains(uint64_t x)376 wuffs_base__range_ii_u64::contains(uint64_t x) const {
377   return wuffs_base__range_ii_u64__contains(this, x);
378 }
379 
380 inline bool  //
contains_range(wuffs_base__range_ii_u64 s)381 wuffs_base__range_ii_u64::contains_range(wuffs_base__range_ii_u64 s) const {
382   return wuffs_base__range_ii_u64__contains_range(this, s);
383 }
384 
385 #endif  // __cplusplus
386 
387 // --------
388 
389 typedef struct wuffs_base__range_ie_u64__struct {
390   uint64_t min_incl;
391   uint64_t max_excl;
392 
393 #ifdef __cplusplus
394   inline bool is_empty() const;
395   inline bool equals(wuffs_base__range_ie_u64__struct s) const;
396   inline wuffs_base__range_ie_u64__struct intersect(
397       wuffs_base__range_ie_u64__struct s) const;
398   inline wuffs_base__range_ie_u64__struct unite(
399       wuffs_base__range_ie_u64__struct s) const;
400   inline bool contains(uint64_t x) const;
401   inline bool contains_range(wuffs_base__range_ie_u64__struct s) const;
402   inline uint64_t length() const;
403 #endif  // __cplusplus
404 
405 } wuffs_base__range_ie_u64;
406 
407 static inline wuffs_base__range_ie_u64  //
wuffs_base__empty_range_ie_u64()408 wuffs_base__empty_range_ie_u64() {
409   wuffs_base__range_ie_u64 ret;
410   ret.min_incl = 0;
411   ret.max_excl = 0;
412   return ret;
413 }
414 
415 static inline wuffs_base__range_ie_u64  //
wuffs_base__make_range_ie_u64(uint64_t min_incl,uint64_t max_excl)416 wuffs_base__make_range_ie_u64(uint64_t min_incl, uint64_t max_excl) {
417   wuffs_base__range_ie_u64 ret;
418   ret.min_incl = min_incl;
419   ret.max_excl = max_excl;
420   return ret;
421 }
422 
423 static inline bool  //
wuffs_base__range_ie_u64__is_empty(const wuffs_base__range_ie_u64 * r)424 wuffs_base__range_ie_u64__is_empty(const wuffs_base__range_ie_u64* r) {
425   return r->min_incl >= r->max_excl;
426 }
427 
428 static inline bool  //
wuffs_base__range_ie_u64__equals(const wuffs_base__range_ie_u64 * r,wuffs_base__range_ie_u64 s)429 wuffs_base__range_ie_u64__equals(const wuffs_base__range_ie_u64* r,
430                                  wuffs_base__range_ie_u64 s) {
431   return (r->min_incl == s.min_incl && r->max_excl == s.max_excl) ||
432          (wuffs_base__range_ie_u64__is_empty(r) &&
433           wuffs_base__range_ie_u64__is_empty(&s));
434 }
435 
436 static inline wuffs_base__range_ie_u64  //
wuffs_base__range_ie_u64__intersect(const wuffs_base__range_ie_u64 * r,wuffs_base__range_ie_u64 s)437 wuffs_base__range_ie_u64__intersect(const wuffs_base__range_ie_u64* r,
438                                     wuffs_base__range_ie_u64 s) {
439   wuffs_base__range_ie_u64 t;
440   t.min_incl = wuffs_base__u64__max(r->min_incl, s.min_incl);
441   t.max_excl = wuffs_base__u64__min(r->max_excl, s.max_excl);
442   return t;
443 }
444 
445 static inline wuffs_base__range_ie_u64  //
wuffs_base__range_ie_u64__unite(const wuffs_base__range_ie_u64 * r,wuffs_base__range_ie_u64 s)446 wuffs_base__range_ie_u64__unite(const wuffs_base__range_ie_u64* r,
447                                 wuffs_base__range_ie_u64 s) {
448   if (wuffs_base__range_ie_u64__is_empty(r)) {
449     return s;
450   }
451   if (wuffs_base__range_ie_u64__is_empty(&s)) {
452     return *r;
453   }
454   wuffs_base__range_ie_u64 t;
455   t.min_incl = wuffs_base__u64__min(r->min_incl, s.min_incl);
456   t.max_excl = wuffs_base__u64__max(r->max_excl, s.max_excl);
457   return t;
458 }
459 
460 static inline bool  //
wuffs_base__range_ie_u64__contains(const wuffs_base__range_ie_u64 * r,uint64_t x)461 wuffs_base__range_ie_u64__contains(const wuffs_base__range_ie_u64* r,
462                                    uint64_t x) {
463   return (r->min_incl <= x) && (x < r->max_excl);
464 }
465 
466 static inline bool  //
wuffs_base__range_ie_u64__contains_range(const wuffs_base__range_ie_u64 * r,wuffs_base__range_ie_u64 s)467 wuffs_base__range_ie_u64__contains_range(const wuffs_base__range_ie_u64* r,
468                                          wuffs_base__range_ie_u64 s) {
469   return wuffs_base__range_ie_u64__equals(
470       &s, wuffs_base__range_ie_u64__intersect(r, s));
471 }
472 
473 static inline uint64_t  //
wuffs_base__range_ie_u64__length(const wuffs_base__range_ie_u64 * r)474 wuffs_base__range_ie_u64__length(const wuffs_base__range_ie_u64* r) {
475   return wuffs_base__u64__sat_sub(r->max_excl, r->min_incl);
476 }
477 
478 #ifdef __cplusplus
479 
480 inline bool  //
is_empty()481 wuffs_base__range_ie_u64::is_empty() const {
482   return wuffs_base__range_ie_u64__is_empty(this);
483 }
484 
485 inline bool  //
equals(wuffs_base__range_ie_u64 s)486 wuffs_base__range_ie_u64::equals(wuffs_base__range_ie_u64 s) const {
487   return wuffs_base__range_ie_u64__equals(this, s);
488 }
489 
490 inline wuffs_base__range_ie_u64  //
intersect(wuffs_base__range_ie_u64 s)491 wuffs_base__range_ie_u64::intersect(wuffs_base__range_ie_u64 s) const {
492   return wuffs_base__range_ie_u64__intersect(this, s);
493 }
494 
495 inline wuffs_base__range_ie_u64  //
unite(wuffs_base__range_ie_u64 s)496 wuffs_base__range_ie_u64::unite(wuffs_base__range_ie_u64 s) const {
497   return wuffs_base__range_ie_u64__unite(this, s);
498 }
499 
500 inline bool  //
contains(uint64_t x)501 wuffs_base__range_ie_u64::contains(uint64_t x) const {
502   return wuffs_base__range_ie_u64__contains(this, x);
503 }
504 
505 inline bool  //
contains_range(wuffs_base__range_ie_u64 s)506 wuffs_base__range_ie_u64::contains_range(wuffs_base__range_ie_u64 s) const {
507   return wuffs_base__range_ie_u64__contains_range(this, s);
508 }
509 
510 inline uint64_t  //
length()511 wuffs_base__range_ie_u64::length() const {
512   return wuffs_base__range_ie_u64__length(this);
513 }
514 
515 #endif  // __cplusplus
516 
517 // --------
518 
519 typedef struct wuffs_base__rect_ii_u32__struct {
520   uint32_t min_incl_x;
521   uint32_t min_incl_y;
522   uint32_t max_incl_x;
523   uint32_t max_incl_y;
524 
525 #ifdef __cplusplus
526   inline bool is_empty() const;
527   inline bool equals(wuffs_base__rect_ii_u32__struct s) const;
528   inline wuffs_base__rect_ii_u32__struct intersect(
529       wuffs_base__rect_ii_u32__struct s) const;
530   inline wuffs_base__rect_ii_u32__struct unite(
531       wuffs_base__rect_ii_u32__struct s) const;
532   inline bool contains(uint32_t x, uint32_t y) const;
533   inline bool contains_rect(wuffs_base__rect_ii_u32__struct s) const;
534 #endif  // __cplusplus
535 
536 } wuffs_base__rect_ii_u32;
537 
538 static inline wuffs_base__rect_ii_u32  //
wuffs_base__empty_rect_ii_u32()539 wuffs_base__empty_rect_ii_u32() {
540   wuffs_base__rect_ii_u32 ret;
541   ret.min_incl_x = 0;
542   ret.min_incl_y = 0;
543   ret.max_incl_x = 0;
544   ret.max_incl_y = 0;
545   return ret;
546 }
547 
548 static inline wuffs_base__rect_ii_u32  //
wuffs_base__make_rect_ii_u32(uint32_t min_incl_x,uint32_t min_incl_y,uint32_t max_incl_x,uint32_t max_incl_y)549 wuffs_base__make_rect_ii_u32(uint32_t min_incl_x,
550                              uint32_t min_incl_y,
551                              uint32_t max_incl_x,
552                              uint32_t max_incl_y) {
553   wuffs_base__rect_ii_u32 ret;
554   ret.min_incl_x = min_incl_x;
555   ret.min_incl_y = min_incl_y;
556   ret.max_incl_x = max_incl_x;
557   ret.max_incl_y = max_incl_y;
558   return ret;
559 }
560 
561 static inline bool  //
wuffs_base__rect_ii_u32__is_empty(const wuffs_base__rect_ii_u32 * r)562 wuffs_base__rect_ii_u32__is_empty(const wuffs_base__rect_ii_u32* r) {
563   return (r->min_incl_x > r->max_incl_x) || (r->min_incl_y > r->max_incl_y);
564 }
565 
566 static inline bool  //
wuffs_base__rect_ii_u32__equals(const wuffs_base__rect_ii_u32 * r,wuffs_base__rect_ii_u32 s)567 wuffs_base__rect_ii_u32__equals(const wuffs_base__rect_ii_u32* r,
568                                 wuffs_base__rect_ii_u32 s) {
569   return (r->min_incl_x == s.min_incl_x && r->min_incl_y == s.min_incl_y &&
570           r->max_incl_x == s.max_incl_x && r->max_incl_y == s.max_incl_y) ||
571          (wuffs_base__rect_ii_u32__is_empty(r) &&
572           wuffs_base__rect_ii_u32__is_empty(&s));
573 }
574 
575 static inline wuffs_base__rect_ii_u32  //
wuffs_base__rect_ii_u32__intersect(const wuffs_base__rect_ii_u32 * r,wuffs_base__rect_ii_u32 s)576 wuffs_base__rect_ii_u32__intersect(const wuffs_base__rect_ii_u32* r,
577                                    wuffs_base__rect_ii_u32 s) {
578   wuffs_base__rect_ii_u32 t;
579   t.min_incl_x = wuffs_base__u32__max(r->min_incl_x, s.min_incl_x);
580   t.min_incl_y = wuffs_base__u32__max(r->min_incl_y, s.min_incl_y);
581   t.max_incl_x = wuffs_base__u32__min(r->max_incl_x, s.max_incl_x);
582   t.max_incl_y = wuffs_base__u32__min(r->max_incl_y, s.max_incl_y);
583   return t;
584 }
585 
586 static inline wuffs_base__rect_ii_u32  //
wuffs_base__rect_ii_u32__unite(const wuffs_base__rect_ii_u32 * r,wuffs_base__rect_ii_u32 s)587 wuffs_base__rect_ii_u32__unite(const wuffs_base__rect_ii_u32* r,
588                                wuffs_base__rect_ii_u32 s) {
589   if (wuffs_base__rect_ii_u32__is_empty(r)) {
590     return s;
591   }
592   if (wuffs_base__rect_ii_u32__is_empty(&s)) {
593     return *r;
594   }
595   wuffs_base__rect_ii_u32 t;
596   t.min_incl_x = wuffs_base__u32__min(r->min_incl_x, s.min_incl_x);
597   t.min_incl_y = wuffs_base__u32__min(r->min_incl_y, s.min_incl_y);
598   t.max_incl_x = wuffs_base__u32__max(r->max_incl_x, s.max_incl_x);
599   t.max_incl_y = wuffs_base__u32__max(r->max_incl_y, s.max_incl_y);
600   return t;
601 }
602 
603 static inline bool  //
wuffs_base__rect_ii_u32__contains(const wuffs_base__rect_ii_u32 * r,uint32_t x,uint32_t y)604 wuffs_base__rect_ii_u32__contains(const wuffs_base__rect_ii_u32* r,
605                                   uint32_t x,
606                                   uint32_t y) {
607   return (r->min_incl_x <= x) && (x <= r->max_incl_x) && (r->min_incl_y <= y) &&
608          (y <= r->max_incl_y);
609 }
610 
611 static inline bool  //
wuffs_base__rect_ii_u32__contains_rect(const wuffs_base__rect_ii_u32 * r,wuffs_base__rect_ii_u32 s)612 wuffs_base__rect_ii_u32__contains_rect(const wuffs_base__rect_ii_u32* r,
613                                        wuffs_base__rect_ii_u32 s) {
614   return wuffs_base__rect_ii_u32__equals(
615       &s, wuffs_base__rect_ii_u32__intersect(r, s));
616 }
617 
618 #ifdef __cplusplus
619 
620 inline bool  //
is_empty()621 wuffs_base__rect_ii_u32::is_empty() const {
622   return wuffs_base__rect_ii_u32__is_empty(this);
623 }
624 
625 inline bool  //
equals(wuffs_base__rect_ii_u32 s)626 wuffs_base__rect_ii_u32::equals(wuffs_base__rect_ii_u32 s) const {
627   return wuffs_base__rect_ii_u32__equals(this, s);
628 }
629 
630 inline wuffs_base__rect_ii_u32  //
intersect(wuffs_base__rect_ii_u32 s)631 wuffs_base__rect_ii_u32::intersect(wuffs_base__rect_ii_u32 s) const {
632   return wuffs_base__rect_ii_u32__intersect(this, s);
633 }
634 
635 inline wuffs_base__rect_ii_u32  //
unite(wuffs_base__rect_ii_u32 s)636 wuffs_base__rect_ii_u32::unite(wuffs_base__rect_ii_u32 s) const {
637   return wuffs_base__rect_ii_u32__unite(this, s);
638 }
639 
640 inline bool  //
contains(uint32_t x,uint32_t y)641 wuffs_base__rect_ii_u32::contains(uint32_t x, uint32_t y) const {
642   return wuffs_base__rect_ii_u32__contains(this, x, y);
643 }
644 
645 inline bool  //
contains_rect(wuffs_base__rect_ii_u32 s)646 wuffs_base__rect_ii_u32::contains_rect(wuffs_base__rect_ii_u32 s) const {
647   return wuffs_base__rect_ii_u32__contains_rect(this, s);
648 }
649 
650 #endif  // __cplusplus
651 
652 // --------
653 
654 typedef struct wuffs_base__rect_ie_u32__struct {
655   uint32_t min_incl_x;
656   uint32_t min_incl_y;
657   uint32_t max_excl_x;
658   uint32_t max_excl_y;
659 
660 #ifdef __cplusplus
661   inline bool is_empty() const;
662   inline bool equals(wuffs_base__rect_ie_u32__struct s) const;
663   inline wuffs_base__rect_ie_u32__struct intersect(
664       wuffs_base__rect_ie_u32__struct s) const;
665   inline wuffs_base__rect_ie_u32__struct unite(
666       wuffs_base__rect_ie_u32__struct s) const;
667   inline bool contains(uint32_t x, uint32_t y) const;
668   inline bool contains_rect(wuffs_base__rect_ie_u32__struct s) const;
669   inline uint32_t width() const;
670   inline uint32_t height() const;
671 #endif  // __cplusplus
672 
673 } wuffs_base__rect_ie_u32;
674 
675 static inline wuffs_base__rect_ie_u32  //
wuffs_base__empty_rect_ie_u32()676 wuffs_base__empty_rect_ie_u32() {
677   wuffs_base__rect_ie_u32 ret;
678   ret.min_incl_x = 0;
679   ret.min_incl_y = 0;
680   ret.max_excl_x = 0;
681   ret.max_excl_y = 0;
682   return ret;
683 }
684 
685 static inline wuffs_base__rect_ie_u32  //
wuffs_base__make_rect_ie_u32(uint32_t min_incl_x,uint32_t min_incl_y,uint32_t max_excl_x,uint32_t max_excl_y)686 wuffs_base__make_rect_ie_u32(uint32_t min_incl_x,
687                              uint32_t min_incl_y,
688                              uint32_t max_excl_x,
689                              uint32_t max_excl_y) {
690   wuffs_base__rect_ie_u32 ret;
691   ret.min_incl_x = min_incl_x;
692   ret.min_incl_y = min_incl_y;
693   ret.max_excl_x = max_excl_x;
694   ret.max_excl_y = max_excl_y;
695   return ret;
696 }
697 
698 static inline bool  //
wuffs_base__rect_ie_u32__is_empty(const wuffs_base__rect_ie_u32 * r)699 wuffs_base__rect_ie_u32__is_empty(const wuffs_base__rect_ie_u32* r) {
700   return (r->min_incl_x >= r->max_excl_x) || (r->min_incl_y >= r->max_excl_y);
701 }
702 
703 static inline bool  //
wuffs_base__rect_ie_u32__equals(const wuffs_base__rect_ie_u32 * r,wuffs_base__rect_ie_u32 s)704 wuffs_base__rect_ie_u32__equals(const wuffs_base__rect_ie_u32* r,
705                                 wuffs_base__rect_ie_u32 s) {
706   return (r->min_incl_x == s.min_incl_x && r->min_incl_y == s.min_incl_y &&
707           r->max_excl_x == s.max_excl_x && r->max_excl_y == s.max_excl_y) ||
708          (wuffs_base__rect_ie_u32__is_empty(r) &&
709           wuffs_base__rect_ie_u32__is_empty(&s));
710 }
711 
712 static inline wuffs_base__rect_ie_u32  //
wuffs_base__rect_ie_u32__intersect(const wuffs_base__rect_ie_u32 * r,wuffs_base__rect_ie_u32 s)713 wuffs_base__rect_ie_u32__intersect(const wuffs_base__rect_ie_u32* r,
714                                    wuffs_base__rect_ie_u32 s) {
715   wuffs_base__rect_ie_u32 t;
716   t.min_incl_x = wuffs_base__u32__max(r->min_incl_x, s.min_incl_x);
717   t.min_incl_y = wuffs_base__u32__max(r->min_incl_y, s.min_incl_y);
718   t.max_excl_x = wuffs_base__u32__min(r->max_excl_x, s.max_excl_x);
719   t.max_excl_y = wuffs_base__u32__min(r->max_excl_y, s.max_excl_y);
720   return t;
721 }
722 
723 static inline wuffs_base__rect_ie_u32  //
wuffs_base__rect_ie_u32__unite(const wuffs_base__rect_ie_u32 * r,wuffs_base__rect_ie_u32 s)724 wuffs_base__rect_ie_u32__unite(const wuffs_base__rect_ie_u32* r,
725                                wuffs_base__rect_ie_u32 s) {
726   if (wuffs_base__rect_ie_u32__is_empty(r)) {
727     return s;
728   }
729   if (wuffs_base__rect_ie_u32__is_empty(&s)) {
730     return *r;
731   }
732   wuffs_base__rect_ie_u32 t;
733   t.min_incl_x = wuffs_base__u32__min(r->min_incl_x, s.min_incl_x);
734   t.min_incl_y = wuffs_base__u32__min(r->min_incl_y, s.min_incl_y);
735   t.max_excl_x = wuffs_base__u32__max(r->max_excl_x, s.max_excl_x);
736   t.max_excl_y = wuffs_base__u32__max(r->max_excl_y, s.max_excl_y);
737   return t;
738 }
739 
740 static inline bool  //
wuffs_base__rect_ie_u32__contains(const wuffs_base__rect_ie_u32 * r,uint32_t x,uint32_t y)741 wuffs_base__rect_ie_u32__contains(const wuffs_base__rect_ie_u32* r,
742                                   uint32_t x,
743                                   uint32_t y) {
744   return (r->min_incl_x <= x) && (x < r->max_excl_x) && (r->min_incl_y <= y) &&
745          (y < r->max_excl_y);
746 }
747 
748 static inline bool  //
wuffs_base__rect_ie_u32__contains_rect(const wuffs_base__rect_ie_u32 * r,wuffs_base__rect_ie_u32 s)749 wuffs_base__rect_ie_u32__contains_rect(const wuffs_base__rect_ie_u32* r,
750                                        wuffs_base__rect_ie_u32 s) {
751   return wuffs_base__rect_ie_u32__equals(
752       &s, wuffs_base__rect_ie_u32__intersect(r, s));
753 }
754 
755 static inline uint32_t  //
wuffs_base__rect_ie_u32__width(const wuffs_base__rect_ie_u32 * r)756 wuffs_base__rect_ie_u32__width(const wuffs_base__rect_ie_u32* r) {
757   return wuffs_base__u32__sat_sub(r->max_excl_x, r->min_incl_x);
758 }
759 
760 static inline uint32_t  //
wuffs_base__rect_ie_u32__height(const wuffs_base__rect_ie_u32 * r)761 wuffs_base__rect_ie_u32__height(const wuffs_base__rect_ie_u32* r) {
762   return wuffs_base__u32__sat_sub(r->max_excl_y, r->min_incl_y);
763 }
764 
765 #ifdef __cplusplus
766 
767 inline bool  //
is_empty()768 wuffs_base__rect_ie_u32::is_empty() const {
769   return wuffs_base__rect_ie_u32__is_empty(this);
770 }
771 
772 inline bool  //
equals(wuffs_base__rect_ie_u32 s)773 wuffs_base__rect_ie_u32::equals(wuffs_base__rect_ie_u32 s) const {
774   return wuffs_base__rect_ie_u32__equals(this, s);
775 }
776 
777 inline wuffs_base__rect_ie_u32  //
intersect(wuffs_base__rect_ie_u32 s)778 wuffs_base__rect_ie_u32::intersect(wuffs_base__rect_ie_u32 s) const {
779   return wuffs_base__rect_ie_u32__intersect(this, s);
780 }
781 
782 inline wuffs_base__rect_ie_u32  //
unite(wuffs_base__rect_ie_u32 s)783 wuffs_base__rect_ie_u32::unite(wuffs_base__rect_ie_u32 s) const {
784   return wuffs_base__rect_ie_u32__unite(this, s);
785 }
786 
787 inline bool  //
contains(uint32_t x,uint32_t y)788 wuffs_base__rect_ie_u32::contains(uint32_t x, uint32_t y) const {
789   return wuffs_base__rect_ie_u32__contains(this, x, y);
790 }
791 
792 inline bool  //
contains_rect(wuffs_base__rect_ie_u32 s)793 wuffs_base__rect_ie_u32::contains_rect(wuffs_base__rect_ie_u32 s) const {
794   return wuffs_base__rect_ie_u32__contains_rect(this, s);
795 }
796 
797 inline uint32_t  //
width()798 wuffs_base__rect_ie_u32::width() const {
799   return wuffs_base__rect_ie_u32__width(this);
800 }
801 
802 inline uint32_t  //
height()803 wuffs_base__rect_ie_u32::height() const {
804   return wuffs_base__rect_ie_u32__height(this);
805 }
806 
807 #endif  // __cplusplus
808 
809 // ---------------- More Information
810 
811 // wuffs_base__more_information holds additional fields, typically when a Wuffs
812 // method returns a [note status](/doc/note/statuses.md).
813 //
814 // The flavor field follows the base38 namespace
815 // convention](/doc/note/base38-and-fourcc.md). The other fields' semantics
816 // depends on the flavor.
817 typedef struct {
818   uint32_t flavor;
819   uint32_t w;
820   uint64_t x;
821   uint64_t y;
822   uint64_t z;
823 
824 #ifdef __cplusplus
825   inline void set(uint32_t flavor_arg,
826                   uint32_t w_arg,
827                   uint64_t x_arg,
828                   uint64_t y_arg,
829                   uint64_t z_arg);
830   inline uint32_t io_redirect__fourcc() const;
831   inline wuffs_base__range_ie_u64 io_redirect__range() const;
832   inline uint64_t io_seek__position() const;
833   inline uint32_t metadata__fourcc() const;
834   inline wuffs_base__range_ie_u64 metadata__range() const;
835 #endif  // __cplusplus
836 
837 } wuffs_base__more_information;
838 
839 #define WUFFS_BASE__MORE_INFORMATION__FLAVOR__IO_REDIRECT 1
840 #define WUFFS_BASE__MORE_INFORMATION__FLAVOR__IO_SEEK 2
841 #define WUFFS_BASE__MORE_INFORMATION__FLAVOR__METADATA 3
842 
843 static inline wuffs_base__more_information  //
wuffs_base__empty_more_information()844 wuffs_base__empty_more_information() {
845   wuffs_base__more_information ret;
846   ret.flavor = 0;
847   ret.w = 0;
848   ret.x = 0;
849   ret.y = 0;
850   ret.z = 0;
851   return ret;
852 }
853 
854 static inline void  //
wuffs_base__more_information__set(wuffs_base__more_information * m,uint32_t flavor,uint32_t w,uint64_t x,uint64_t y,uint64_t z)855 wuffs_base__more_information__set(wuffs_base__more_information* m,
856                                   uint32_t flavor,
857                                   uint32_t w,
858                                   uint64_t x,
859                                   uint64_t y,
860                                   uint64_t z) {
861   if (!m) {
862     return;
863   }
864   m->flavor = flavor;
865   m->w = w;
866   m->x = x;
867   m->y = y;
868   m->z = z;
869 }
870 
871 static inline uint32_t  //
wuffs_base__more_information__io_redirect__fourcc(const wuffs_base__more_information * m)872 wuffs_base__more_information__io_redirect__fourcc(
873     const wuffs_base__more_information* m) {
874   return m->w;
875 }
876 
877 static inline wuffs_base__range_ie_u64  //
wuffs_base__more_information__io_redirect__range(const wuffs_base__more_information * m)878 wuffs_base__more_information__io_redirect__range(
879     const wuffs_base__more_information* m) {
880   wuffs_base__range_ie_u64 ret;
881   ret.min_incl = m->y;
882   ret.max_excl = m->z;
883   return ret;
884 }
885 
886 static inline uint64_t  //
wuffs_base__more_information__io_seek__position(const wuffs_base__more_information * m)887 wuffs_base__more_information__io_seek__position(
888     const wuffs_base__more_information* m) {
889   return m->x;
890 }
891 
892 static inline uint32_t  //
wuffs_base__more_information__metadata__fourcc(const wuffs_base__more_information * m)893 wuffs_base__more_information__metadata__fourcc(
894     const wuffs_base__more_information* m) {
895   return m->w;
896 }
897 
898 static inline wuffs_base__range_ie_u64  //
wuffs_base__more_information__metadata__range(const wuffs_base__more_information * m)899 wuffs_base__more_information__metadata__range(
900     const wuffs_base__more_information* m) {
901   wuffs_base__range_ie_u64 ret;
902   ret.min_incl = m->y;
903   ret.max_excl = m->z;
904   return ret;
905 }
906 
907 #ifdef __cplusplus
908 
909 inline void  //
set(uint32_t flavor_arg,uint32_t w_arg,uint64_t x_arg,uint64_t y_arg,uint64_t z_arg)910 wuffs_base__more_information::set(uint32_t flavor_arg,
911                                   uint32_t w_arg,
912                                   uint64_t x_arg,
913                                   uint64_t y_arg,
914                                   uint64_t z_arg) {
915   wuffs_base__more_information__set(this, flavor_arg, w_arg, x_arg, y_arg,
916                                     z_arg);
917 }
918 
919 inline uint32_t  //
io_redirect__fourcc()920 wuffs_base__more_information::io_redirect__fourcc() const {
921   return wuffs_base__more_information__io_redirect__fourcc(this);
922 }
923 
924 inline wuffs_base__range_ie_u64  //
io_redirect__range()925 wuffs_base__more_information::io_redirect__range() const {
926   return wuffs_base__more_information__io_redirect__range(this);
927 }
928 
929 inline uint64_t  //
io_seek__position()930 wuffs_base__more_information::io_seek__position() const {
931   return wuffs_base__more_information__io_seek__position(this);
932 }
933 
934 inline uint32_t  //
metadata__fourcc()935 wuffs_base__more_information::metadata__fourcc() const {
936   return wuffs_base__more_information__metadata__fourcc(this);
937 }
938 
939 inline wuffs_base__range_ie_u64  //
metadata__range()940 wuffs_base__more_information::metadata__range() const {
941   return wuffs_base__more_information__metadata__range(this);
942 }
943 
944 #endif  // __cplusplus
945