class GeneOrder;
+struct Component{
+ Component(int b,int e,int s):begin(b),end(e),sign(s){}
+ bool operator==(const Component& c){
+ return begin == c.begin && end == c.end && sign == c.sign;
+ }
+ int begin;
+ int end;
+ int sign;
+};
+
+struct Interval{
+ Interval(size_t f,size_t s,bool o = false):first(f),second(s),oriented(o){}
+ bool operator==(const Interval& i){
+ return first == i.first && second == i.second && oriented == i.oriented;
+ }
+ size_t first;
+ size_t second;
+ bool oriented;
+};
+
/**
* Returns the length of the longest increasing sequence and the longest
* decreasing sequence.
*/
std::vector<std::vector<int> > robinsonSchensted(const GeneOrder& go);
+/**
+ * Counts the number of cycles in the gene order.
+ */
+size_t countCycles(const GeneOrder& go);
+
+/**
+ * Calculates the inversion distance for this gene order
+ */
+size_t inversionDistance(const GeneOrder& go);
+
+/**
+ * Finds the components in the gene order.
+ */
+std::vector<Component> findComponents(const GeneOrder& go);
+
+/**
+ * Find intervals.
+ */
+std::vector<Interval> findIntervals(const GeneOrder& go);
+
+/**
+ * Creates a list with the intervals at each point.
+ */
+std::vector<Interval> findIntervalsAtPoints(const std::vector<Interval>& intervals);
+
#endif