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 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
|
/*
* $Revision: 2583 $
*
* last checkin:
* $Author: gutwenger $
* $Date: 2012-07-12 01:02:21 +0200 (Thu, 12 Jul 2012) $
***************************************************************/
/** \file
* \brief Declaration of UpwardPlanarizer Module, an interface for upward planarization algorithms.
*
* \author Hoi-Ming Wong
*
* \par License:
* This file is part of the Open Graph Drawing Framework (OGDF).
*
* \par
* Copyright (C)<br>
* See README.txt in the root directory of the OGDF installation for details.
*
* \par
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* Version 2 or 3 as published by the Free Software Foundation;
* see the file LICENSE.txt included in the packaging of this file
* for details.
*
* \par
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* \par
* You should have received a copy of the GNU General Public
* License along with this program; if not, write to the Free
* Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*
* \see http://www.gnu.org/copyleft/gpl.html
***************************************************************/
#ifndef OGDF_UPWARD_PLANARIZER_MODULE_H
#define OGDF_UPWARD_PLANARIZER_MODULE_H
#include <ogdf/basic/Module.h>
#include <ogdf/upward/UpwardPlanRep.h>
namespace ogdf {
/**
* \brief Interface for upward planarization algorithms.
*
*/
class OGDF_EXPORT UpwardPlanarizerModule : public Module
{
public:
//! Initializes an upward planarizer module.
UpwardPlanarizerModule() { }
// destruction
virtual ~UpwardPlanarizerModule() { }
/**
* \brief Computes a upward planarized representation (UPR) of the input graph \a G.
*
* @param UPR represents the input graph as well as the computed upward planarized
* representation after the call. The original graph of \a UPR muss be the input graph \a G.
* Crossings are replaced by dummy vertices. The UPR is finaly augmented to a st-graph. Since this augmentation,
* crossings dummies may not got an in- and outdegree of 2!
*
* @param forbid points to an edge array indicating which edges are not allowed
* to be crossed, i.e., (*forbid)[e] = true. If forbid = 0, no edges are
* forbidden.
*
* @param cost points to an edge array that gives the cost of each edge. If cost
* = 0, all edges have cost 1.
*
* \return the status of the result.
*
*/
ReturnType call(UpwardPlanRep &UPR,
const EdgeArray<int> * cost = 0,
const EdgeArray<bool> * forbid = 0)
{
m_useCost = (cost != 0);
m_useForbid = (forbid != 0);
if(!useCost()) cost = OGDF_NEW EdgeArray<int> (UPR.original(), 1);
if(!useForbid()) forbid = OGDF_NEW EdgeArray<bool> (UPR.original(), 0);
ReturnType R = doCall(UPR, *cost, *forbid);
if(!useCost()) delete cost;
if(!useForbid()) delete forbid;
return R;
}
//! Computes a upward planarized representation of the input graph (shorthand for call)
ReturnType operator()(UpwardPlanRep &UPR,
const EdgeArray<int> * cost = 0,
const EdgeArray<bool> * forbid = 0) {
return call(UPR, cost, forbid);
}
//! Returns true iff edge costs are given.
bool useCost() const { return m_useCost; }
//! Returns true iff forbidden edges are given.
bool useForbid() const { return m_useForbid; }
protected:
/**
* \brief Computes an upward planarized representation of the input graph.
*
* @param UPR represents the input graph as well as the computed upward planarized
* representation after the call. The original graph of \a UPR muss be the input graph \a G.
* Crossings are replaced by dummy vertices. The UPR is finaly augmented to a st-graph. Since this augmentation,
* crossings dummies may not got an in- and outdegree of 2!
*
* @param cost points to an edge array that gives the cost of each edge. If cost
* = 0, all edges have cost 1.
*
* @param forbid points to an edge array indicating which edges are not allowed
* to be crossed, i.e., (*forbid)[e] = true. If forbid = 0, no edges are
* forbidden.
*
* \return the status of the result.
*/
virtual ReturnType doCall(
UpwardPlanRep &UPR,
const EdgeArray<int> &cost,
const EdgeArray<bool> &forbid) = 0;
OGDF_MALLOC_NEW_DELETE
private:
bool m_useCost; //!< True iff edge costs are given.
bool m_useForbid; //!< True iff forbidden edges are given.
};
} // end namespace ogdf
#endif
|