LibMusicXML  3.18
msrMeasures_MUT_DEP.h
1 /*
2  This file is to be included only by msrMutualDependencies.h,
3  to satisfy declarations mutual dependencies.
4 */
5 
6 //______________________________________________________________________________
7 class msrMeasure : public msrElement
8 {
9  public:
10 
11  // data types
12  // ------------------------------------------------------
13 
14  enum msrMeasureKind {
15  kMeasureKindUnknown,
16  kMeasureKindRegular,
17  kMeasureKindAnacrusis,
18  kMeasureKindIncompleteStandalone,
19  kMeasureKindIncompleteLastInRepeatCommonPart,
20  kMeasureKindIncompleteLastInRepeatHookedEnding,
21  kMeasureKindIncompleteLastInRepeatHooklessEnding,
22  kMeasureKindIncompleteNextMeasureAfterCommonPart,
23  kMeasureKindIncompleteNextMeasureAfterHookedEnding,
24  kMeasureKindIncompleteNextMeasureAfterHooklessEnding,
25  kMeasureKindOvercomplete,
26  kMeasureKindCadenza,
27  kMeasureKindMusicallyEmpty};
28 
29  static string measureKindAsString (
30  msrMeasureKind measureKind);
31 
32  enum msrMeasureImplicitKind {
33  kMeasureImplicitKindYes,
34  kMeasureImplicitKindNo };
35 
36  static string measureImplicitKindAsString (
37  msrMeasureImplicitKind measureImplicitKind);
38 
39  enum msrMeasureFirstInSegmentKind {
40  kMeasureFirstInSegmentKindUnknown,
41  kMeasureFirstInSegmentKindYes,
42  kMeasureFirstInSegmentKindNo };
43 
44  static string measureFirstInSegmentKindAsString (
45  msrMeasureFirstInSegmentKind measureFirstInSegmentKind);
46 
47  enum msrMeasuresRepeatContextKind {
48  kMeasuresRepeatContextKindUnknown,
49  kMeasuresRepeatContextKindNone,
50  kMeasuresRepeatContextKindCommonPartLastMeasure,
51  kMeasuresRepeatContextKindHookedEndingLastMeasure,
52  kMeasuresRepeatContextKindHooklessEndingLastMeasure,
53  kMeasuresRepeatContextKindNextMeasureAfterCommonPart,
54  kMeasuresRepeatContextKindNextMeasureAfterHookedEnding,
55  kMeasuresRepeatContextKindNextMeasureAfterHooklessEnding };
56 
57  static string measuresRepeatContextKindAsString (
58  msrMeasuresRepeatContextKind measuresRepeatContextKind);
59 
60  enum msrMeasureEndRegularKind {
61  kMeasureEndRegularKindUnknown,
62  kMeasureEndRegularKindYes,
63  kMeasureEndRegularKindNo };
64 
65  static string measureEndRegularKindAsString (
66  msrMeasureEndRegularKind measureEndRegularKind);
67 
68  // creation from MusicXML
69  // ------------------------------------------------------
70 
71  static SMARTP<msrMeasure> create (
72  int inputLineNumber,
73  string measureNumber,
74  S_msrSegment measureSegmentUpLink);
75 
76  SMARTP<msrMeasure> createMeasureNewbornClone (
77  S_msrSegment containingSegment);
78 
79  SMARTP<msrMeasure> createMeasureDeepCopy (
80  S_msrSegment containingSegment);
81 
82  protected:
83 
84  // constructors/destructor
85  // ------------------------------------------------------
86 
87  msrMeasure (
88  int inputLineNumber,
89  string measureNumber,
90  S_msrSegment measureSegmentUpLink);
91 
92  virtual ~msrMeasure ();
93 
94  private:
95 
96  // initialization
97  // ------------------------------------------------------
98 
99  void initializeMeasure ();
100 
101  public:
102 
103  // set and get
104  // ------------------------------------------------------
105 
106  // upLinks
107 
108  S_msrSegment getMeasureSegmentUpLink () const
109  { return fMeasureSegmentUpLink; }
110 
111  // measure numbers
112 
113  void setMeasureElementMeasureNumber (string measureNumber)
114  { fMeasureElementMeasureNumber = measureNumber; }
115 
116  string getMeasureElementMeasureNumber () const
117  { return fMeasureElementMeasureNumber; }
118 
119  void setMeasurePuristNumber (
120  int measurePuristNumber);
121 
122  int getMeasurePuristNumber () const
123  { return fMeasurePuristNumber; }
124 
125  void setNextMeasureNumber (string nextMeasureNumber);
126 
127  string getNextMeasureNumber () const
128  { return fNextMeasureNumber; }
129 
130  void setMeasureFirstInVoice ();
131 
132  bool getMeasureFirstInVoice () const
133  { return fMeasureFirstInVoice; }
134 
135  // measure lengthes, in whole notes
136 
137  void setFullMeasureWholeNotesDuration (
138  rational wholeNotes)
139  { fFullMeasureWholeNotesDuration = wholeNotes; }
140 
141  rational getFullMeasureWholeNotesDuration () const
142  { return fFullMeasureWholeNotesDuration; }
143 
144  void setCurrentMeasureWholeNotesDuration (
145  int inputLineNumber,
146  rational wholeNotes);
147  void incrementCurrentMeasureWholeNotesDuration (
148  int inputLineNumber,
149  rational delta);
150 
151  rational getCurrentMeasureWholeNotesDuration () const
152  { return fCurrentMeasureWholeNotesDuration; }
153 
154  // measure kind
155 
156  void setMeasureKind (
157  msrMeasureKind measureKind);
158 
159  msrMeasureKind
160  getMeasureKind () const
161  { return fMeasureKind; }
162 
163  // measure implicit kind
164 
165  void setMeasureImplicitKind (
166  msrMeasureImplicitKind measureImplicitKind)
167  {
168  fMeasureImplicitKind =
169  measureImplicitKind;
170  }
171 
172  msrMeasureImplicitKind
173  getMeasureImplicitKind () const
174  { return fMeasureImplicitKind; }
175 
176 
177  // measure 'first in segment' kind
178 
179  void setMeasureFirstInSegmentKind (
180  msrMeasureFirstInSegmentKind
181  measureFirstInSegmentKind)
182  {
183  fMeasureFirstInSegmentKind =
184  measureFirstInSegmentKind;
185  }
186 
187  msrMeasureFirstInSegmentKind
188  getMeasureFirstInSegmentKind () const
189  { return fMeasureFirstInSegmentKind; }
190 
191  // single-measure rest?
192 
193 
194  void setMeasureIsAFullMeasureRest ()
195  { fMeasureIsAFullMeasureRest = true; }
196 
197  bool getMeasureIsAFullMeasureRest () const
198  { return fMeasureIsAFullMeasureRest; }
199 
200  // measure longest note
201 
202  S_msrNote getMeasureLongestNote () const
203  { return fMeasureLongestNote; }
204 
205  // chords handling
206 
207  S_msrNote getMeasureLastHandledNote () const
208  { return fMeasureLastHandledNote; }
209 
210  // elements list
211 
212  const list<S_msrMeasureElement>&
213  getMeasureElementsList () const
214  { return fMeasureElementsList; }
215 
216  bool getMeasureContainsMusic () const
217  { return fMeasureContainsMusic; }
218 
219  // regular measure ends detection
220 
221  void setMeasureEndRegularKind (
222  msrMeasureEndRegularKind measureEndRegularKind);
223 
224  msrMeasureEndRegularKind
225  getMeasureEndRegularKind () const
226  { return fMeasureEndRegularKind; }
227 
228  // repeat context
229 
230  void setMeasuresRepeatContextKind (
231  msrMeasuresRepeatContextKind measuresRepeatContextKind);
232 
233  msrMeasuresRepeatContextKind
234  getMeasuresRepeatContextKind () const
235  { return fMeasuresRepeatContextKind; }
236 
237  public:
238 
239  // public services
240  // ------------------------------------------------------
241 
242  // upLinks
243 
244  S_msrPart fetchMeasurePartUpLink () const; // JMI ???
245 
246  S_msrVoice fetchMeasureVoiceUpLink () const;
247 
248  // lengthes
249 
250  string fullMeasureWholeNotesDurationAsMSRString ();
251 
252  string currentMeasureWholeNotesDurationAsMSRString ();
253 
254  // backup and padding
255 
256  S_msrNote createPaddingNoteForVoice (
257  int inputLineNumber,
258  rational duration,
259  S_msrVoice voice);
260 
261  void padUpToPositionInMeasureInMeasure (
262  int inputLineNumber,
263  rational wholeNotes);
264 
265  void backupByWholeNotesStepLengthInMeasure (
266  int inputLineNumber,
267  rational backupTargetMeasureElementPositionInMeasure);
268 
269  void appendPaddingNoteToMeasure (
270  int inputLineNumber,
271  rational forwardStepLength);
272 
273  // rest measures
274 
275  bool measureIsARestMeasure () const;
276 
277  // clefs
278 
279  void appendClefToMeasure (S_msrClef clef);
280 
281  // keys
282 
283  void appendKeyToMeasure (S_msrKey key);
284 
285  // times
286 
287  void appendTimeToMeasure (S_msrTime time);
288 
289  void setFullMeasureWholeNotesDurationFromTime (
290  S_msrTime time);
291 
292  void appendTimeToMeasureClone (S_msrTime time);
293 
294  // transpose
295 
296  void appendTransposeToMeasure (
297  S_msrTranspose transpose);
298 
299  // part name display
300 
301  void appendPartNameDisplayToMeasure (
302  S_msrPartNameDisplay partNameDisplay);
303 
304  // part abbreviation display
305 
306  void appendPartAbbreviationDisplayToMeasure (
307  S_msrPartAbbreviationDisplay partAbbreviationDisplay);
308 
309  // staff details
310 
311  void appendStaffDetailsToMeasure (
312  S_msrStaffDetails staffDetails);
313 
314  // bar number checks
315 
316  void appendBarNumberCheckToMeasure (
317  S_msrBarNumberCheck barNumberCheck);
318 
319  // breaks
320 
321  void appendLineBreakToMeasure (S_msrLineBreak lineBreak);
322  void appendPageBreakToMeasure (S_msrPageBreak pageBreak);
323 
324  // tempo
325 
326  void appendTempoToMeasure (S_msrTempo tempo);
327 
328  // rehearsals
329 
330  void appendRehearsalToMeasure (
331  S_msrRehearsal rehearsal);
332 
333  // octave shifts
334 
335  void appendOctaveShiftToMeasure (
336  S_msrOctaveShift octaveShift);
337 
338  // scordaturas
339 
340  void appendScordaturaToMeasure (
341  S_msrScordatura scordatura);
342 
343  // accordion registration
344 
345  void appendAccordionRegistrationToMeasure (
346  S_msrAccordionRegistration
347  accordionRegistration);
348 
349  // harp pedals tuning
350 
351  void appendHarpPedalsTuningToMeasure (
352  S_msrHarpPedalsTuning
353  harpPedalsTuning);
354 
355  // bar lines
356 
357  void appendBarlineToMeasure (S_msrBarline barline);
358  void prependBarlineToMeasure (S_msrBarline barline);
359 
360  // bar checks
361 
362  void appendBarCheckToMeasure (S_msrBarCheck barCheck);
363 
364  // staff change
365 
366  void appendVoiceStaffChangeToMeasure (
367  S_msrVoiceStaffChange voiceStaffChange);
368 
369  // notes
370 
371  void appendNoteToMeasure (
372  S_msrNote note,
373  rational partCurrentPositionInMeasure);
374 
375  void appendNoteOrPaddingToMeasure (
376  S_msrNote note);
377 
378  void accountForTupletMemberNoteDurationInMeasure (
379  S_msrNote note);
380 
381  void appendPaddingNoteAtTheEndOfMeasure (S_msrNote note);
382 
383  void appendNoteToMeasureClone (S_msrNote note);
384 
385  // tremolos
386 
387  void appendDoubleTremoloToMeasure (
388  S_msrDoubleTremolo doubleTremolo);
389 
390  // chords
391 
392  void appendChordToMeasure (
393  S_msrChord chord);
394 
395  // tuplets
396 
397  void appendTupletToMeasure (
398  S_msrTuplet tuplet);
399 
400  // harmonies
401 
402  void appendHarmonyToMeasure (
403  S_msrHarmony harmony);
404 
405  void appendHarmonyToMeasureClone (
406  S_msrHarmony harmony);
407 
408  // frames
409 
410  void appendFrameToMeasure (
411  S_msrFrame frame);
412 
413  void appendFrameToMeasureClone (
414  S_msrFrame frame);
415 
416  // figured bass
417 
418  void appendFiguredBassToMeasure (
419  S_msrFiguredBass figuredBass);
420 
421  void appendFiguredBassToMeasureClone (
422  S_msrFiguredBass figuredBass);
423 
424  // grace notes
425 
426  /* JMI
427  void addGraceNotesGroupAheadOfMeasure (
428  S_msrGraceNotesGroup graceNotesGroup);
429 
430  void appendGraceNotesToMeasure (
431  S_msrGraceNotes graceNotes);
432 
433  void appendAfterGraceNotesToMeasure (
434  S_msrAfterGraceNotes afterGraceNotes);
435 
436  void prependAfterGraceNotesToMeasure (
437  S_msrAfterGraceNotes afterGraceNotes);
438  */
439 
440  // segno
441 
442  void appendSegnoToMeasure (S_msrSegno segno);
443 
444  // coda
445 
446  void appendCodaToMeasure (S_msrCoda coda);
447 
448  // eyeglasses
449 
450  void appendEyeGlassesToMeasure (
451  S_msrEyeGlasses eyeGlasses);
452 
453  // pedal
454 
455  void appendPedalToMeasure (S_msrPedal pedal);
456 
457  // damp
458 
459  void appendDampToMeasure (S_msrDamp damp);
460 
461  // damp all
462 
463  void appendDampAllToMeasure (S_msrDampAll dampAll);
464 
465  // other elements
466 
467  void prependOtherElementToMeasure (
468  S_msrMeasureElement elem);
469  void appendOtherElementToMeasure (
470  S_msrMeasureElement elem);
471 
472  // last element of measure
473 
474  S_msrElement getLastElementOfMeasure () const
475  { return fMeasureElementsList.back (); }
476 
477  /* JMI
478  S_msrElement removeLastElementFromMeasure (
479  int inputLineNumber);
480 */
481 
482  // removing elements from measure
483 
484  void removeNoteFromMeasure (
485  int inputLineNumber,
486  S_msrNote note);
487 
488  void removeElementFromMeasure (
489  int inputLineNumber,
490  S_msrElement elem);
491 
492  // finalization
493 
494  void determineMeasureKindAndPuristNumber (
495  int inputLineNumber,
496  msrMeasuresRepeatContextKind
497  measuresRepeatContextKind);
498 
499  void padUpToPositionInMeasure (
500  int inputLineNumber,
501  rational positionInMeasureToPadUpTo);
502 
503  void padUpToPositionAtTheEndOfTheMeasure (
504  int inputLineNumber,
505  rational positionInMeasureToPadUpTo);
506 
507  void finalizeMeasure (
508  int inputLineNumber,
509  msrMeasuresRepeatContextKind measuresRepeatContextKind,
510  string context);
511 
512  void finalizeRegularMeasure (
513  int inputLineNumber,
514  msrMeasuresRepeatContextKind measuresRepeatContextKind,
515  string context);
516 
517  void finalizeHarmonyMeasure (
518  int inputLineNumber,
519  msrMeasuresRepeatContextKind measuresRepeatContextKind,
520  string context);
521 
522  void finalizeFiguredBassMeasure (
523  int inputLineNumber,
524  msrMeasuresRepeatContextKind measuresRepeatContextKind,
525  string context);
526 
527  void finalizeMeasureClone (
528  int inputLineNumber,
529  S_msrMeasure originalMeasure,
530  S_msrVoice voiceClone);
531 
532  private:
533 
534  // private services
535  // ------------------------------------------------------
536 
537  void appendElementToMeasure (
538  S_msrMeasureElement elem);
539 
540  public:
541 
542  // visitors
543  // ------------------------------------------------------
544 
545  virtual void acceptIn (basevisitor* v);
546  virtual void acceptOut (basevisitor* v);
547 
548  virtual void browseData (basevisitor* v);
549 
550  public:
551 
552  // print
553  // ------------------------------------------------------
554 
555  string measureKindAsString () const;
556 
557  string asShortString () const;
558  string asString () const;
559 
560  void displayMeasure (
561  int inputLineNumber,
562  string context);
563 
564  virtual void print (ostream& os) const;
565 
566  virtual void shortPrint (ostream& os) const;
567 
568  private:
569 
570  // fields
571  // ------------------------------------------------------
572 
573  // upLinks
574 
575  S_msrSegment fMeasureSegmentUpLink;
576 
577  // measure lengthes, in whole notes
578 
579  rational fFullMeasureWholeNotesDuration;
580  // meaningfull only
581  // when there is a time signature,
582  // but not for cadenzas
583 
584  rational fCurrentMeasureWholeNotesDuration;
585  // this increases when musical elements
586  // are appended to the measure
587 
588  // measure numbers, shared by newborn clones and deep copies
589 
590  string fMeasureElementMeasureNumber;
591  string fNextMeasureNumber;
592 
593  // first measure in voice?
594 
595  bool fMeasureFirstInVoice;
596 
597  // measure longest note
598 
599  S_msrNote fMeasureLongestNote;
600 
601  // measure kind
602 
603  msrMeasureKind fMeasureKind;
604 
605  // measure implicit kind
606 
607  msrMeasureImplicitKind
608  fMeasureImplicitKind;
609 
610  // measure 'first in segment' kind
611 
612  msrMeasureFirstInSegmentKind
613  fMeasureFirstInSegmentKind;
614 
615  // single-measure rest?
616 
617  bool fMeasureIsAFullMeasureRest;
618 
619  // chords handling
620 
621  S_msrNote fMeasureLastHandledNote;
622 
623  // elements
624 
625  list<S_msrMeasureElement>
626  fMeasureElementsList;
627 
628  bool fMeasureContainsMusic;
629 
630  // purist measure number, forcing anacruses to start at '0' if it's not the case
631  // and not shared among repeats components
632  int fMeasurePuristNumber;
633 
634  // debug number, unique for every msrMeasure instance
635  static int gMeasureDebugNumber;
636  int fMeasureDebugNumber;
637 
638  // regular measure ends detection
639  msrMeasureEndRegularKind
640  fMeasureEndRegularKind;
641 
642  // repeat context
643  msrMeasuresRepeatContextKind
644  fMeasuresRepeatContextKind;
645 
646  public:
647 
648  // public work services
649  // ------------------------------------------------------
650 
651  private:
652 
653  // private work services
654  // ------------------------------------------------------
655 
656  void handleFirstHarmonyInHarmonyMeasure (
657  int inputLineNumber,
658  S_msrVoice voice,
659  list<S_msrMeasureElement>::iterator&
660  i,
661  S_msrHarmony previousHarmony,
662  S_msrHarmony currentHarmony,
663  rational currentHarmonyPositionInMeasure);
664 
665  void handleSubsequentHarmonyInHarmonyMeasure (
666  int inputLineNumber,
667  S_msrVoice voice,
668  list<S_msrMeasureElement>::iterator&
669  i,
670  S_msrHarmony previousHarmony,
671  S_msrHarmony currentHarmony,
672  rational currentHarmonyPositionInMeasure);
673 
674  void postHandleCurrentHarmonyInHarmonyMeasure (
675  int inputLineNumber,
676  S_msrVoice voice,
677  S_msrHarmony currentHarmony);
678 
679  void handleHarmoniesInHarmonyMeasureFinalization (
680  int inputLineNumber,
681  string context);
682 
683  void insertElementInMeasureBeforeIterator (
684  int inputLineNumber,
685  list<S_msrMeasureElement>::iterator iter,
686  S_msrMeasureElement elem);
687 
688  void appendElementAtTheEndOfMeasure (
689  S_msrMeasureElement elem);
690 
691  void printMeasurePendingMeasureElementsList ();
692 
693  private:
694 
695  // work fields
696  // ------------------------------------------------------
697 
698  // pending measure elements, which may have to be delayed
699  // because of <backup />
700 
701  list<S_msrMeasureElement>
702  fMeasurePendingMeasureElementsList;
703 
704  // measure finalization
705  bool fMeasureHasBeenFinalized;
706  bool fMeasureKindAndPuristNumberHaveBeenDetermined;
707 };
708 typedef SMARTP<msrMeasure> S_msrMeasure;
709 EXP ostream& operator<< (ostream& os, const S_msrMeasure& elt);
710 
Definition: msrMeasures_MUT_DEP.h:8
Rational number representation.
Definition: rational.h:25