From 5598b787c78c560e8c50909e6e852c07a5190547 Mon Sep 17 00:00:00 2001 From: Thomas Goyne Date: Sun, 27 Jun 2010 03:24:03 +0000 Subject: [PATCH] Fix gcc build errors Originally committed to SVN as r4610. --- aegisub/src/base_grid.cpp | 31 ++++++++++++++++-------------- aegisub/src/selection_controller.h | 10 +++++++--- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/aegisub/src/base_grid.cpp b/aegisub/src/base_grid.cpp index c2ced4751..be6fcc206 100644 --- a/aegisub/src/base_grid.cpp +++ b/aegisub/src/base_grid.cpp @@ -41,6 +41,7 @@ #ifndef AGI_PRE #include +#include #include #endif @@ -1273,31 +1274,33 @@ void BaseGrid::AnnounceActiveLineChanged(AssDialogue *new_line) { if (batch_level > 0) batch_active_line_changed = true; else - BaseSelectionController::AnnounceActiveLineChanged(new_line); + BaseSelectionController::AnnounceActiveLineChanged(new_line); } void BaseGrid::AnnounceSelectedSetChanged(const Selection &lines_added, const Selection &lines_removed) { if (batch_level > 0) { // Remove all previously added lines that are now removed - for (Selection::iterator it = batch_selection_added.begin(); it != batch_selection_added.end();) { - if (lines_removed.find(*it) != lines_removed.end()) - it = batch_selection_added.erase(it); - else - ++it; - } + Selection temp; + std::set_difference( + batch_selection_added.begin(), batch_selection_added.end(), + lines_removed.begin(), lines_removed.end(), + std::inserter(temp, temp.begin())); + std::swap(temp, batch_selection_added); + temp.clear(); + // Remove all previously removed lines that are now added - for (Selection::iterator it = batch_selection_removed.begin(); it != batch_selection_removed.end();) { - if (lines_added.find(*it) != lines_added.end()) - it = batch_selection_removed.erase(it); - else - ++it; - } + std::set_difference( + batch_selection_removed.begin(), batch_selection_removed.end(), + lines_added.begin(), lines_added.end(), + std::inserter(temp, temp.begin())); + std::swap(temp, batch_selection_removed); + // Add new stuff to batch sets batch_selection_added.insert(lines_added.begin(), lines_added.end()); batch_selection_removed.insert(lines_removed.begin(), lines_removed.end()); } else { - BaseSelectionController::AnnounceSelectedSetChanged(lines_added, lines_removed); + BaseSelectionController::AnnounceSelectedSetChanged(lines_added, lines_removed); } } diff --git a/aegisub/src/selection_controller.h b/aegisub/src/selection_controller.h index c2c0e9eca..a3f36f835 100644 --- a/aegisub/src/selection_controller.h +++ b/aegisub/src/selection_controller.h @@ -165,14 +165,17 @@ public: /// be desirable in some special cases such as test drivers. template class BaseSelectionController : public SelectionController { +public: + typedef typename SelectionController::Selection Selection; +private: typedef std::set *> SelectionListenerSet; - std::set *> listeners; + SelectionListenerSet listeners; protected: /// Call OnActiveLineChanged on all listeners void AnnounceActiveLineChanged(ItemDataType *new_line) { - for (SelectionListenerSet::iterator listener = listeners.begin(); listener != listeners.end(); ++listener) + for (typename SelectionListenerSet::iterator listener = listeners.begin(); listener != listeners.end(); ++listener) { (*listener)->OnActiveLineChanged(new_line); } @@ -181,7 +184,7 @@ protected: /// Call OnSelectedSetChangedon all listeners void AnnounceSelectedSetChanged(const Selection &lines_added, const Selection &lines_removed) { - for (SelectionListenerSet::iterator listener = listeners.begin(); listener != listeners.end(); ++listener) + for (typename SelectionListenerSet::iterator listener = listeners.begin(); listener != listeners.end(); ++listener) { (*listener)->OnSelectedSetChanged(lines_added, lines_removed); } @@ -207,6 +210,7 @@ public: template class DummySelectionController : public SelectionController { public: + typedef typename SelectionController::Selection Selection; virtual ~DummySelectionController() { } virtual void SetActiveLine(ItemDataType *new_line) { } virtual ItemDataType * GetActiveLine() const { return 0; }