]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/simultaneous-music-iterator.cc
release: 1.1.43
[lilypond.git] / lily / simultaneous-music-iterator.cc
index 8872bd1ebe5341b89a774e1c15a5d4d38321f628..72e59e1d612fda3b0d44ab0a180242374ca2ae7b 100644 (file)
@@ -14,6 +14,7 @@
 
 Simultaneous_music_iterator::Simultaneous_music_iterator ()
 {
+  separate_contexts_b_ = false;
 }
 
 Simultaneous_music_iterator::~Simultaneous_music_iterator ()
@@ -25,15 +26,25 @@ void
 Simultaneous_music_iterator::construct_children()
 {
   int j = 0;
-  Simultaneous_music const *sim = dynamic_cast<Simultaneous_music const*> (music_l_);
+  Music_sequence const *sim = dynamic_cast<Music_sequence const*> (music_l_);
 
-  for (Cons<Music> *i = sim->music_p_list_p_->head_cons_p_; i;  i = i->next_cons_p_, j++)
+  for (Cons<Music> *i = sim->music_p_list_p_->head_; i;  i = i->next_, j++)
     {
-      Music_iterator * mi = get_iterator_p (i->car_p_);
+      Music_iterator * mi = static_get_iterator_p (i->car_);
+
+      /* if separate_contexts_b_ is set, create a new context with the
+        number number as name */
+      
+      Translator_group * t = (j && separate_contexts_b_)
+       ? report_to_l ()->find_create_translator_l (report_to_l()->type_str_,
+                                                   to_str (j))
+       : report_to_l ();
+
+      mi->init_translator (i->car_, t);
+      mi->construct_children ();
+      
       if (mi->ok()) 
        {
-         if  (sim->translator_type_str_.empty_b ())
-           set_translator (mi->report_to_l()->ancestor_l (0)); // huh?
          children_p_list_.append (new Killing_cons<Music_iterator> (mi,0));
        }
       else
@@ -41,30 +52,29 @@ Simultaneous_music_iterator::construct_children()
     }
 }
 
-
 void
 Simultaneous_music_iterator::do_print() const
 {
 #ifndef NPRINT
-  for (Cons<Music_iterator> *p = children_p_list_.head_cons_p_; p; p = p->next_cons_p_)
-    p->car_p_->print();
+  for (Cons<Music_iterator> *p = children_p_list_.head_; p; p = p->next_)
+    p->car_->print();
 #endif
 }
 
 void
 Simultaneous_music_iterator::do_process_and_next (Moment until)
 {
-  for (Cons<Music_iterator> **pp = &children_p_list_.head_cons_p_; *pp; )
+  for (Cons<Music_iterator> **pp = &children_p_list_.head_; *pp; )
     {
-      Music_iterator * i = (*pp)->car_p_;
+      Music_iterator * i = (*pp)->car_;
       if  (i->next_moment() == until) 
        {
          i->process_and_next (until);
        }
       if (!i->ok())
-       delete children_p_list_.remove_cons_p (pp);
+       delete children_p_list_.remove_cons (pp);
       else
-       pp = &(*pp)->next_cons_p_;
+       pp = &(*pp)->next_;
     }
   Music_iterator::do_process_and_next (until);
 }
@@ -78,8 +88,8 @@ Simultaneous_music_iterator::next_moment() const
   Moment next;
   next.set_infinite (1);
   
-  for (Cons<Music_iterator> *p = children_p_list_.head_cons_p_; p; p = p->next_cons_p_)
-    next = next <? p->car_p_->next_moment() ;
+  for (Cons<Music_iterator> *p = children_p_list_.head_; p; p = p->next_)
+    next = next <? p->car_->next_moment() ;
   return next;
 }
 
@@ -88,6 +98,6 @@ Simultaneous_music_iterator::next_moment() const
 bool
 Simultaneous_music_iterator::ok() const
 {
-  return children_p_list_.head_cons_p_;
+  return children_p_list_.head_;
 }