7 namespace frechet {
namespace reach {
173 operator bool ()
const;
215 return (this->l==that.
l) && (this->h==that.
h);
242 Pointer min(
const PointerInterval& a,
const PointerInterval& b);
263 Pointer max(
const PointerInterval& a,
const PointerInterval& b);
311 while(hops--) result = result->
temp.
_twin;
338 void* owner()
const {
return temp.owner; }
342 void setOwner(
void* own)
const {
temp.owner=own; }
396 return (this->type==that.
type)
397 && (this->ori==that.
ori)
398 && (this->dir==that.
dir)
401 #ifdef BOUNDARY_VDESTRUCTOR bool empty_see_through_interval(Pointer p)
test intersection of intervals. Assumes a SEE_THROUGH segment.
Pointer max(const Pointer a, const Pointer b)
maximum of two reachability intervals; compare lower bound, then upper bound
Pointer min(const Pointer a, const Pointer b)
minimum of two reachability intervals; compare lower bound, then upper bound
PointerInterval operator+(const PointerInterval &that) const
merge operator
clockwise interval (bottom-then-left)
reachable: other intervals are reachable
BoundarySegment & operator=(const PointerInterval &lh)
assigment operator from interval
void clear()
clear both pointer (assgin nullptr)
bottom and left part of the reachability structure
PointerInterval & swap(bool doit=true)
conditional swap
see-through: other interals are visible with a straight line
global definitions for all algorithms.
PointerInterval swapped() const
const Orientation ori
horizontal or vertical
non-accesible. no interval is reachable from this one
data::LinkedList< BoundarySegment > BoundaryList
a double-linked list of reachability segments. makes up one of the four edges of a reachability struc...
Pointer createClone() const
create an identical copy of this segment
Direction
direction of a Pointer inside the reachability structure.
Interval()
Default constructor. Creates an invalid Interval.
struct frechet::reach::BoundarySegment::@4 temp
temporary data used during merge and split operations
boundary interval in the reachability structure. Represents an interval on the boundary of the FreeSp...
describes l,h pointers. Both pointers are assumed to point into the same rectangle section (right-top...
backward l,h pointer = from second INTO first segment
PointerInterval()
empty constructor; constructs an invalid interval, with both pointers being nullptr
int compare_pointers(Pointer a, Pointer b)
compare two pointers on opposite parts of a reachability structure (eitehr left->right-top,...
BoundarySegment * Pointer
(dumb) pointer to a BoundarySegment object
Type type
reachability label
PointerInterval normalized() const
assumes identical orientation !!
std::ostream & operator<<(std::ostream &out, const BoundaryList &list)
print operator for debugging
bool contains(double x) const
containment test
Pointer clone
points to a clone of this object
PointerInterval & operator=(const Pointer &p)
assigment
right and top part of the reachability structure
void clear()
clears pointers, keep interval bounds
Orientation
Segment Orientation.
counter-clockwise interval (right-then-top)
second segment = right and top edge
void clearClone() const
disconnect from clone. Does not release any memory.
bool contains(Pointer p) const
containment test
const Direction dir
left/right or bottom/top
Pointer l
points to the lowest segment of the interval
int compare_interval(Pointer a, Pointer b)
compare two pointers in the same part of a reachability structure (either right-top,...
bool contains(Pointer p) const
containment test
Orientation opposite(Orientation ori)
forward l,h pointer = from first INTO second segment
Orientation & operator++(Orientation &ori)
pre-increment an orientation variable. Note that an orientation variable can only be incremented once...
bool contains(double x) const
containment test (assumes closed interval, bounds inclusive)
bool operator==(const PointerInterval &that) const
comparison operator
BoundarySegment(const Interval &ival, Orientation ori, Direction dir, Type t, void *owner=nullptr)
default constructor
The Reachability Structure; maintains a list of intervals on the border of Free Space,...
Pointer h
points to the highest segment of the interval
first segment = bottom and left edge
base template for elements of a LinkedList
an interval of two double values.
Pointer _twin
points to a segment on the opposite edge of the reachability structure. twins have the same boundary ...
bool operator==(const BoundarySegment &that) const
comparison operator
bool empty_interval(Pointer a, Pointer b)
test intersection of intervals