/
Edge.hh
109 lines (83 loc) · 2.06 KB
/
Edge.hh
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
#ifndef EDGE_HH
#define EDGE_HH 1
/******************************************************************
** Edge.hh
**
** Class for representing and storing an edge of the de Bruijn graph
**
** Authors: Giuseppe Narzisi & Michael C. Schatz
** Date: December 11, 2013
**
*******************************************************************/
#include <iostream>
#include <fstream>
#include <string>
#include <set>
#include "Mer.hh"
#include "ReadInfo.hh"
using namespace std;
enum Edgedir_t { FF, FR, RF, RR };
class Edge_t
{
public:
Mer_t nodeid_m;
Edgedir_t dir_m;
vector<ReadId_t> readids_m;
Edge_t(Mer_t nodeid, Edgedir_t dir)
: nodeid_m(nodeid), dir_m(dir)
{ }
~Edge_t() { };
Ori_t startdir() { return edgedir_start(dir_m); }
Ori_t destdir() { return edgedir_dest(dir_m); }
string label() { return toString(dir_m) + ":" + nodeid_m; }
bool isDir(Ori_t dir);
int readOverlaps(const Edge_t & other);
ostream & print(ostream & out) const;
friend ostream& operator<<(std::ostream& o, const Edge_t & e) { return e.print(o); }
// static functions:
static char toString(Ori_t dir)
{
if (dir == F) { return 'F'; }
return 'R';
}
static Ori_t edgedir_start(Edgedir_t dir)
{
if (dir == FF || dir == FR) { return F; }
return R;
}
static Ori_t edgedir_dest(Edgedir_t dir)
{
if (dir == FF || dir == RF) { return F; }
return R;
}
static Ori_t flipdir(Ori_t dir)
{
if (dir == R) { return F; }
return R;
}
static Edgedir_t flipme(Edgedir_t dir)
{
if (dir == FF) { return RF; }
else if (dir == FR) { return RR; }
else if (dir == RF) { return FF; }
else if (dir == RR) { return FR; }
return FF;
}
static Edgedir_t fliplink(Edgedir_t dir)
{
if (dir == FF) { return RR; }
else if (dir == FR) { return FR; }
else if (dir == RF) { return RF; }
else if (dir == RR) { return FF; }
return FF;
}
static string toString(Edgedir_t dir)
{
if (dir == FF) { return "FF"; }
else if (dir == FR) { return "FR"; }
else if (dir == RF) { return "RF"; }
else if (dir == RR) { return "RR"; }
return "??";
}
};
#endif