1 #include "alg/conserved_path.h"
8 ConservedPath::ConservedPath()
14 ConservedPath::ConservedPath(const ConservedPath::ConservedPath& other)
16 track_indexes(other.track_indexes)
20 ConservedPath::ConservedPath(double s, ConservedPath::path_type path)
26 void ConservedPath::clear()
29 track_indexes.clear();
32 ConservedPath::path_element&
33 ConservedPath::operator[](ConservedPath::size_type index)
35 return track_indexes[index];
38 bool operator==(const ConservedPath::ConservedPath& a,
39 const ConservedPath::ConservedPath& b)
41 // this isn't good as score is now a double
42 return ( (a.score == b.score)
43 and (a.track_indexes.size() == b.track_indexes.size())
44 and (a.track_indexes == b.track_indexes));
47 bool operator!=(const ConservedPath::ConservedPath& a,
48 const ConservedPath::ConservedPath& b)
53 std::ostream& operator<<(std::ostream& out, const ConservedPath& path)
55 out << "<path score=" << path.score
56 << " len=" << path.track_indexes.size();
57 if (path.track_indexes.size() > 0)
59 // print the first element
60 ConservedPath::const_iterator itor = path.begin();
62 // print the remaining elements
73 // if we had no elements just close the block
78 void ConservedPath::push_back(const ConservedPath::path_element& element)
80 track_indexes.push_back(element);
83 void ConservedPath::pop_back()
85 track_indexes.pop_back();
88 ConservedPath::size_type ConservedPath::size() const
90 return track_indexes.size();
93 ConservedPath::iterator ConservedPath::begin()
95 return track_indexes.begin();
98 ConservedPath::const_iterator ConservedPath::begin() const
100 return track_indexes.begin();
103 ConservedPath::iterator ConservedPath::end()
105 return track_indexes.end();
108 ConservedPath::const_iterator ConservedPath::end() const
110 return track_indexes.end();
113 bool ConservedPath::nextTo(const ConservedPath& next) const
115 if (size() != next.size() ) {
116 throw runtime_error("paths must be the same length");
118 ConservedPath::const_iterator this_itor = begin();
119 ConservedPath::const_iterator next_itor = next.begin();
120 for (; this_itor != end(); ++this_itor, ++next_itor)
122 if ( (*this_itor + 1) != *next_itor )
128 /////////////////////
129 ExtendedConservedPath::ExtendedConservedPath()
135 ExtendedConservedPath::ExtendedConservedPath(const ExtendedConservedPath& other)
136 : ConservedPath(other),
137 window_size(other.window_size)
141 ExtendedConservedPath::ExtendedConservedPath(int win_size, ConservedPath other)
142 : ConservedPath(other),
143 window_size(win_size)
147 ExtendedConservedPath::ExtendedConservedPath(int win_size,
149 ConservedPath::path_type p)
150 : ConservedPath(s, p),
151 window_size(win_size)
155 ExtendedConservedPath& ExtendedConservedPath::extend(int growth)
157 window_size += growth;
159 // What does this actually do? Tristan's code was doing this operation
160 // but I don't understand how it properly adjusts reverse compliment
162 for(ConservedPath::iterator path_i = begin();