LibMusicXML  3.18
msrDivisions.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 ___msrDivisions___
14 #define ___msrDivisions___
15 
16 #include <list>
17 
18 #include "msrElements.h"
19 
20 #include "msrBasicTypes.h"
21 
22 
23 namespace MusicXML2
24 {
25 
26 //______________________________________________________________________________
27 class msrDivisions : public msrElement
28 {
29  public:
30 
31  // creation from MusicXML
32  // ------------------------------------------------------
33 
34  static SMARTP<msrDivisions> create (
35  int inputLineNumber,
36  int divisionsPerQuarterNote);
37 
38  SMARTP<msrDivisions> createDivisionsNewbornClone (); // JMI
39 
40  private:
41 
42  // initialisation
43  // ------------------------------------------------------
44 
45  void initializeDivisions ();
46 
47  protected:
48 
49  // constructors/destructor
50  // ------------------------------------------------------
51 
52  msrDivisions (
53  int inputLineNumber,
54  int divisionsPerQuarterNote);
55 
56  virtual ~msrDivisions ();
57 
58  public:
59 
60  // set and get
61  // ------------------------------------------------------
62 
63  void setDivisionsPerQuarterNote ( // JMI
64  int divisionsPerQuarterNote)
65  {
66  fDivisionsPerQuarterNote =
67  divisionsPerQuarterNote;
68  }
69 
70  int getDivisionsPerQuarterNote () const
71  { return fDivisionsPerQuarterNote; }
72 
73  // services
74  // ------------------------------------------------------
75 
76  string divisionsAsString () const;
77 
78  // durations
79  int durationKindAsDivisions (
80  int inputLineNumber,
81  msrDurationKind durationKind);
82 
83  void printDurationKindsDivisions (ostream& os);
84 
85  // MSR strings
86  string divisionsAsMsrString (
87  int inputLineNumber,
88  int divisions,
89  int& numberOfDotsNeeded);
90 
91  string divisionsAsMsrString (
92  int inputLineNumber,
93  int divisions);
94 /* JMI
95  string wholeNotesAsMsrString (
96  int inputLineNumber,
97  rational wholeNotes,
98  int& numberOfDotsNeeded);
99 
100  string wholeNotesAsMsrString (
101  int inputLineNumber,
102  rational wholeNotes);
103 */
104  string tupletDivisionsAsMsrString (
105  int inputLineNumber,
106  int divisions,
107  int actualNotes,
108  int normalNotes);
109 
110  string tupletWholeNotesAsMsrString (
111  int inputLineNumber,
112  rational wholeNotes,
113  int actualNotes,
114  int normalNotes);
115 
116 /* JMI
117  void testDivisionsAndDurations (); // JMI
118  void testTupletSoundingWholeNotesAndDurations ();
119 */
120 
121  public:
122 
123  // visitors
124  // ------------------------------------------------------
125 
126  virtual void acceptIn (basevisitor* v);
127  virtual void acceptOut (basevisitor* v);
128 
129  virtual void browseData (basevisitor* v);
130 
131  public:
132 
133  // print
134  // ------------------------------------------------------
135 
136  virtual void print (ostream& os) const;
137 
138  private:
139 
140  // fields
141  // ------------------------------------------------------
142 
143  int fDivisionsPerQuarterNote;
144 
145  list<pair<msrDurationKind, int> >
146  fDurationKindsToDivisions;
147 };
149 EXP ostream& operator<< (ostream& os, const S_msrDivisions& elt);
150 
151 
152 } // namespace MusicXML2
153 
154 
155 #endif
MusicXML2::msrDivisions
Definition: msrDivisions.h:28
MusicXML2::SMARTP< msrDivisions >
MusicXML2::basevisitor
Definition: basevisitor.h:25
MusicXML2::msrElement
Definition: msrElements.h:26
rational
Rational number representation.
Definition: rational.h:25