/usr/include/tulip/TreeTest.h is in libtulip-dev 3.1.2-2.3ubuntu3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 | //-*-c++-*-
/**
Authors: David Auber, Patrick Mary, Morgan Mathiaut
from the LaBRI Visualization Team
Email : auber@tulip-software.org
Last modification : 13/03/2009
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
*/
#ifndef TULIP_TREETEST_H
#define TULIP_TREETEST_H
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#if (__GNUC__ < 3)
#include <hash_set>
#else
#include <ext/hash_set>
#endif
#include "tulip/ObservableGraph.h"
#include "tulip/MutableContainer.h"
#include "tulip/PluginProgress.h"
namespace tlp {
class Graph;
/** \addtogroup graph_test */
/*@{*/
/// Class for testing if the graph is a tree
class TLP_SCOPE TreeTest : private GraphObserver {
public:
// check if the graph is a rooted tree
static bool isTree(Graph *graph);
// check if the graph is a free tree
static bool isFreeTree(Graph *graph);
// turns a free tree into a rooted tree
static void makeRootedTree(Graph *freeTree, node root);
// synonymous of the makeRootedTree
static void makeDirectedTree(Graph *freeTree, node root) {
makeRootedTree(freeTree, root);
};
/**
* Compute a rooted tree from the graph.
* The algorithm is the following
* - if the graph is a rooted tree, return the graph
* - if the graph is a free tree, return a rooted copy
* - if the graph is connected, make a copy
* return a rooted spanning tree of that copy
* - if the graph is not connected, make a copy,
* compute a tree for each of its connected components,
* add a simple source and return the copy.
*/
static Graph *computeTree(Graph* graph, Graph* rootGraph = 0, bool isConnected=false,
PluginProgress *pluginProgress = 0);
/**
* Clean the graph from a tree previously computed
* with the computeRootedTree function
*/
static void cleanComputedTree(Graph *graph, Graph *tree);
private:
bool compute(Graph *);
void addEdge(Graph *,const edge);
void delEdge(Graph *,const edge);
void reverseEdge(Graph *,const edge);
void addNode(Graph *,const node);
void delNode(Graph *,const node);
void destroy(Graph *);
TreeTest();
static TreeTest * instance;
bool isFreeTree (Graph *graph, node curRoot, node cameFrom,
MutableContainer<bool> &visited);
void makeRootedTree (Graph *graph, node curRoot, node cameFrom);
stdext::hash_map<unsigned long,bool> resultsBuffer;
};
/*@}*/
}
#endif
|