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//______________________________________________________________________________
7class 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
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};
708typedef SMARTP<msrMeasure> S_msrMeasure;
709EXP ostream& operator<< (ostream& os, const S_msrMeasure& elt);
710
Definition: msrMeasures_MUT_DEP.h:8
Rational number representation.
Definition: rational.h:25