GUIDOLib  1.7.7
Guido Engine Internal Documentation
GuidoMapCollector.h
1 /*
2 
3  GUIDO Library
4  Copyright (C) 2011 Grame
5 
6 
7  This Source Code Form is subject to the terms of the Mozilla Public
8  License, v. 2.0. If a copy of the MPL was not distributed with this
9  file, You can obtain one at http://mozilla.org/MPL/2.0/.
10 
11  Grame Research Laboratory, 11, cours de Verdun Gensoul 69002 Lyon - France
12  research@grame.fr
13 
14 */
15 
16 
17 #ifndef __GuidoMapCollector__
18 #define __GuidoMapCollector__
19 
20 #include <map>
21 #include <string>
22 #include <ostream>
23 
24 #include "GUIDOScoreMap.h"
25 
26 namespace guido
27 {
28 
29 //----------------------------------------------------------------------
34 {
35  public :
36  struct Filter {
37  virtual ~Filter() {}
38  virtual bool operator() (const GuidoElementInfos& infos) const { return true; }
39  public:
41  };
42 
43  GuidoMapCollector(CGRHandler gr, GuidoElementSelector selector, const Filter* filter=0)
44  : fGRHandler(gr), fSelector(selector), fFilter(filter), fOutMap(0) {}
45  virtual ~GuidoMapCollector() {}
46 
48  virtual void Graph2TimeMap( const FloatRect& box, const TimeSegment& dates, const GuidoElementInfos& infos );
49  virtual void process (int page, float w, float h, Time2GraphicMap* outmap);
50 
51  void add (const TimeSegment& ts, const FloatRect& r) { fOutMap->push_back(make_pair(ts, r)); }
52 
53  protected:
54  void getEvents (int page, float w, float h, bool keepLeftmost, Time2GraphicMap& outmap, int staffNum = 0);
55 
58  const Filter* fFilter;
60 };
61 
62 
63 //----------------------------------------------------------------------
68 {
69  private:
70  struct AcceptVoicePredicat : public Filter {
71  int fNum;
72  virtual bool operator() (const GuidoElementInfos& infos) const { return (infos.voiceNum == fNum) && (fGetRAWdata || infos.type != kEmpty); }
73  } fVoiceFilter;
74  void setFilter(int num, bool getRAWdata) { fVoiceFilter.fNum = num; fVoiceFilter.fGetRAWdata = getRAWdata; fFilter = &fVoiceFilter; }
75  virtual void Graph2TimeMap( const FloatRect& box, const TimeSegment& dates, const GuidoElementInfos& infos );
76 
77  public :
78  GuidoVoiceCollector(CGRHandler gr, int num, bool getRAWdata = false) : GuidoMapCollector(gr, kGuidoEvent) { if (num) setFilter(num, getRAWdata); }
79  virtual ~GuidoVoiceCollector() {}
80 };
81 
82 
83 //----------------------------------------------------------------------
88 {
89  private:
90  typedef std::pair<TimeSegment, FloatRect> TMapElt;
91  std::vector<TMapElt> fMap;
92  int fStaffNum;
93  bool fNoEmpty;
94  bool fGetRAWdata;
95 
96  void mergelines (const std::vector<TMapElt>& elts, Time2GraphicMap& outmap) const;
97 
98  public :
99  GuidoStaffCollector (CGRHandler gr, int num, bool getRAWdata = false)
100  : GuidoMapCollector(gr, kGuidoStaff), fStaffNum(num), fNoEmpty(true), fGetRAWdata(getRAWdata) { }
101  virtual ~GuidoStaffCollector() {}
102 
104  virtual void Graph2TimeMap( const FloatRect& box, const TimeSegment& dates, const GuidoElementInfos& infos );
105  virtual void process (int page, float w, float h, Time2GraphicMap* outmap);
106  virtual void processV1 (int page, float w, float h, Time2GraphicMap* outmap);
107 };
108 inline std::ostream& operator<< (std::ostream& os, const std::vector<std::pair<TimeSegment, FloatRect> >& v) {
109  for (unsigned int i=0; i<v.size(); i++) os << v[i].first << " -> " << v[i].second << std::endl;
110  return os; }
111 
112 //----------------------------------------------------------------------
117 {
118  typedef std::pair<TimeSegment, FloatRect> TMapElt;
119  std::vector<TMapElt> fMap;
120  public :
123 
125  virtual void Graph2TimeMap( const FloatRect& box, const TimeSegment& dates, const GuidoElementInfos& infos );
126  virtual void processNoDiv (int page, float w, float h, Time2GraphicMap* outmap);
127  virtual void process (int page, float w, float h, Time2GraphicMap* outmap);
128  virtual void processV1 (int page, float w, float h, Time2GraphicMap* outmap);
129 };
130 
131 //----------------------------------------------------------------------
137 {
138  typedef std::pair<TimeSegment, FloatRect> TMapElt;
139  std::vector<TMapElt> fMap;
140  int fStaffNum;
141 
142  public :
143  GuidoVoiceAndBarCollector(CGRHandler gr, int staffNum = 0) : GuidoMapCollector(gr, kGuidoBarAndEvent), fStaffNum(staffNum) { }
145 
147  virtual void Graph2TimeMap( const FloatRect& box, const TimeSegment& dates, const GuidoElementInfos& infos );
148 
149  private:
150  std::map<int, int> fPrevBarX; // Associates for each staffnum the x position of the previous bar, and 0 if previous element is not a bar
151 };
152 
153 } // end namespoace
154 
155 #endif
guido
Definition: GuidoMapCollector.h:26
guido::GuidoStaffCollector::GuidoStaffCollector
GuidoStaffCollector(CGRHandler gr, int num, bool getRAWdata=false)
Definition: GuidoMapCollector.h:99
guido::GuidoMapCollector::Filter::~Filter
virtual ~Filter()
Definition: GuidoMapCollector.h:37
guido::GuidoMapCollector::fSelector
GuidoElementSelector fSelector
Definition: GuidoMapCollector.h:57
MapCollector
an abstract class to be provided by clients to collect mappings
Definition: GUIDOScoreMap.h:109
guido::GuidoMapCollector
a class to collect guido graphic maps
Definition: GuidoMapCollector.h:33
guido::GuidoMapCollector::fOutMap
Time2GraphicMap * fOutMap
Definition: GuidoMapCollector.h:59
guido::GuidoStaffCollector::Graph2TimeMap
virtual void Graph2TimeMap(const FloatRect &box, const TimeSegment &dates, const GuidoElementInfos &infos)
a method called by the GuidoGetMap function
guido::GuidoVoiceAndBarCollector::~GuidoVoiceAndBarCollector
virtual ~GuidoVoiceAndBarCollector()
overrides the method called by guido for each graphic segment
Definition: GuidoMapCollector.h:144
guido::GuidoMapCollector::fGRHandler
CGRHandler fGRHandler
Definition: GuidoMapCollector.h:56
guido::GuidoStaffCollector
a guido map collector that combines a guido events and staff mappings
Definition: GuidoMapCollector.h:87
kGuidoBarAndEvent
Definition: GUIDOScoreMap.h:41
TimeSegment
class_export TimeSegment
a time segment definition and operations
Definition: GUIDOScoreMap.h:67
guido::GuidoStaffCollector::processV1
virtual void processV1(int page, float w, float h, Time2GraphicMap *outmap)
kGuidoStaff
Definition: GUIDOScoreMap.h:41
guido::operator<<
std::ostream & operator<<(std::ostream &os, const std::vector< std::pair< TimeSegment, FloatRect > > &v)
Definition: GuidoMapCollector.h:108
guido::GuidoMapCollector::~GuidoMapCollector
virtual ~GuidoMapCollector()
the method called by guido for each graphic segment
Definition: GuidoMapCollector.h:45
guido::GuidoVoiceAndBarCollector::Graph2TimeMap
virtual void Graph2TimeMap(const FloatRect &box, const TimeSegment &dates, const GuidoElementInfos &infos)
a method called by the GuidoGetMap function
GuidoElementInfos::voiceNum
int voiceNum
the element voice number or 0 when na
Definition: GUIDOScoreMap.h:58
kGuidoEvent
Definition: GUIDOScoreMap.h:41
guido::GuidoMapCollector::GuidoMapCollector
GuidoMapCollector(CGRHandler gr, GuidoElementSelector selector, const Filter *filter=0)
Definition: GuidoMapCollector.h:43
guido::GuidoMapCollector::add
void add(const TimeSegment &ts, const FloatRect &r)
Definition: GuidoMapCollector.h:51
Time2GraphicMap
std::vector< TMapSegments > Time2GraphicMap
Definition: GUIDOScoreMap.h:89
GuidoElementInfos::type
GuidoElementType type
the element type
Definition: GUIDOScoreMap.h:56
guido::GuidoVoiceAndBarCollector
a guido map collector retrieving the list of kNote/kRest events. For each kRest starting a measure,...
Definition: GuidoMapCollector.h:136
kGuidoSystem
Definition: GUIDOScoreMap.h:41
guido::GuidoVoiceCollector::GuidoVoiceCollector
GuidoVoiceCollector(CGRHandler gr, int num, bool getRAWdata=false)
Definition: GuidoMapCollector.h:78
guido::GuidoSystemCollector::GuidoSystemCollector
GuidoSystemCollector(CGRHandler gr)
Definition: GuidoMapCollector.h:121
guido::GuidoMapCollector::getEvents
void getEvents(int page, float w, float h, bool keepLeftmost, Time2GraphicMap &outmap, int staffNum=0)
guido::GuidoMapCollector::Graph2TimeMap
virtual void Graph2TimeMap(const FloatRect &box, const TimeSegment &dates, const GuidoElementInfos &infos)
a method called by the GuidoGetMap function
guido::GuidoMapCollector::fFilter
const Filter * fFilter
Definition: GuidoMapCollector.h:58
GuidoElementInfos
Information related to elements.
Definition: GUIDOScoreMap.h:55
guido::GuidoVoiceCollector
a guido map collector filtering voice events
Definition: GuidoMapCollector.h:67
guido::GuidoMapCollector::Filter
Definition: GuidoMapCollector.h:36
guido::GuidoMapCollector::Filter::fGetRAWdata
bool fGetRAWdata
Definition: GuidoMapCollector.h:40
guido::GuidoMapCollector::Filter::operator()
virtual bool operator()(const GuidoElementInfos &infos) const
Definition: GuidoMapCollector.h:38
NodeGR
Definition: GUIDOInternal.h:38
kEmpty
Definition: GUIDOScoreMap.h:47
guido::GuidoMapCollector::process
virtual void process(int page, float w, float h, Time2GraphicMap *outmap)
guido::GuidoSystemCollector
a guido map collector adjusting system to slices start
Definition: GuidoMapCollector.h:116
guido::GuidoStaffCollector::process
virtual void process(int page, float w, float h, Time2GraphicMap *outmap)
guido::GuidoSystemCollector::processNoDiv
virtual void processNoDiv(int page, float w, float h, Time2GraphicMap *outmap)
guido::GuidoSystemCollector::~GuidoSystemCollector
virtual ~GuidoSystemCollector()
overrides the method called by guido for each graphic segment
Definition: GuidoMapCollector.h:122
guido::GuidoSystemCollector::Graph2TimeMap
virtual void Graph2TimeMap(const FloatRect &box, const TimeSegment &dates, const GuidoElementInfos &infos)
a method called by the GuidoGetMap function
GuidoElementSelector
GuidoElementSelector
Definition: GUIDOScoreMap.h:40
guido::GuidoSystemCollector::processV1
virtual void processV1(int page, float w, float h, Time2GraphicMap *outmap)
guido::GuidoVoiceAndBarCollector::GuidoVoiceAndBarCollector
GuidoVoiceAndBarCollector(CGRHandler gr, int staffNum=0)
Definition: GuidoMapCollector.h:143
guido::GuidoSystemCollector::process
virtual void process(int page, float w, float h, Time2GraphicMap *outmap)
guido::GuidoVoiceCollector::~GuidoVoiceCollector
virtual ~GuidoVoiceCollector()
Definition: GuidoMapCollector.h:79
guido::GuidoStaffCollector::~GuidoStaffCollector
virtual ~GuidoStaffCollector()
overrides the method called by guido for each graphic segment
Definition: GuidoMapCollector.h:101
TRect
Definition: TRect.h:23

Guido Project Copyright © 2019 Grame-CNCM