Commit b3fa4672 authored by e.hakkinen's avatar e.hakkinen Committed by Commit bot

cc: Reduce duplicated tiling data difference iterator code

This adds a new BaseDifferenceIterator as a common base class for all
tiling data difference iterators and moves duplicated code from
different tiling data difference iterators to that common base class.
This reduces code duplication.

Review URL: https://codereview.chromium.org/1017713003

Cr-Commit-Position: refs/heads/master@{#321540}
parent a9ea2fbe
This diff is collapsed.
...@@ -101,19 +101,21 @@ class CC_EXPORT TilingData { ...@@ -101,19 +101,21 @@ class CC_EXPORT TilingData {
int bottom_; int bottom_;
}; };
// Iterate through all indices whose bounds (not including borders) intersect class CC_EXPORT BaseDifferenceIterator : public BaseIterator {
// with |consider| but which also do not intersect with |ignore|. protected:
class CC_EXPORT DifferenceIterator : public BaseIterator { BaseDifferenceIterator();
public: BaseDifferenceIterator(const TilingData* tiling_data,
DifferenceIterator(const TilingData* tiling_data, const gfx::Rect& consider_rect,
const gfx::Rect& consider_rect, const gfx::Rect& ignore_rect);
const gfx::Rect& ignore_rect);
DifferenceIterator& operator++();
private: bool HasConsiderRect() const;
bool in_consider_rect() const {
return index_x_ >= consider_left_ && index_x_ <= consider_right_ &&
index_y_ >= consider_top_ && index_y_ <= consider_bottom_;
}
bool in_ignore_rect() const { bool in_ignore_rect() const {
return index_x_ >= ignore_left_ && index_x_ <= ignore_right_ && return index_x_ >= ignore_left_ && index_x_ <= ignore_right_ &&
index_y_ >= ignore_top_ && index_y_ <= ignore_bottom_; index_y_ >= ignore_top_ && index_y_ <= ignore_bottom_;
} }
int consider_left_; int consider_left_;
...@@ -126,10 +128,20 @@ class CC_EXPORT TilingData { ...@@ -126,10 +128,20 @@ class CC_EXPORT TilingData {
int ignore_bottom_; int ignore_bottom_;
}; };
// Iterate through all indices whose bounds (not including borders) intersect
// with |consider| but which also do not intersect with |ignore|.
class CC_EXPORT DifferenceIterator : public BaseDifferenceIterator {
public:
DifferenceIterator(const TilingData* tiling_data,
const gfx::Rect& consider_rect,
const gfx::Rect& ignore_rect);
DifferenceIterator& operator++();
};
// Iterate through all indices whose bounds + border intersect with // Iterate through all indices whose bounds + border intersect with
// |consider| but which also do not intersect with |ignore|. The iterator // |consider| but which also do not intersect with |ignore|. The iterator
// order is a counterclockwise spiral around the given center. // order is a counterclockwise spiral around the given center.
class CC_EXPORT SpiralDifferenceIterator : public BaseIterator { class CC_EXPORT SpiralDifferenceIterator : public BaseDifferenceIterator {
public: public:
SpiralDifferenceIterator(); SpiralDifferenceIterator();
SpiralDifferenceIterator(const TilingData* tiling_data, SpiralDifferenceIterator(const TilingData* tiling_data,
...@@ -139,14 +151,6 @@ class CC_EXPORT TilingData { ...@@ -139,14 +151,6 @@ class CC_EXPORT TilingData {
SpiralDifferenceIterator& operator++(); SpiralDifferenceIterator& operator++();
private: private:
bool in_consider_rect() const {
return index_x_ >= consider_left_ && index_x_ <= consider_right_ &&
index_y_ >= consider_top_ && index_y_ <= consider_bottom_;
}
bool in_ignore_rect() const {
return index_x_ >= ignore_left_ && index_x_ <= ignore_right_ &&
index_y_ >= ignore_top_ && index_y_ <= ignore_bottom_;
}
bool valid_column() const { bool valid_column() const {
return index_x_ >= consider_left_ && index_x_ <= consider_right_; return index_x_ >= consider_left_ && index_x_ <= consider_right_;
} }
...@@ -162,15 +166,6 @@ class CC_EXPORT TilingData { ...@@ -162,15 +166,6 @@ class CC_EXPORT TilingData {
bool needs_direction_switch() const; bool needs_direction_switch() const;
void switch_direction(); void switch_direction();
int consider_left_;
int consider_top_;
int consider_right_;
int consider_bottom_;
int ignore_left_;
int ignore_top_;
int ignore_right_;
int ignore_bottom_;
enum Direction { UP, LEFT, DOWN, RIGHT }; enum Direction { UP, LEFT, DOWN, RIGHT };
Direction direction_; Direction direction_;
...@@ -181,7 +176,8 @@ class CC_EXPORT TilingData { ...@@ -181,7 +176,8 @@ class CC_EXPORT TilingData {
int vertical_step_count_; int vertical_step_count_;
}; };
class CC_EXPORT ReverseSpiralDifferenceIterator : public BaseIterator { class CC_EXPORT ReverseSpiralDifferenceIterator
: public BaseDifferenceIterator {
public: public:
ReverseSpiralDifferenceIterator(); ReverseSpiralDifferenceIterator();
ReverseSpiralDifferenceIterator(const TilingData* tiling_data, ReverseSpiralDifferenceIterator(const TilingData* tiling_data,
...@@ -191,18 +187,10 @@ class CC_EXPORT TilingData { ...@@ -191,18 +187,10 @@ class CC_EXPORT TilingData {
ReverseSpiralDifferenceIterator& operator++(); ReverseSpiralDifferenceIterator& operator++();
private: private:
bool in_consider_rect() const {
return index_x_ >= consider_left_ && index_x_ <= consider_right_ &&
index_y_ >= consider_top_ && index_y_ <= consider_bottom_;
}
bool in_around_rect() const { bool in_around_rect() const {
return index_x_ >= around_left_ && index_x_ <= around_right_ && return index_x_ >= around_left_ && index_x_ <= around_right_ &&
index_y_ >= around_top_ && index_y_ <= around_bottom_; index_y_ >= around_top_ && index_y_ <= around_bottom_;
} }
bool in_ignore_rect() const {
return index_x_ >= ignore_left_ && index_x_ <= ignore_right_ &&
index_y_ >= ignore_top_ && index_y_ <= ignore_bottom_;
}
bool valid_column() const { bool valid_column() const {
return index_x_ >= consider_left_ && index_x_ <= consider_right_; return index_x_ >= consider_left_ && index_x_ <= consider_right_;
} }
...@@ -218,18 +206,10 @@ class CC_EXPORT TilingData { ...@@ -218,18 +206,10 @@ class CC_EXPORT TilingData {
bool needs_direction_switch() const; bool needs_direction_switch() const;
void switch_direction(); void switch_direction();
int consider_left_;
int consider_top_;
int consider_right_;
int consider_bottom_;
int around_left_; int around_left_;
int around_top_; int around_top_;
int around_right_; int around_right_;
int around_bottom_; int around_bottom_;
int ignore_left_;
int ignore_top_;
int ignore_right_;
int ignore_bottom_;
enum Direction { LEFT, UP, RIGHT, DOWN }; enum Direction { LEFT, UP, RIGHT, DOWN };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment