1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
// Copyright (c) 2000 Max-Planck-Institute Saarbruecken (Germany).
// All rights reserved.
//
// This file is part of CGAL (www.cgal.org).
//
// $URL: https://github.com/CGAL/cgal/blob/v6.1.1/Partition_2/include/CGAL/Partition_2/Circulator_pair.h $
// $Id: include/CGAL/Partition_2/Circulator_pair.h 08b27d3db14 $
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial
//
//
// Author(s) : Susan Hert <hert@mpi-sb.mpg.de>
#ifndef CGAL_CIRC_PAIR_H
#define CGAL_CIRC_PAIR_H
#include <CGAL/license/Partition_2.h>
#include <CGAL/enum.h>
namespace CGAL {
//
// "before" always means a point between front and back in the indicated
// direction
//
// "after" always means a point just beyond the range of [front,back]
//
template <class BidirectionalCirculator>
class Circ_pair
{
public:
Circ_pair(BidirectionalCirculator back, BidirectionalCirculator front) :
_front(front), _back(back), _direction(COUNTERCLOCKWISE) {}
Circ_pair(BidirectionalCirculator back, BidirectionalCirculator front,
Orientation dir) : _front(front), _back(back), _direction(dir) {}
Circ_pair(BidirectionalCirculator front_and_back, Orientation dir) :
_front(front_and_back), _back(front_and_back), _direction(dir) {}
void initialize(BidirectionalCirculator new_back_and_front)
{
_back = _front = new_back_and_front;
}
void push_back(BidirectionalCirculator new_back)
{
_back = new_back;
}
void pop_back()
{
_back = before_back();
}
void push_front(BidirectionalCirculator new_front)
{
_front = new_front;
}
void pop_front()
{
_front = before_front();
}
BidirectionalCirculator front() const
{
return _front;
}
BidirectionalCirculator back() const
{
return _back;
}
Orientation direction() const
{
return _direction;
}
void set_direction(Orientation direction)
{
_direction = direction;
}
void change_dir()
{
if (_direction == CLOCKWISE)
_direction = COUNTERCLOCKWISE;
else
_direction = CLOCKWISE;
}
BidirectionalCirculator before_back()
{
BidirectionalCirculator temp = _back;
if (_direction == COUNTERCLOCKWISE)
return ++temp;
else
return --temp;
}
BidirectionalCirculator after_back()
{
BidirectionalCirculator temp = _back;
if (_direction == COUNTERCLOCKWISE)
return --temp;
else
return ++temp;
}
BidirectionalCirculator before_front()
{
BidirectionalCirculator temp = _front;
if (_direction == COUNTERCLOCKWISE)
return --temp;
else
return ++temp;
}
BidirectionalCirculator after_front()
{
BidirectionalCirculator temp = _front;
if (_direction == COUNTERCLOCKWISE)
return ++temp;
else
return --temp;
}
private:
BidirectionalCirculator _front, _back;
Orientation _direction;
};
}
#endif // CGAL_CIRC_PAIR_H
|