6 #include <boost/range/algorithm/max_element.hpp>     7 #include <boost/range/algorithm/min_element.hpp>     8 #include <boost/range/algorithm_ext/is_sorted.hpp>     9 #include <boost/range/algorithm_ext/erase.hpp>    21 template<
typename Value>
    35         x_( {min.
X(), max.
X()}),
    36         y_( {min.Y(), 
max.Y()})
    40         x_( {min.
X(), min.
X() + width}),
    41         y_( {min.Y(), min.Y() + height})
    44     Rectangle(Value x_min, Value x_max, Value y_min, Value y_max) :
    49     void SetX(Value 
const& min, Value 
const& 
max) {
    53     void SetY(Value 
const& min, Value 
const& 
max) {
    65     void SetX(std::pair<Value, Value> 
const& 
x) {
    69     void SetY(std::pair<Value, Value> 
const& 
y) {
   143         return {x_.
Min(), y_.
Min()};
   147         return {x_.
Max(), y_.
Max()};
   174     template <
typename Value2>
   175     void WidenY(
Range<Value> const& bound_x, std::vector<Value2> 
const& xs1, std::vector<Value2> 
const& ys1) {
   179       boost::remove_erase(xs, 0);
   181       boost::remove_erase(ys, 0);
   183         if (boost::range::is_sorted(xs, Smaller<Value2>())) {
   185             bound.
SetMin(boost::range::lower_bound(xs, Value2(bound_x.
Min())) - xs.begin());
   186             bound.SetMax(boost::range::upper_bound(xs, Value2(bound_x.
Max())) - xs.begin());
   187         } 
else if (boost::range::is_sorted(xs, Larger<Value2>())) {
   189             bound.SetMin(boost::range::lower_bound(xs, Value2(bound_x.
Max()), Larger<Value2>()) - xs.begin());
   190             bound.SetMax(boost::range::upper_bound(xs, Value2(bound_x.
Min()), Larger<Value2>()) - xs.begin());
   194             bound.SetMax(xs.size());
   198         auto min = std::min_element(ys.begin() + bound.Min(), ys.begin() + bound.Max());
   201         bound_y.SetMax(*std::max_element(ys.begin() + bound.Min(), ys.begin() + bound.Max()));
   206     template <
typename Value2>
   208         auto min_y = boost::range::upper_bound(ys, Value2(y.
Min())) - ys.begin();
   209         auto max_y = boost::range::lower_bound(ys, Value2(y.
Max())) - ys.begin();
   210         auto min = std::min_element(xs.begin() + min_y, xs.begin() + max_y, SmallerButNonZero<Value2>());
   211         auto max = std::max_element(xs.begin() + min_y, xs.begin() + max_y);
   220         stream << rectangle.x_ << rectangle.y_;
   226     template <
typename Value_2_>
   227     std::function<bool(Value_2_ value_1, Value_2_ value_2)> Smaller() {
   228         return [](Value_2_ value_1, Value_2_ value_2) {
   229             return value_1 < value_2;
   233     template <
typename Value_2_>
   234     std::function<bool(Value_2_ value_1, Value_2_ value_2)> SmallerButNonZero() {
   235         return [](Value_2_ value_1, Value_2_ value_2) {
   236             return value_1 != 0 ? value_1 < value_2 : value_1 > value_2;
   240     template <
typename Value_2_>
   241     std::function<bool(Value_2_ value_1, Value_2_ value_2)> Larger() {
   242         return [](Value_2_ value_1, Value_2_ value_2) {
   243             return value_1 > value_2;
 
Rectangle(Range< Value > x, Range< Value > y)
Definition: Rectangle.hh:29
 
Value_ Min() const 
Definition: Range.hh:91
 
Range< Value > & Vertical()
Definition: Rectangle.hh:154
 
void SetXMin(Value x_min)
Definition: Rectangle.hh:81
 
void SetYMax(Value y_max)
Definition: Rectangle.hh:93
 
void WidenY(Range< Value > const &y)
Definition: Rectangle.hh:114
 
Range< Value > const & Horizontal() const 
Definition: Rectangle.hh:158
 
friend auto & operator<<(std::ostream &stream, Rectangle const &rectangle)
Output stream operator. 
Definition: Rectangle.hh:218
 
Value Height() const 
Definition: Rectangle.hh:170
 
Rectangle of two Ranges. 
Definition: Rectangle.hh:22
 
void WidenY(Range< Value > const &bound_x, std::vector< Value2 > const &xs1, std::vector< Value2 > const &ys1)
Definition: Rectangle.hh:175
 
void WidenXMin(Value x_min)
Definition: Rectangle.hh:106
 
Value_ Max() const 
Definition: Range.hh:95
 
Value YMax() const 
Definition: Rectangle.hh:138
 
void WidenYMax(Value y_max)
Definition: Rectangle.hh:122
 
Rectangle(Value x_min, Value x_max, Value y_min, Value y_max)
Definition: Rectangle.hh:44
 
void SetY(std::pair< Value, Value > const &y)
Definition: Rectangle.hh:69
 
void Widen(Rectangle< Value > const &range)
Definition: Rectangle.hh:97
 
Rectangle()
Definition: Rectangle.hh:27
 
Range< Value > & Horizontal()
Definition: Rectangle.hh:150
 
void SetY(Range< Value > const &y)
Definition: Rectangle.hh:61
 
void SetYMin(Value y_min)
Definition: Rectangle.hh:89
 
Range< Value > const & Vertical() const 
Definition: Rectangle.hh:162
 
void WidenYMin(Value y_min)
Definition: Rectangle.hh:118
 
Value_ Length() const 
Definition: Range.hh:122
 
Value Width() const 
Definition: Rectangle.hh:166
 
void ResetY()
Definition: Rectangle.hh:73
 
void Widen(Range< Value_ > const &bound)
Definition: Range.hh:70
 
Boosted Collider Analysis. 
Definition: Analysis.hh:15
 
void WidenXMax(Value x_max)
Definition: Rectangle.hh:110
 
void SetY(Value const &min, Value const &max)
Definition: Rectangle.hh:53
 
void WidenX(Range< Value > const &y, std::vector< Value2 > const &xs, std::vector< Value2 > const &ys)
Definition: Rectangle.hh:207
 
void SetMin(Value_ min)
Definition: Range.hh:48
 
void SetX(Value const &min, Value const &max)
Definition: Rectangle.hh:49
 
void SetXMax(Value x_max)
Definition: Rectangle.hh:85
 
constexpr Value_ const & X() const 
Getter for X. 
Definition: Vector2.hh:150
 
Vector2< Value > Min() const 
Definition: Rectangle.hh:142
 
Rectangle(Vector2< Value > min, Value width, Value height)
Definition: Rectangle.hh:39
 
Value max(Value const &value_1, Value const &value_2)
Maximal value. 
Definition: Units.hh:260
 
void SetX(std::pair< Value, Value > const &x)
Definition: Rectangle.hh:65
 
Value XMin() const 
Definition: Rectangle.hh:126
 
void WidenX(Range< Value > const &x)
Definition: Rectangle.hh:102
 
Vector2< Value > Max() const 
Definition: Rectangle.hh:146
 
void ResetX()
Definition: Rectangle.hh:77
 
Two dimensional Vector. 
Definition: PseudoJet.hh:23
 
Rectangle(Vector2< Value > min, Vector2< Value > max)
Definition: Rectangle.hh:34
 
void SetMax(Value_ max)
Definition: Range.hh:53
 
void WidenMin(Value_ min)
Definition: Range.hh:80
 
Value YMin() const 
Definition: Rectangle.hh:134
 
void WidenMax(Value_ max)
Definition: Range.hh:86
 
void SetX(Range< Value > const &x)
Definition: Rectangle.hh:57
 
void Set(Value_ min, Value_ max)
Definition: Range.hh:58
 
Value XMax() const 
Definition: Rectangle.hh:130