]> git.lyx.org Git - lyx.git/blobdiff - src/Graph.cpp
Amend febd1855eb: fix compilability of tex2lyx
[lyx.git] / src / Graph.cpp
index 09db31e5f24e4d62c784e515076bf1c13ab0a632..0165bdacc9a4c95d626f21996f83f010c1a52959 100644 (file)
@@ -4,7 +4,7 @@
  * Licence details can be found in the file COPYING.
  *
  * \author Dekel Tsur (original code)
- * \author Richard Heck (re-implementation)
+ * \author Richard Kimberly Heck (re-implementation)
  *
  * Full author contact details are available in file CREDITS.
  */
@@ -17,8 +17,6 @@
 #include "support/debug.h"
 #include "support/lassert.h"
 
-#include <algorithm>
-
 using namespace std;
 
 namespace lyx {
@@ -28,7 +26,7 @@ bool Graph::bfs_init(int s, bool clear_visited, queue<int> & Q)
 {
        if (s < 0)
                return false;
-       
+
        if (!Q.empty())
                Q = queue<int>();
 
@@ -46,12 +44,12 @@ bool Graph::bfs_init(int s, bool clear_visited, queue<int> & Q)
 }
 
 
-vector<int> const
-       Graph::getReachableTo(int target, bool clear_visited)
+Graph::EdgePath const
+       Graph::getReachableTo(int to, bool clear_visited)
 {
-       vector<int> result;
+       EdgePath result;
        queue<int> Q;
-       if (!bfs_init(target, clear_visited, Q))
+       if (!bfs_init(to, clear_visited, Q))
                return result;
 
        // Here's the logic, which is shared by the other routines.
@@ -63,7 +61,7 @@ vector<int> const
        while (!Q.empty()) {
                int const current = Q.front();
                Q.pop();
-               if (current != target || formats.get(target).name() != "lyx")
+               if (current != to || theFormats().get(to).name() != "lyx")
                        result.push_back(current);
 
                vector<Arrow *>::iterator it = vertices_[current].in_arrows.begin();
@@ -81,11 +79,11 @@ vector<int> const
 }
 
 
-vector<int> const
+Graph::EdgePath const
        Graph::getReachable(int from, bool only_viewable,
-               bool clear_visited)
+               bool clear_visited, set<int> excludes)
 {
-       vector<int> result;
+       EdgePath result;
        queue<int> Q;
        if (!bfs_init(from, clear_visited, Q))
                return result;
@@ -93,12 +91,12 @@ vector<int> const
        while (!Q.empty()) {
                int const current = Q.front();
                Q.pop();
-               Format const & format = formats.get(current);
+               Format const & format = theFormats().get(current);
                if (!only_viewable || !format.viewer().empty())
                        result.push_back(current);
                else if (format.isChildFormat()) {
                        Format const * const parent =
-                               formats.getFormat(format.parentFormat());
+                               theFormats().getFormat(format.parentFormat());
                        if (parent && !parent->viewer().empty())
                                result.push_back(current);
                }
@@ -111,7 +109,8 @@ vector<int> const
                        int const cv = (*cit)->to;
                        if (!vertices_[cv].visited) {
                                vertices_[cv].visited = true;
-                               Q.push(cv);
+                               if (excludes.find(cv) == excludes.end())
+                                       Q.push(cv);
                        }
                }
        }