X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=lily%2Fmusic-iterator.cc;h=5505c145a7436154c5d49ffc409b39a343948047;hb=31653bf1d61a33ef8bc8c871d60c6b3452d04d28;hp=d05b752df097ee42fe7a80e8ed3bc8ff2488336b;hpb=cec6dfa6bf0fb931eb7f42b1ee44ca2ec19a9f34;p=lilypond.git diff --git a/lily/music-iterator.cc b/lily/music-iterator.cc index d05b752df0..5505c145a7 100644 --- a/lily/music-iterator.cc +++ b/lily/music-iterator.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1997 Han-Wen Nienhuys + (c) 1997--1998 Han-Wen Nienhuys */ #include "debug.hh" #include "music-list.hh" @@ -14,6 +14,14 @@ #include "request-iterator.hh" #include "translator-group.hh" #include "translation-property.hh" +#include "change-iterator.hh" +#include "change-translator.hh" +#include "music-wrapper.hh" +#include "music-wrapper-iterator.hh" +#include "compressed-music-iterator.hh" +#include "compressed-music.hh" + + IMPLEMENT_IS_TYPE_B(Music_iterator); @@ -105,8 +113,15 @@ Music_iterator::next_moment() const return 0; } + +void +Music_iterator::process_and_next (Moment m) +{ + do_process_and_next (m); +} + void -Music_iterator::process_and_next (Moment) +Music_iterator::do_process_and_next (Moment) { first_b_ = false; } @@ -118,45 +133,56 @@ Music_iterator::ok() const } Music_iterator* -Music_iterator::static_get_iterator_p (Music *m, - Translator_group*report_l) +Music_iterator::static_get_iterator_p (Music const *m, Translator_group *report_l) { Music_iterator * p =0; - if (m->is_type_b (Request_chord::static_name())) - p = new Request_chord_iterator ((Request_chord*) m); - else if (m->is_type_b (Chord::static_name())) - p = new Chord_iterator ((Chord*) m); - else if (m->is_type_b (Voice::static_name())) - p = new Voice_iterator ((Voice*) m); - else if (m->is_type_b (Translation_property::static_name ())) - p = new Property_iterator((Translation_property *) m); - - if (m -> translator_type_str_) + if (dynamic_cast (m)) + p = new Request_chord_iterator; + else if (dynamic_cast (m)) + p = new Simultaneous_music_iterator; + else if (dynamic_cast (m)) + p = new Sequential_music_iterator; + else if (dynamic_cast (m)) + p = new Property_iterator; + else if (dynamic_cast (m)) + p = new Change_iterator; + else if (dynamic_cast (m)) + p = new Compressed_music_iterator; + else if (dynamic_cast (m)) + p = new Music_wrapper_iterator; + + p->music_l_ = m; + if (m->translator_type_str_.length_i ()) { Translator_group* a =report_l-> - find_create_translator_l (m-> translator_type_str_, m->translator_id_str_); + find_create_translator_l (m->translator_type_str_, m->translator_id_str_); p->set_translator (a); } - if (! p->report_to_l()) p ->set_translator (report_l); + return p; } +void +Music_iterator::inherit_info(Music_iterator const *) +{ +} + Music_iterator* -Music_iterator::get_iterator_p (Music*m) const +Music_iterator::get_iterator_p (Music const*m) const { - Music_iterator*p = static_get_iterator_p (m,report_to_l()); - p->daddy_iter_l_ = (Music_iterator*)this; + Music_iterator*p = static_get_iterator_p (m, report_to_l()); + p->inherit_info (this); p->construct_children(); return p; } Music_iterator::Music_iterator() { - daddy_iter_l_ =0; first_b_ = true; } +