MDA
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups
SplitSet.hpp
1 /*
2  * SplitSet.hpp
3  *
4  * Created on: Sep 18, 2013
5  * Author: ckeme_01
6  */
7 
8 #ifndef SPLITSET_HPP_
9 #define SPLITSET_HPP_
10 
11 // C++ header
12 #include <vector>
13 #include <memory>
14 #include <string>
15 
16 // MDAT header
17 
18 
19 namespace MDAT
20 {
21 
22 template<typename DataType>
23 class SplitSet
24 {
25 private:
26  std::vector<std::shared_ptr<DataType> > _set;
27  int _id;
28  std::vector<int> _pattern;
29 
30 public:
31 
32  typedef DataType value_type;
33 
34  SplitSet();
35  SplitSet(const std::vector<int> &pattern);
36 
37 
38  ~SplitSet();
39 
40 
42 
43 
49  DataType &operator[](unsigned int index)
50  {
51  return *_set[index];
52  }
53 
57  const DataType &operator[](unsigned int index) const
58  {
59  return *_set[index];
60  }
65  void push_back(DataType* set)
66  {
67  _set.push_back(std::shared_ptr<DataType>(set));
68  }
69 
70  size_t
71  size() const
72  {
73  return _set.size();
74  }
75 
76  int
77  id() const
78  {
79  return _id;
80  }
81 
82  void
83  id(int val)
84  {
85  _id=val;
86  }
87 
88  std::vector<int>
89  pattern() const
90  {
91  return _pattern;
92  }
93 
94  void
95  pattern(const std::vector<int> &new_pattern)
96  {
97  _pattern=new_pattern;
98  }
99 
100 
101  template<typename SplitSetType>
102  friend std::ostream& operator<< (std::ostream &out, const SplitSet<SplitSetType> &seqSet);
103 
104 
105 
106 };
107 
108 template<typename SplitSetType>
109 std::ostream& operator<< (std::ostream &out, const SplitSet<SplitSetType> &seqSet)
110 {
111  size_t n_sets=seqSet.size();
112  size_t n_seqs = seqSet[0].size();
113  for (size_t j=0; j<n_seqs; ++j)
114  {
115  for (size_t i=0; i<n_sets; ++i)
116  {
117  out << " " << seqSet[i][j].sequence();
118  }
119  out << std::endl;
120  }
121  return out;
122 }
123 
124 
125 template<typename DataType>
126 SplitSet<DataType>::SplitSet():_set(), _id(-1), _pattern()
127 {
128 
129 }
130 
131 
132 template<typename DataType>
133 SplitSet<DataType>::SplitSet(const std::vector<int> &pattern):_set(), _id(-1), _pattern(pattern)
134 {
135  size_t n_pieces=_pattern.size()*2+1;
136  _set.reserve(n_pieces);
137  for (size_t i=0; i<n_pieces; ++i)
138  _set.push_back(std::shared_ptr<DataType>(new DataType()));
139 }
140 
141 template<typename DataType>
142 SplitSet<DataType>::~SplitSet()
143 {
144 
145 }
146 
147 
148 
149 }
150 #endif /* SPLITSET_HPP_ */