region: add "has" point query

This commit is contained in:
Danny Robson 2017-07-25 17:10:16 +10:00
parent b18feb8bc4
commit d29276a427
3 changed files with 14 additions and 0 deletions

View File

@ -180,6 +180,15 @@ util::region<S,T>::contains (point_t q) const
}
//-----------------------------------------------------------------------------
template <size_t S, typename T>
bool
util::region<S,T>::has (const point_t q) const noexcept
{
return all (q >= p) && all (q < p + e);
}
//-----------------------------------------------------------------------------
// FIXME: This will fail with an actual infinite range (NaNs will be generated
// in the conditionals).

View File

@ -74,6 +74,7 @@ namespace util {
bool includes (point_t) const; // inclusive of borders
bool contains (point_t) const; // exclusive of borders
bool intersects (region<S,T>) const; // exclusive of borders
bool has (point_t) const noexcept; // inclusive of top and left borders
// Move a point to be within the region bounds
void constrain (point_t&) const;

View File

@ -57,6 +57,10 @@ main (int, char **)
tap.expect ( r.contains (util::point2u {1, 1}), "unsigned region center contains");
tap.expect (!r.contains (util::point2u {0, 0}), "unsigned region base contains");
tap.expect (!r.contains (util::point2u {2, 2}), "unsigned region corner contains");
tap.expect ( r.has (util::point2u {1, 1}), "unsigned region centre has");
tap.expect ( r.has (util::point2u {1, 1}), "unsigned region base has");
tap.expect (!r.has (util::point2u {2, 2}), "unsigned region corner has");
}
//CHECK (region<2,intmax_t> (0, 0, 10, 10).includes (point2d (0.4, 0.01)));