LibMusicXML  3.18
msrTimes.h
1 /*
2  MusicXML Library
3  Copyright (C) Grame 2006-2013
4 
5  This Source Code Form is subject to the terms of the Mozilla Public
6  License, v. 2.0. If a copy of the MPL was not distributed with this
7  file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 
9  Grame Research Laboratory, 11, cours de Verdun Gensoul 69002 Lyon - France
10  research@grame.fr
11 */
12 
13 #ifndef ___msrTimes___
14 #define ___msrTimes___
15 
16 #include "msrMeasureElements.h"
17 
18 #include "msrBasicTypes.h"
19 
20 
21 namespace MusicXML2
22 {
23 
24 //______________________________________________________________________________
25 class msrTimeItem;
26 typedef SMARTP<msrTimeItem> S_msrTimeItem;
27 
28 class msrTime;
29 typedef SMARTP<msrTime> S_msrTime;
30 
31 //______________________________________________________________________________
32 class msrTimeItem : public msrElement
33 {
34  public:
35 
36  // creation from MusicXML
37  // ------------------------------------------------------
38 
39  static SMARTP<msrTimeItem> create (
40  int inputLineNumber);
41 
42  protected:
43 
44  // constructors/destructor
45  // ------------------------------------------------------
46 
47  msrTimeItem (
48  int inputLineNumber);
49 
50  virtual ~msrTimeItem ();
51 
52  public:
53 
54  // set and get
55  // ------------------------------------------------------
56 
57  const vector<int>& getTimeBeatsNumbersVector () const
58  { return fTimeBeatsNumbersVector; }
59 
60  void setTimeBeatValue (int timeBeatValue);
61 
62  int getTimeBeatValue () const
63  { return fTimeBeatValue; }
64 
65  // services
66  // ------------------------------------------------------
67 
68  bool isEqualTo (S_msrTimeItem otherTimeItem) const;
69 
70  void appendBeatsNumber (int beatsNumber);
71 
72  int getTimeBeatsNumber () const;
73 
74  public:
75 
76  // visitors
77  // ------------------------------------------------------
78 
79  virtual void acceptIn (basevisitor* v);
80  virtual void acceptOut (basevisitor* v);
81 
82  virtual void browseData (basevisitor* v);
83 
84  public:
85 
86  // print
87  // ------------------------------------------------------
88 
89  string asString () const;
90 
91  virtual void print (ostream& os) const;
92 
93  private:
94 
95  // fields
96  // ------------------------------------------------------
97 
98  vector<int> fTimeBeatsNumbersVector; // 5+3+1 is possible
99  int fTimeBeatValue;
100 };
102 EXP ostream& operator<< (ostream& os, const S_msrTimeItem& elt);
103 
104 //______________________________________________________________________________
106 {
107  public:
108 
109  // data types
110  // ------------------------------------------------------
111 
112  enum msrTimeSymbolKind {
113  kTimeSymbolNone,
114  kTimeSymbolCommon,
115  kTimeSymbolCut,
116  kTimeSymbolNote,
117  kTimeSymbolDottedNote,
118  kTimeSymbolSingleNumber,
119  kTimeSymbolSenzaMisura };
120 
121  static string timeSymbolKindAsString (
122  msrTimeSymbolKind timeSymbolKind);
123 
124  enum msrTimeSeparatorKind {
125  kTimeSeparatorNone,
126  kTimeSeparatorHorizontal,
127  kTimeSeparatorDiagonal,
128  kTimeSeparatorVertical,
129  kTimeSeparatorAdjacent };
130 
131  static string timeSeparatorKindAsString (
132  msrTimeSeparatorKind timeSeparatorKind);
133 
134  enum msrTimeRelationKind {
135  kTimeRelationNone,
136  kTimeRelationParentheses,
137  kTimeRelationBracket,
138  kTimeRelationEquals,
139  kTimeRelationSlash,
140  kTimeRelationSpace,
141  kTimeRelationHyphen };
142 
143  static string timeRelationKindAsString (
144  msrTimeRelationKind timeRelationKind);
145 
146  // creation from MusicXML
147  // ------------------------------------------------------
148 
149  static SMARTP<msrTime> create (
150  int inputLineNumber,
151  msrTimeSymbolKind timeSymbolKind);
152 
153  static SMARTP<msrTime> createFourQuartersTime (
154  int inputLineNumber);
155 
156  protected:
157 
158  // constructors/destructor
159  // ------------------------------------------------------
160 
161  msrTime (
162  int inputLineNumber,
163  msrTimeSymbolKind timeSymbolKind);
164 
165  virtual ~msrTime ();
166 
167  public:
168 
169  // set and get
170  // ------------------------------------------------------
171 
172  msrTimeSymbolKind getTimeSymbolKind () const
173  { return fTimeSymbolKind; }
174 
175  bool getTimeIsCompound () const
176  { return fTimeIsCompound; }
177 
178  const vector<S_msrTimeItem>&
179  getTimeItemsVector ()
180  { return fTimeItemsVector; }
181 
182  // services
183  // ------------------------------------------------------
184 
185  bool isEqualTo (S_msrTime otherTime) const;
186 
187  void appendTimeItem (
188  S_msrTimeItem timeItem);
189 
190  rational wholeNotesPerMeasure () const;
191 
192  public:
193 
194  // visitors
195  // ------------------------------------------------------
196 
197  virtual void acceptIn (basevisitor* v);
198  virtual void acceptOut (basevisitor* v);
199 
200  virtual void browseData (basevisitor* v);
201 
202  public:
203 
204  // print
205  // ------------------------------------------------------
206 
207  string asString () const;
208 
209  string asShortString () const;
210 
211  virtual void print (ostream& os) const;
212 
213  private:
214 
215  // fields
216  // ------------------------------------------------------
217 
218  msrTimeSymbolKind fTimeSymbolKind;
219 
220  vector<S_msrTimeItem> fTimeItemsVector;
221 
222  // a time is compound if it contains several items
223  // or if the only one has several beats numbers
224  // i.e. 3/4 is not, (3+4)/8 is, and 2/4+3/4 is too
225  bool fTimeIsCompound;
226 };
227 typedef SMARTP<msrTime> S_msrTime;
228 EXP ostream& operator<< (ostream& os, const S_msrTime& elt);
229 
230 
231 } // namespace MusicXML2
232 
233 
234 #endif
the smart pointer implementation
Definition: smartpointer.h:58
Definition: basevisitor.h:25
Definition: msrElements.h:26
Definition: msrMeasureElements.h:24
Definition: msrTimes.h:33
Definition: msrTimes.h:106
Rational number representation.
Definition: rational.h:25