Update mussa to build on ubuntu 10.04 with qt 4.6.2 +boost 1.40.0.1
[mussa.git] / alg / motif_parser.hpp
1 #ifndef MOTIF_PARSER_HPP_
2 #define MOTIF_PARSER_HPP_
3
4 #include <string>
5 #include <vector>
6
7 #include <boost/shared_ptr.hpp>
8
9 #include "alg/mussa.hpp"
10 #include "alg/annotation_colors.hpp"
11
12 namespace motif_parser {
13   // Helper functor to append created motifs to our Mussa analysis
14   class ParsedMotifs {
15   public:
16     ParsedMotifs(Mussa::motif_set& motifs_, 
17                  boost::shared_ptr<AnnotationColors> color_mapper_);
18                  
19     void parse(const std::string &data);             
20   private:
21     friend struct push_name;
22     friend struct push_sequence;
23     friend struct push_channel;
24     friend struct push_motif;
25     
26     std::string sequence;
27     std::string name;
28     std::vector<float> channels;
29
30     Mussa::motif_set& motifs;
31     boost::shared_ptr<AnnotationColors> color_mapper;
32   };
33   
34   struct push_name {
35     push_name(ParsedMotifs *p);
36     template<typename Iterator>
37     void operator()(Iterator, Iterator) const;
38   private:
39     ParsedMotifs *parsed;
40   };
41   struct push_sequence {
42     push_sequence(ParsedMotifs *p);
43     template<typename Iterator>
44     void operator()(Iterator, Iterator) const;
45   private:
46     ParsedMotifs *parsed;
47   };
48   struct push_channel {
49     push_channel(ParsedMotifs *p);
50     void operator()(float) const;
51   private:
52     ParsedMotifs *parsed;
53   };
54   struct push_motif {
55     push_motif(ParsedMotifs *p);
56     template<typename Iterator>
57     void operator()(Iterator, Iterator) const;
58   private:
59     ParsedMotifs *parsed;
60   };
61 };
62
63 #endif /*MOTIF_PARSER_HPP_*/