steghide
0.5.1
Main Page
Classes
Files
File List
File Members
src
Matching.h
Go to the documentation of this file.
1
/*
2
* steghide 0.5.1 - a steganography program
3
* Copyright (C) 1999-2003 Stefan Hetzl <shetzl@chello.at>
4
*
5
* This program is free software; you can redistribute it and/or
6
* modify it under the terms of the GNU General Public License
7
* as published by the Free Software Foundation; either version 2
8
* of the License, or (at your option) any later version.
9
*
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
14
*
15
* You should have received a copy of the GNU General Public License
16
* along with this program; if not, write to the Free Software
17
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
*
19
*/
20
21
#ifndef SH_MATCHING_H
22
#define SH_MATCHING_H
23
24
#include <list>
25
#include <vector>
26
27
#include "
Vertex.h
"
28
#include "
common.h
"
29
30
class
Edge
;
31
class
ProgressOutput
;
32
41
class
Matching
{
42
public
:
48
Matching
(
Graph
* g,
ProgressOutput
* po = NULL) ;
49
50
~Matching
(
void
) ;
51
55
bool
isMatched
(
Vertex
*v)
const
56
{
return
VertexInformation
[v->
getLabel
()].isMatched() ; } ;
57
61
bool
isMatched
(
VertexLabel
vlbl)
const
62
{
return
VertexInformation
[vlbl].isMatched() ; } ;
63
67
bool
isExposed
(
Vertex
*v)
const
68
{
return
VertexInformation
[v->
getLabel
()].isExposed() ; } ;
69
73
bool
isExposed
(
VertexLabel
vlbl)
const
74
{
return
VertexInformation
[vlbl].isExposed() ; } ;
75
80
const
Edge
*
getMatchingEdge
(
Vertex
*v)
const
81
{
return
VertexInformation
[v->
getLabel
()].getMatchingEdge() ; } ;
82
87
bool
includesEdge
(
const
Edge
* e)
const
{
return
includesEdge
(*e) ; } ;
88
bool
includesEdge
(
const
Edge
& e)
const
;
89
93
unsigned
long
getCardinality
(
void
)
const
94
{
return
Cardinality
; } ;
95
96
const
std::list<Vertex*>&
getExposedVertices
(
void
)
const
97
{
return
ExposedVertices
; } ;
98
103
float
getMatchedRate
(
void
)
const
;
104
108
float
getAvgEdgeWeight
(
void
)
const
;
109
118
const
std::list<Vertex*> *
getExposedVerticesLink
(
void
)
const
119
{
return
&
ExposedVertices
; } ;
120
128
void
addEdge
(
const
Edge
& e) ;
129
void
addEdge
(
Edge
* e) {
addEdge
(*e) ; } ;
130
137
void
removeEdge
(
const
Edge
& e) ;
138
142
const
std::list<Edge*>&
getEdges
(
void
)
const
143
{
return
MatchingEdges
; } ;
144
154
Matching
&
augment
(
const
Edge
** path,
unsigned
long
len) ;
155
156
Matching
&
augment
(
const
std::vector<Edge*>& path) ;
157
158
void
printVerboseInfo
(
void
)
const
;
159
160
private
:
165
class
VertexInfo
{
166
public
:
167
VertexInfo
(std::list<Edge*>::iterator mit)
168
{
setMatched
(mit) ; } ;
169
170
VertexInfo
(std::list<Vertex*>::iterator eit)
171
{
setExposed
(eit) ; } ;
172
173
bool
isExposed
(
void
)
const
174
{
return
!
Matched
; } ;
175
176
bool
isMatched
(
void
)
const
177
{
return
Matched
; } ;
178
179
Edge
*
getMatchingEdge
(
void
)
const
180
{
return
*
MatchedIterator
; } ;
181
182
std::list<Edge*>::iterator
getMatchedIterator
(
void
)
const
183
{
return
MatchedIterator
; } ;
184
185
std::list<Vertex*>::iterator
getExposedIterator
(
void
)
const
186
{
return
ExposedIterator
; } ;
187
188
void
setMatched
(std::list<Edge*>::iterator mit)
189
{
Matched
= true ;
MatchedIterator
= mit ; } ;
190
191
void
setExposed
(std::list<Vertex*>::iterator eit)
192
{
Matched
= false ;
ExposedIterator
= eit ; } ;
193
194
private
:
195
bool
Matched
;
197
std::list<Edge*>::iterator
MatchedIterator
;
199
std::list<Vertex*>::iterator
ExposedIterator
;
200
} ;
201
203
std::vector<VertexInfo>
VertexInformation
;
204
206
std::list<Vertex*>
ExposedVertices
;
207
209
std::list<Edge*>
MatchingEdges
;
210
212
unsigned
long
Cardinality
;
213
215
Graph
*
TheGraph
;
216
218
ProgressOutput
*
PrOut
;
219
223
void
setCardinality
(
unsigned
long
c) ;
224
225
public
:
226
bool
check
(
void
)
const
;
227
bool
check_MatchingEdges_vs_VertexInformation
(
void
)
const
;
228
bool
check_ExposedVertices_vs_VertexInformation
(
void
)
const
;
229
bool
check_VertexInformation_Integrity
(
void
)
const
;
230
231
bool
check_ValidAugPath
(
const
std::vector<Edge*>& path)
const
;
232
} ;
233
234
#endif // ndef SH_MATCHING_H
Generated on Mon Jan 14 2013 04:45:06 for steghide by
1.8.3