| // After editing this file, run "go generate" in the parent directory. |
| |
| // Copyright 2017 The Wuffs Authors. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // https://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| // ---------------- Ranges and Rects |
| |
| // See https://github.com/google/wuffs/blob/master/doc/note/ranges-and-rects.md |
| |
| typedef struct wuffs_base__range_ii_u32__struct { |
| uint32_t min_incl; |
| uint32_t max_incl; |
| |
| #ifdef __cplusplus |
| inline bool is_empty() const; |
| inline bool equals(wuffs_base__range_ii_u32__struct s) const; |
| inline wuffs_base__range_ii_u32__struct intersect( |
| wuffs_base__range_ii_u32__struct s) const; |
| inline wuffs_base__range_ii_u32__struct unite( |
| wuffs_base__range_ii_u32__struct s) const; |
| inline bool contains(uint32_t x) const; |
| inline bool contains_range(wuffs_base__range_ii_u32__struct s) const; |
| #endif // __cplusplus |
| |
| } wuffs_base__range_ii_u32; |
| |
| static inline wuffs_base__range_ii_u32 // |
| wuffs_base__make_range_ii_u32(uint32_t min_incl, uint32_t max_incl) { |
| wuffs_base__range_ii_u32 ret; |
| ret.min_incl = min_incl; |
| ret.max_incl = max_incl; |
| return ret; |
| } |
| |
| static inline bool // |
| wuffs_base__range_ii_u32__is_empty(const wuffs_base__range_ii_u32* r) { |
| return r->min_incl > r->max_incl; |
| } |
| |
| static inline bool // |
| wuffs_base__range_ii_u32__equals(const wuffs_base__range_ii_u32* r, |
| wuffs_base__range_ii_u32 s) { |
| return (r->min_incl == s.min_incl && r->max_incl == s.max_incl) || |
| (wuffs_base__range_ii_u32__is_empty(r) && |
| wuffs_base__range_ii_u32__is_empty(&s)); |
| } |
| |
| 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) { |
| wuffs_base__range_ii_u32 t; |
| t.min_incl = wuffs_base__u32__max(r->min_incl, s.min_incl); |
| t.max_incl = wuffs_base__u32__min(r->max_incl, s.max_incl); |
| return t; |
| } |
| |
| 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) { |
| if (wuffs_base__range_ii_u32__is_empty(r)) { |
| return s; |
| } |
| if (wuffs_base__range_ii_u32__is_empty(&s)) { |
| return *r; |
| } |
| wuffs_base__range_ii_u32 t; |
| t.min_incl = wuffs_base__u32__min(r->min_incl, s.min_incl); |
| t.max_incl = wuffs_base__u32__max(r->max_incl, s.max_incl); |
| return t; |
| } |
| |
| static inline bool // |
| wuffs_base__range_ii_u32__contains(const wuffs_base__range_ii_u32* r, |
| uint32_t x) { |
| return (r->min_incl <= x) && (x <= r->max_incl); |
| } |
| |
| static inline bool // |
| wuffs_base__range_ii_u32__contains_range(const wuffs_base__range_ii_u32* r, |
| wuffs_base__range_ii_u32 s) { |
| return wuffs_base__range_ii_u32__equals( |
| &s, wuffs_base__range_ii_u32__intersect(r, s)); |
| } |
| |
| #ifdef __cplusplus |
| |
| inline bool // |
| wuffs_base__range_ii_u32::is_empty() const { |
| return wuffs_base__range_ii_u32__is_empty(this); |
| } |
| |
| inline bool // |
| wuffs_base__range_ii_u32::equals(wuffs_base__range_ii_u32 s) const { |
| return wuffs_base__range_ii_u32__equals(this, s); |
| } |
| |
| inline wuffs_base__range_ii_u32 // |
| wuffs_base__range_ii_u32::intersect(wuffs_base__range_ii_u32 s) const { |
| return wuffs_base__range_ii_u32__intersect(this, s); |
| } |
| |
| inline wuffs_base__range_ii_u32 // |
| wuffs_base__range_ii_u32::unite(wuffs_base__range_ii_u32 s) const { |
| return wuffs_base__range_ii_u32__unite(this, s); |
| } |
| |
| inline bool // |
| wuffs_base__range_ii_u32::contains(uint32_t x) const { |
| return wuffs_base__range_ii_u32__contains(this, x); |
| } |
| |
| inline bool // |
| wuffs_base__range_ii_u32::contains_range(wuffs_base__range_ii_u32 s) const { |
| return wuffs_base__range_ii_u32__contains_range(this, s); |
| } |
| |
| #endif // __cplusplus |
| |
| // -------- |
| |
| typedef struct wuffs_base__range_ie_u32__struct { |
| uint32_t min_incl; |
| uint32_t max_excl; |
| |
| #ifdef __cplusplus |
| inline bool is_empty() const; |
| inline bool equals(wuffs_base__range_ie_u32__struct s) const; |
| inline wuffs_base__range_ie_u32__struct intersect( |
| wuffs_base__range_ie_u32__struct s) const; |
| inline wuffs_base__range_ie_u32__struct unite( |
| wuffs_base__range_ie_u32__struct s) const; |
| inline bool contains(uint32_t x) const; |
| inline bool contains_range(wuffs_base__range_ie_u32__struct s) const; |
| inline uint32_t length() const; |
| #endif // __cplusplus |
| |
| } wuffs_base__range_ie_u32; |
| |
| static inline wuffs_base__range_ie_u32 // |
| wuffs_base__make_range_ie_u32(uint32_t min_incl, uint32_t max_excl) { |
| wuffs_base__range_ie_u32 ret; |
| ret.min_incl = min_incl; |
| ret.max_excl = max_excl; |
| return ret; |
| } |
| |
| static inline bool // |
| wuffs_base__range_ie_u32__is_empty(const wuffs_base__range_ie_u32* r) { |
| return r->min_incl >= r->max_excl; |
| } |
| |
| static inline bool // |
| wuffs_base__range_ie_u32__equals(const wuffs_base__range_ie_u32* r, |
| wuffs_base__range_ie_u32 s) { |
| return (r->min_incl == s.min_incl && r->max_excl == s.max_excl) || |
| (wuffs_base__range_ie_u32__is_empty(r) && |
| wuffs_base__range_ie_u32__is_empty(&s)); |
| } |
| |
| 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) { |
| wuffs_base__range_ie_u32 t; |
| t.min_incl = wuffs_base__u32__max(r->min_incl, s.min_incl); |
| t.max_excl = wuffs_base__u32__min(r->max_excl, s.max_excl); |
| return t; |
| } |
| |
| 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) { |
| if (wuffs_base__range_ie_u32__is_empty(r)) { |
| return s; |
| } |
| if (wuffs_base__range_ie_u32__is_empty(&s)) { |
| return *r; |
| } |
| wuffs_base__range_ie_u32 t; |
| t.min_incl = wuffs_base__u32__min(r->min_incl, s.min_incl); |
| t.max_excl = wuffs_base__u32__max(r->max_excl, s.max_excl); |
| return t; |
| } |
| |
| static inline bool // |
| wuffs_base__range_ie_u32__contains(const wuffs_base__range_ie_u32* r, |
| uint32_t x) { |
| return (r->min_incl <= x) && (x < r->max_excl); |
| } |
| |
| static inline bool // |
| wuffs_base__range_ie_u32__contains_range(const wuffs_base__range_ie_u32* r, |
| wuffs_base__range_ie_u32 s) { |
| return wuffs_base__range_ie_u32__equals( |
| &s, wuffs_base__range_ie_u32__intersect(r, s)); |
| } |
| |
| static inline uint32_t // |
| wuffs_base__range_ie_u32__length(const wuffs_base__range_ie_u32* r) { |
| return wuffs_base__u32__sat_sub(r->max_excl, r->min_incl); |
| } |
| |
| #ifdef __cplusplus |
| |
| inline bool // |
| wuffs_base__range_ie_u32::is_empty() const { |
| return wuffs_base__range_ie_u32__is_empty(this); |
| } |
| |
| inline bool // |
| wuffs_base__range_ie_u32::equals(wuffs_base__range_ie_u32 s) const { |
| return wuffs_base__range_ie_u32__equals(this, s); |
| } |
| |
| inline wuffs_base__range_ie_u32 // |
| wuffs_base__range_ie_u32::intersect(wuffs_base__range_ie_u32 s) const { |
| return wuffs_base__range_ie_u32__intersect(this, s); |
| } |
| |
| inline wuffs_base__range_ie_u32 // |
| wuffs_base__range_ie_u32::unite(wuffs_base__range_ie_u32 s) const { |
| return wuffs_base__range_ie_u32__unite(this, s); |
| } |
| |
| inline bool // |
| wuffs_base__range_ie_u32::contains(uint32_t x) const { |
| return wuffs_base__range_ie_u32__contains(this, x); |
| } |
| |
| inline bool // |
| wuffs_base__range_ie_u32::contains_range(wuffs_base__range_ie_u32 s) const { |
| return wuffs_base__range_ie_u32__contains_range(this, s); |
| } |
| |
| inline uint32_t // |
| wuffs_base__range_ie_u32::length() const { |
| return wuffs_base__range_ie_u32__length(this); |
| } |
| |
| #endif // __cplusplus |
| |
| // -------- |
| |
| typedef struct wuffs_base__range_ii_u64__struct { |
| uint64_t min_incl; |
| uint64_t max_incl; |
| |
| #ifdef __cplusplus |
| inline bool is_empty() const; |
| inline bool equals(wuffs_base__range_ii_u64__struct s) const; |
| inline wuffs_base__range_ii_u64__struct intersect( |
| wuffs_base__range_ii_u64__struct s) const; |
| inline wuffs_base__range_ii_u64__struct unite( |
| wuffs_base__range_ii_u64__struct s) const; |
| inline bool contains(uint64_t x) const; |
| inline bool contains_range(wuffs_base__range_ii_u64__struct s) const; |
| #endif // __cplusplus |
| |
| } wuffs_base__range_ii_u64; |
| |
| static inline wuffs_base__range_ii_u64 // |
| wuffs_base__make_range_ii_u64(uint64_t min_incl, uint64_t max_incl) { |
| wuffs_base__range_ii_u64 ret; |
| ret.min_incl = min_incl; |
| ret.max_incl = max_incl; |
| return ret; |
| } |
| |
| static inline bool // |
| wuffs_base__range_ii_u64__is_empty(const wuffs_base__range_ii_u64* r) { |
| return r->min_incl > r->max_incl; |
| } |
| |
| static inline bool // |
| wuffs_base__range_ii_u64__equals(const wuffs_base__range_ii_u64* r, |
| wuffs_base__range_ii_u64 s) { |
| return (r->min_incl == s.min_incl && r->max_incl == s.max_incl) || |
| (wuffs_base__range_ii_u64__is_empty(r) && |
| wuffs_base__range_ii_u64__is_empty(&s)); |
| } |
| |
| 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) { |
| wuffs_base__range_ii_u64 t; |
| t.min_incl = wuffs_base__u64__max(r->min_incl, s.min_incl); |
| t.max_incl = wuffs_base__u64__min(r->max_incl, s.max_incl); |
| return t; |
| } |
| |
| 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) { |
| if (wuffs_base__range_ii_u64__is_empty(r)) { |
| return s; |
| } |
| if (wuffs_base__range_ii_u64__is_empty(&s)) { |
| return *r; |
| } |
| wuffs_base__range_ii_u64 t; |
| t.min_incl = wuffs_base__u64__min(r->min_incl, s.min_incl); |
| t.max_incl = wuffs_base__u64__max(r->max_incl, s.max_incl); |
| return t; |
| } |
| |
| static inline bool // |
| wuffs_base__range_ii_u64__contains(const wuffs_base__range_ii_u64* r, |
| uint64_t x) { |
| return (r->min_incl <= x) && (x <= r->max_incl); |
| } |
| |
| static inline bool // |
| wuffs_base__range_ii_u64__contains_range(const wuffs_base__range_ii_u64* r, |
| wuffs_base__range_ii_u64 s) { |
| return wuffs_base__range_ii_u64__equals( |
| &s, wuffs_base__range_ii_u64__intersect(r, s)); |
| } |
| |
| #ifdef __cplusplus |
| |
| inline bool // |
| wuffs_base__range_ii_u64::is_empty() const { |
| return wuffs_base__range_ii_u64__is_empty(this); |
| } |
| |
| inline bool // |
| wuffs_base__range_ii_u64::equals(wuffs_base__range_ii_u64 s) const { |
| return wuffs_base__range_ii_u64__equals(this, s); |
| } |
| |
| inline wuffs_base__range_ii_u64 // |
| wuffs_base__range_ii_u64::intersect(wuffs_base__range_ii_u64 s) const { |
| return wuffs_base__range_ii_u64__intersect(this, s); |
| } |
| |
| inline wuffs_base__range_ii_u64 // |
| wuffs_base__range_ii_u64::unite(wuffs_base__range_ii_u64 s) const { |
| return wuffs_base__range_ii_u64__unite(this, s); |
| } |
| |
| inline bool // |
| wuffs_base__range_ii_u64::contains(uint64_t x) const { |
| return wuffs_base__range_ii_u64__contains(this, x); |
| } |
| |
| inline bool // |
| wuffs_base__range_ii_u64::contains_range(wuffs_base__range_ii_u64 s) const { |
| return wuffs_base__range_ii_u64__contains_range(this, s); |
| } |
| |
| #endif // __cplusplus |
| |
| // -------- |
| |
| typedef struct wuffs_base__range_ie_u64__struct { |
| uint64_t min_incl; |
| uint64_t max_excl; |
| |
| #ifdef __cplusplus |
| inline bool is_empty() const; |
| inline bool equals(wuffs_base__range_ie_u64__struct s) const; |
| inline wuffs_base__range_ie_u64__struct intersect( |
| wuffs_base__range_ie_u64__struct s) const; |
| inline wuffs_base__range_ie_u64__struct unite( |
| wuffs_base__range_ie_u64__struct s) const; |
| inline bool contains(uint64_t x) const; |
| inline bool contains_range(wuffs_base__range_ie_u64__struct s) const; |
| inline uint64_t length() const; |
| #endif // __cplusplus |
| |
| } wuffs_base__range_ie_u64; |
| |
| static inline wuffs_base__range_ie_u64 // |
| wuffs_base__make_range_ie_u64(uint64_t min_incl, uint64_t max_excl) { |
| wuffs_base__range_ie_u64 ret; |
| ret.min_incl = min_incl; |
| ret.max_excl = max_excl; |
| return ret; |
| } |
| |
| static inline bool // |
| wuffs_base__range_ie_u64__is_empty(const wuffs_base__range_ie_u64* r) { |
| return r->min_incl >= r->max_excl; |
| } |
| |
| static inline bool // |
| wuffs_base__range_ie_u64__equals(const wuffs_base__range_ie_u64* r, |
| wuffs_base__range_ie_u64 s) { |
| return (r->min_incl == s.min_incl && r->max_excl == s.max_excl) || |
| (wuffs_base__range_ie_u64__is_empty(r) && |
| wuffs_base__range_ie_u64__is_empty(&s)); |
| } |
| |
| 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) { |
| wuffs_base__range_ie_u64 t; |
| t.min_incl = wuffs_base__u64__max(r->min_incl, s.min_incl); |
| t.max_excl = wuffs_base__u64__min(r->max_excl, s.max_excl); |
| return t; |
| } |
| |
| 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) { |
| if (wuffs_base__range_ie_u64__is_empty(r)) { |
| return s; |
| } |
| if (wuffs_base__range_ie_u64__is_empty(&s)) { |
| return *r; |
| } |
| wuffs_base__range_ie_u64 t; |
| t.min_incl = wuffs_base__u64__min(r->min_incl, s.min_incl); |
| t.max_excl = wuffs_base__u64__max(r->max_excl, s.max_excl); |
| return t; |
| } |
| |
| static inline bool // |
| wuffs_base__range_ie_u64__contains(const wuffs_base__range_ie_u64* r, |
| uint64_t x) { |
| return (r->min_incl <= x) && (x < r->max_excl); |
| } |
| |
| static inline bool // |
| wuffs_base__range_ie_u64__contains_range(const wuffs_base__range_ie_u64* r, |
| wuffs_base__range_ie_u64 s) { |
| return wuffs_base__range_ie_u64__equals( |
| &s, wuffs_base__range_ie_u64__intersect(r, s)); |
| } |
| |
| static inline uint64_t // |
| wuffs_base__range_ie_u64__length(const wuffs_base__range_ie_u64* r) { |
| return wuffs_base__u64__sat_sub(r->max_excl, r->min_incl); |
| } |
| |
| #ifdef __cplusplus |
| |
| inline bool // |
| wuffs_base__range_ie_u64::is_empty() const { |
| return wuffs_base__range_ie_u64__is_empty(this); |
| } |
| |
| inline bool // |
| wuffs_base__range_ie_u64::equals(wuffs_base__range_ie_u64 s) const { |
| return wuffs_base__range_ie_u64__equals(this, s); |
| } |
| |
| inline wuffs_base__range_ie_u64 // |
| wuffs_base__range_ie_u64::intersect(wuffs_base__range_ie_u64 s) const { |
| return wuffs_base__range_ie_u64__intersect(this, s); |
| } |
| |
| inline wuffs_base__range_ie_u64 // |
| wuffs_base__range_ie_u64::unite(wuffs_base__range_ie_u64 s) const { |
| return wuffs_base__range_ie_u64__unite(this, s); |
| } |
| |
| inline bool // |
| wuffs_base__range_ie_u64::contains(uint64_t x) const { |
| return wuffs_base__range_ie_u64__contains(this, x); |
| } |
| |
| inline bool // |
| wuffs_base__range_ie_u64::contains_range(wuffs_base__range_ie_u64 s) const { |
| return wuffs_base__range_ie_u64__contains_range(this, s); |
| } |
| |
| inline uint64_t // |
| wuffs_base__range_ie_u64::length() const { |
| return wuffs_base__range_ie_u64__length(this); |
| } |
| |
| #endif // __cplusplus |
| |
| // -------- |
| |
| typedef struct wuffs_base__rect_ii_u32__struct { |
| uint32_t min_incl_x; |
| uint32_t min_incl_y; |
| uint32_t max_incl_x; |
| uint32_t max_incl_y; |
| |
| #ifdef __cplusplus |
| inline bool is_empty() const; |
| inline bool equals(wuffs_base__rect_ii_u32__struct s) const; |
| inline wuffs_base__rect_ii_u32__struct intersect( |
| wuffs_base__rect_ii_u32__struct s) const; |
| inline wuffs_base__rect_ii_u32__struct unite( |
| wuffs_base__rect_ii_u32__struct s) const; |
| inline bool contains(uint32_t x, uint32_t y) const; |
| inline bool contains_rect(wuffs_base__rect_ii_u32__struct s) const; |
| #endif // __cplusplus |
| |
| } wuffs_base__rect_ii_u32; |
| |
| 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) { |
| wuffs_base__rect_ii_u32 ret; |
| ret.min_incl_x = min_incl_x; |
| ret.min_incl_y = min_incl_y; |
| ret.max_incl_x = max_incl_x; |
| ret.max_incl_y = max_incl_y; |
| return ret; |
| } |
| |
| static inline bool // |
| wuffs_base__rect_ii_u32__is_empty(const wuffs_base__rect_ii_u32* r) { |
| return (r->min_incl_x > r->max_incl_x) || (r->min_incl_y > r->max_incl_y); |
| } |
| |
| static inline bool // |
| wuffs_base__rect_ii_u32__equals(const wuffs_base__rect_ii_u32* r, |
| wuffs_base__rect_ii_u32 s) { |
| return (r->min_incl_x == s.min_incl_x && r->min_incl_y == s.min_incl_y && |
| r->max_incl_x == s.max_incl_x && r->max_incl_y == s.max_incl_y) || |
| (wuffs_base__rect_ii_u32__is_empty(r) && |
| wuffs_base__rect_ii_u32__is_empty(&s)); |
| } |
| |
| 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) { |
| wuffs_base__rect_ii_u32 t; |
| t.min_incl_x = wuffs_base__u32__max(r->min_incl_x, s.min_incl_x); |
| t.min_incl_y = wuffs_base__u32__max(r->min_incl_y, s.min_incl_y); |
| t.max_incl_x = wuffs_base__u32__min(r->max_incl_x, s.max_incl_x); |
| t.max_incl_y = wuffs_base__u32__min(r->max_incl_y, s.max_incl_y); |
| return t; |
| } |
| |
| 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) { |
| if (wuffs_base__rect_ii_u32__is_empty(r)) { |
| return s; |
| } |
| if (wuffs_base__rect_ii_u32__is_empty(&s)) { |
| return *r; |
| } |
| wuffs_base__rect_ii_u32 t; |
| t.min_incl_x = wuffs_base__u32__min(r->min_incl_x, s.min_incl_x); |
| t.min_incl_y = wuffs_base__u32__min(r->min_incl_y, s.min_incl_y); |
| t.max_incl_x = wuffs_base__u32__max(r->max_incl_x, s.max_incl_x); |
| t.max_incl_y = wuffs_base__u32__max(r->max_incl_y, s.max_incl_y); |
| return t; |
| } |
| |
| static inline bool // |
| wuffs_base__rect_ii_u32__contains(const wuffs_base__rect_ii_u32* r, |
| uint32_t x, |
| uint32_t y) { |
| return (r->min_incl_x <= x) && (x <= r->max_incl_x) && (r->min_incl_y <= y) && |
| (y <= r->max_incl_y); |
| } |
| |
| static inline bool // |
| wuffs_base__rect_ii_u32__contains_rect(const wuffs_base__rect_ii_u32* r, |
| wuffs_base__rect_ii_u32 s) { |
| return wuffs_base__rect_ii_u32__equals( |
| &s, wuffs_base__rect_ii_u32__intersect(r, s)); |
| } |
| |
| #ifdef __cplusplus |
| |
| inline bool // |
| wuffs_base__rect_ii_u32::is_empty() const { |
| return wuffs_base__rect_ii_u32__is_empty(this); |
| } |
| |
| inline bool // |
| wuffs_base__rect_ii_u32::equals(wuffs_base__rect_ii_u32 s) const { |
| return wuffs_base__rect_ii_u32__equals(this, s); |
| } |
| |
| inline wuffs_base__rect_ii_u32 // |
| wuffs_base__rect_ii_u32::intersect(wuffs_base__rect_ii_u32 s) const { |
| return wuffs_base__rect_ii_u32__intersect(this, s); |
| } |
| |
| inline wuffs_base__rect_ii_u32 // |
| wuffs_base__rect_ii_u32::unite(wuffs_base__rect_ii_u32 s) const { |
| return wuffs_base__rect_ii_u32__unite(this, s); |
| } |
| |
| inline bool // |
| wuffs_base__rect_ii_u32::contains(uint32_t x, uint32_t y) const { |
| return wuffs_base__rect_ii_u32__contains(this, x, y); |
| } |
| |
| inline bool // |
| wuffs_base__rect_ii_u32::contains_rect(wuffs_base__rect_ii_u32 s) const { |
| return wuffs_base__rect_ii_u32__contains_rect(this, s); |
| } |
| |
| #endif // __cplusplus |
| |
| // -------- |
| |
| typedef struct wuffs_base__rect_ie_u32__struct { |
| uint32_t min_incl_x; |
| uint32_t min_incl_y; |
| uint32_t max_excl_x; |
| uint32_t max_excl_y; |
| |
| #ifdef __cplusplus |
| inline bool is_empty() const; |
| inline bool equals(wuffs_base__rect_ie_u32__struct s) const; |
| inline wuffs_base__rect_ie_u32__struct intersect( |
| wuffs_base__rect_ie_u32__struct s) const; |
| inline wuffs_base__rect_ie_u32__struct unite( |
| wuffs_base__rect_ie_u32__struct s) const; |
| inline bool contains(uint32_t x, uint32_t y) const; |
| inline bool contains_rect(wuffs_base__rect_ie_u32__struct s) const; |
| inline uint32_t width() const; |
| inline uint32_t height() const; |
| #endif // __cplusplus |
| |
| } wuffs_base__rect_ie_u32; |
| |
| 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) { |
| wuffs_base__rect_ie_u32 ret; |
| ret.min_incl_x = min_incl_x; |
| ret.min_incl_y = min_incl_y; |
| ret.max_excl_x = max_excl_x; |
| ret.max_excl_y = max_excl_y; |
| return ret; |
| } |
| |
| static inline bool // |
| wuffs_base__rect_ie_u32__is_empty(const wuffs_base__rect_ie_u32* r) { |
| return (r->min_incl_x >= r->max_excl_x) || (r->min_incl_y >= r->max_excl_y); |
| } |
| |
| static inline bool // |
| wuffs_base__rect_ie_u32__equals(const wuffs_base__rect_ie_u32* r, |
| wuffs_base__rect_ie_u32 s) { |
| return (r->min_incl_x == s.min_incl_x && r->min_incl_y == s.min_incl_y && |
| r->max_excl_x == s.max_excl_x && r->max_excl_y == s.max_excl_y) || |
| (wuffs_base__rect_ie_u32__is_empty(r) && |
| wuffs_base__rect_ie_u32__is_empty(&s)); |
| } |
| |
| 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) { |
| wuffs_base__rect_ie_u32 t; |
| t.min_incl_x = wuffs_base__u32__max(r->min_incl_x, s.min_incl_x); |
| t.min_incl_y = wuffs_base__u32__max(r->min_incl_y, s.min_incl_y); |
| t.max_excl_x = wuffs_base__u32__min(r->max_excl_x, s.max_excl_x); |
| t.max_excl_y = wuffs_base__u32__min(r->max_excl_y, s.max_excl_y); |
| return t; |
| } |
| |
| 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) { |
| if (wuffs_base__rect_ie_u32__is_empty(r)) { |
| return s; |
| } |
| if (wuffs_base__rect_ie_u32__is_empty(&s)) { |
| return *r; |
| } |
| wuffs_base__rect_ie_u32 t; |
| t.min_incl_x = wuffs_base__u32__min(r->min_incl_x, s.min_incl_x); |
| t.min_incl_y = wuffs_base__u32__min(r->min_incl_y, s.min_incl_y); |
| t.max_excl_x = wuffs_base__u32__max(r->max_excl_x, s.max_excl_x); |
| t.max_excl_y = wuffs_base__u32__max(r->max_excl_y, s.max_excl_y); |
| return t; |
| } |
| |
| static inline bool // |
| wuffs_base__rect_ie_u32__contains(const wuffs_base__rect_ie_u32* r, |
| uint32_t x, |
| uint32_t y) { |
| return (r->min_incl_x <= x) && (x < r->max_excl_x) && (r->min_incl_y <= y) && |
| (y < r->max_excl_y); |
| } |
| |
| static inline bool // |
| wuffs_base__rect_ie_u32__contains_rect(const wuffs_base__rect_ie_u32* r, |
| wuffs_base__rect_ie_u32 s) { |
| return wuffs_base__rect_ie_u32__equals( |
| &s, wuffs_base__rect_ie_u32__intersect(r, s)); |
| } |
| |
| static inline uint32_t // |
| wuffs_base__rect_ie_u32__width(const wuffs_base__rect_ie_u32* r) { |
| return wuffs_base__u32__sat_sub(r->max_excl_x, r->min_incl_x); |
| } |
| |
| static inline uint32_t // |
| wuffs_base__rect_ie_u32__height(const wuffs_base__rect_ie_u32* r) { |
| return wuffs_base__u32__sat_sub(r->max_excl_y, r->min_incl_y); |
| } |
| |
| #ifdef __cplusplus |
| |
| inline bool // |
| wuffs_base__rect_ie_u32::is_empty() const { |
| return wuffs_base__rect_ie_u32__is_empty(this); |
| } |
| |
| inline bool // |
| wuffs_base__rect_ie_u32::equals(wuffs_base__rect_ie_u32 s) const { |
| return wuffs_base__rect_ie_u32__equals(this, s); |
| } |
| |
| inline wuffs_base__rect_ie_u32 // |
| wuffs_base__rect_ie_u32::intersect(wuffs_base__rect_ie_u32 s) const { |
| return wuffs_base__rect_ie_u32__intersect(this, s); |
| } |
| |
| inline wuffs_base__rect_ie_u32 // |
| wuffs_base__rect_ie_u32::unite(wuffs_base__rect_ie_u32 s) const { |
| return wuffs_base__rect_ie_u32__unite(this, s); |
| } |
| |
| inline bool // |
| wuffs_base__rect_ie_u32::contains(uint32_t x, uint32_t y) const { |
| return wuffs_base__rect_ie_u32__contains(this, x, y); |
| } |
| |
| inline bool // |
| wuffs_base__rect_ie_u32::contains_rect(wuffs_base__rect_ie_u32 s) const { |
| return wuffs_base__rect_ie_u32__contains_rect(this, s); |
| } |
| |
| inline uint32_t // |
| wuffs_base__rect_ie_u32::width() const { |
| return wuffs_base__rect_ie_u32__width(this); |
| } |
| |
| inline uint32_t // |
| wuffs_base__rect_ie_u32::height() const { |
| return wuffs_base__rect_ie_u32__height(this); |
| } |
| |
| #endif // __cplusplus |