]> git.donarmstrong.com Git - lilypond.git/commitdiff
patch::: 1.3.85.jcn4
authorJan Nieuwenhuizen <janneke@gnu.org>
Tue, 12 Sep 2000 20:53:12 +0000 (22:53 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Tue, 12 Sep 2000 20:53:12 +0000 (22:53 +0200)
1.3.85.jcn4
===========

* Added clone () to music iterators, so that we can do next () on a copy.

25 files changed:
CHANGES
VERSION
lily/include/auto-change-iterator.hh
lily/include/change-iterator.hh
lily/include/chord-tremolo-iterator.hh
lily/include/folded-repeat-iterator.hh
lily/include/grace-iterator.hh
lily/include/interpretation-context-handle.hh
lily/include/lyric-combine-music-iterator.hh
lily/include/music-iterator.hh
lily/include/music-wrapper-iterator.hh
lily/include/part-combine-music-iterator.hh
lily/include/property-iterator.hh
lily/include/request-chord-iterator.hh
lily/include/sequential-music-iterator.hh
lily/include/simple-music-iterator.hh
lily/include/simultaneous-music-iterator.hh
lily/include/time-scaled-music-iterator.hh
lily/include/unfolded-repeat-iterator.hh
lily/music-iterator.cc
lily/music-wrapper-iterator.cc
lily/part-combine-music-iterator.cc
lily/request-chord-iterator.cc
lily/sequential-music-iterator.cc
lily/simple-music-iterator.cc

diff --git a/CHANGES b/CHANGES
index 78430277dbb9c15f2a0644b0000862ae548a1139..d2632bd90b90dbb33602f3fc81a4c6d9e4fdf1fc 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,8 @@
+1.3.85.jcn4
+===========
+
+* Added clone () to music iterators, so that we can do next () on a copy.
+
 1.3.85.jcn3
 ===========
 
diff --git a/VERSION b/VERSION
index 87ad523c6f7935390091b5ae31e4ad95d417b616..606e08f2f9cff270ff6c9632353cc8fa6c48031f 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -2,7 +2,7 @@ PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=3
 PATCH_LEVEL=85
-MY_PATCH_LEVEL=jcn3
+MY_PATCH_LEVEL=jcn4
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
 # released version.
index ff55700bc10bf1f4530687c2541649c19ce70a38..aa03806c27f5321325bb7b123865e41f96e66a18 100644 (file)
 #include "music-wrapper-iterator.hh"
 #include "direction.hh"
 
-class Auto_change_iterator  : public Music_wrapper_iterator
+class Auto_change_iterator : public Music_wrapper_iterator
 {
-  Direction where_dir_;
+public:
+  VIRTUAL_COPY_CONS (Music_iterator);
+  Auto_change_iterator ();
 
-  void change_to (Music_iterator* , String, String);
 protected:
   virtual void do_process_and_next (Moment);  
-public:
-  Auto_change_iterator ();
+
+private:
+  Direction where_dir_;
+  void change_to (Music_iterator* , String, String);
 };
 
 #endif /* AUTO_CHANGE_ITERATOR_HH */
index 4ab9d99e4a8851199fe51c9dca4a7ca32d8b15b1..a43c4da5f2d1d73d32632820403299c17d8ac1dd 100644 (file)
 
 class Change_iterator : public Music_iterator
 {
-  void  error (String);
-
-protected:
-  virtual void do_process_and_next (Moment);
-
 public:
+  VIRTUAL_COPY_CONS (Music_iterator);
   /*
     CTOR is public
    */
+
+protected:
+  virtual void do_process_and_next (Moment);
+
+private:
+  void  error (String);
 };
 
 #endif
index 9cd632985da7c724a5cce2adb25f4fe0178db855..6d25034d6d22b74e7c5801d174da5df6972b328e 100644 (file)
 
 class Chord_tremolo_iterator : public Music_iterator
 {
-  Moment factor_;
-  Music_iterator * child_iter_p_;
-
 public:
+  VIRTUAL_COPY_CONS (Music_iterator);
   Chord_tremolo_iterator ();
 
 protected:
@@ -28,6 +26,10 @@ protected:
   virtual void do_print () const;
   virtual void do_process_and_next (Moment) ;
   virtual Music_iterator *try_music_in_children (Music *) const;
+
+private:
+  Moment factor_;
+  Music_iterator * child_iter_p_;
 };
 
 
index e26bac173e0c862c758540efd04e85e003fe2718..1b36df304ace130b05a3a227518738bffff8bce2 100644 (file)
  */
 class Folded_repeat_iterator : public Music_iterator
 {
-  Music_iterator * main_iter_p_;
-  Music_iterator * alternative_iter_p_;
-  int count_;
-  Moment main_length_mom_;
 public:
+  VIRTUAL_COPY_CONS (Music_iterator);
   Folded_repeat_iterator ();
   ~Folded_repeat_iterator ();
   
@@ -36,6 +33,12 @@ protected:
   
   virtual void do_process_and_next (Moment);
   virtual Music_iterator *try_music_in_children (Music *) const;
+
+private:
+  Music_iterator * main_iter_p_;
+  Music_iterator * alternative_iter_p_;
+  int count_;
+  Moment main_length_mom_;
 };
 #endif /* FOLDED_REPEAT_ITERATOR_HH */
 
index 9743d7ab901ddd2f5826c101e60ddae5d53c7fe8..c253d078e826d0bcaebe6fa0a7d74047ec86fe78 100644 (file)
@@ -15,6 +15,7 @@
 class Grace_iterator : public Music_wrapper_iterator
 {
 public:
+  VIRTUAL_COPY_CONS (Music_iterator);
   ~Grace_iterator ();
   virtual void construct_children () ;
   virtual void do_process_and_next (Moment);
index a8adf33cb4a1057bdc405ebf451db43dcef95b98..fc15f7a19db3efc765d05490e7f1db62928a7c34 100644 (file)
@@ -14,6 +14,7 @@
 class Interpretation_context_handle
 {
   Translator_group * report_to_l_;
+public:
   void down ();
   void up (Translator_group*);
 public:
index 226499611007851125a2d1a1e224bd1209331c2f..31a47b489655b0a072531619add3994e82eaefdb 100644 (file)
 
 class Lyric_combine_music_iterator : public Music_iterator
 {
-  Music_iterator * music_iter_p_;
-  Music_iterator * lyric_iter_p_;
-  
+public:
+  VIRTUAL_COPY_CONS (Music_iterator);
+  Lyric_combine_music_iterator ();
+
 protected:
   virtual void construct_children ();
   virtual Moment next_moment () const;
@@ -27,8 +28,10 @@ protected:
   virtual bool ok () const;
   virtual void do_print () const;
   virtual ~Lyric_combine_music_iterator ();
-public:
-  Lyric_combine_music_iterator ();
+
+private:
+  Music_iterator * music_iter_p_;
+  Music_iterator * lyric_iter_p_;
 };
 #endif /* LYRIC_COMBINE_MUSIC_ITERATOR_HH */
 
index bb6d36f80ef1c222d3fea446df9680ee9259ca08..81b1bfe0bc4879aca4a47645e121a05185d54d2c 100644 (file)
   The state of an iterator would be the intersection of the particular music 
   construct with one point in musical time.
  */
-class Music_iterator {
+class Music_iterator
+{
+  //private:
+public:
   Interpretation_context_handle handle_;
 
 protected:
@@ -58,6 +61,12 @@ protected:
   virtual Music_iterator* try_music_in_children (Music  *) const;
   
 public:
+  VIRTUAL_COPY_CONS (Music_iterator);
+
+  Music_iterator();
+  Music_iterator (Music_iterator const&);
+  virtual ~Music_iterator();
+
 
   /**
      Do the reporting.  Will try MUSIC_L_ in its own translator first,
@@ -78,8 +87,6 @@ public:
   static Music_iterator* static_get_iterator_p (Music * mus);
   void init_translator (Music  *, Translator_group *); 
 
-  Music_iterator();
-    
   ///  Find the next interesting point in time.
   virtual Moment next_moment() const;
 
@@ -90,9 +97,6 @@ public:
   virtual Music* get_music ();
   virtual bool next ();
 
-  virtual ~Music_iterator();
-
-
   ///Report all musical information that occurs between now and UNTIL
   void process_and_next (Moment until);
 
index 1429f00be6c9867aaf2358e972ffc03c194daf1e..1d97eb9067f1ea119c21da649651db9e9322f9c1 100644 (file)
@@ -21,7 +21,9 @@
 class Music_wrapper_iterator : public Music_iterator
 {
 public:
+  VIRTUAL_COPY_CONS (Music_iterator);
   Music_wrapper_iterator ();
+  Music_wrapper_iterator (Music_wrapper_iterator const&);
   ~Music_wrapper_iterator ();
 
   virtual void construct_children  () ;
index 7b38e0f033a8d936e2b117d1bc67481e91a7e800..caf7b4dcd7ac4f2250c442f3b5508ae127661c59 100644 (file)
@@ -15,6 +15,7 @@
 class Part_combine_music_iterator : public Music_iterator
 {
 public:
+  VIRTUAL_COPY_CONS (Music_iterator);
   Part_combine_music_iterator ();
 
 protected:
index 7591fce27748d4e7e510af6bf88ec8a510031741..66c7143656c65092f9260591c7efe1b556a24484 100644 (file)
@@ -21,6 +21,7 @@
 class Property_iterator : public Music_iterator
 {
 public:
+  VIRTUAL_COPY_CONS (Music_iterator);
   // construction  
 protected:
   virtual void do_process_and_next (Moment);
@@ -28,12 +29,16 @@ protected:
 
 class Push_property_iterator : public Music_iterator
 {
+public:
+  VIRTUAL_COPY_CONS (Music_iterator);
 protected:
   virtual void do_process_and_next (Moment);
 };
 
 class Pop_property_iterator : public Music_iterator
 {
+public:
+  VIRTUAL_COPY_CONS (Music_iterator);
 protected:
   virtual void do_process_and_next (Moment);
 };
index ec88c28e324d010f6b4e9f4a55a4443b3601e3e2..a4794f100b02d92f674668406148b605989b6cfc 100644 (file)
@@ -25,7 +25,9 @@ class Request_chord_iterator : public Music_iterator
   bool last_b_;
 
 public:
+  VIRTUAL_COPY_CONS (Music_iterator);
   Request_chord_iterator ();
+  Request_chord_iterator (Request_chord_iterator const&);
   
   virtual bool next ();
   virtual bool ok () const;
index 17e7aede8bab9b8e2302ad9df18b5eef6858f921..1a2dc730e7221c233a6857a8eb952c6fff75f898 100644 (file)
@@ -18,7 +18,9 @@
 class Sequential_music_iterator :  public Music_iterator
 {
 public:
+  VIRTUAL_COPY_CONS (Music_iterator);
   Sequential_music_iterator ();
+  Sequential_music_iterator (Sequential_music_iterator const&);
   virtual ~Sequential_music_iterator ();
 
   virtual void construct_children ();
index 00e9f66d4f237fb25903ae153288407843df97db..1fa5bb7d16dfc906501527536858434cfcbdc6c8 100644 (file)
 
 class Simple_music_iterator : public Music_iterator
 {
+public:
+  VIRTUAL_COPY_CONS (Music_iterator);
+  Simple_music_iterator ();
+  Simple_music_iterator (Simple_music_iterator const &);
 protected:
   virtual void do_process_and_next (Moment );
 };
index 6c4008a95b619682a50f72b28dab0fde8ba7a28d..7ab54be77c343e594e9c1a9f6aaa93eb32ecd9da 100644 (file)
@@ -15,6 +15,7 @@
 class Simultaneous_music_iterator : public Music_iterator
 {
 public:
+  VIRTUAL_COPY_CONS (Music_iterator);
 
   /// make a new context for every child.
   bool separate_contexts_b_;
index 28ab473db01fd65a2f9514a1c0fa43979e952dfc..abdd2ac6a646923207c9644456b795255fe845f9 100644 (file)
@@ -15,6 +15,7 @@
 class Time_scaled_music_iterator : public Music_wrapper_iterator
 {
 public:  
+  VIRTUAL_COPY_CONS (Music_iterator);
   // construction
 protected:
   virtual void do_process_and_next (Moment);
index 97a649a10a54f3e025050a163f4f4a651061df97..e52361b4737937ce2b68d20be9484d7b063c6531 100644 (file)
@@ -19,6 +19,7 @@
 class Unfolded_repeat_iterator : public Music_iterator
 {
 public:
+  VIRTUAL_COPY_CONS (Music_iterator);
   /**
      How often have we done the body (assuming bodies are interspersed.)?
    */
index 3abd8cecb3636d0e3aa1cf4a3d99d6a27e6209b7..e0978106daef7787a98aae857d8b91b1524c6380 100644 (file)
 #include "output-property.hh"
 #include "chord-tremolo-iterator.hh"
 
+Music_iterator::Music_iterator ()
+{
+  first_b_ = true;
+}
+
+Music_iterator::Music_iterator (Music_iterator const& src)
+{
+  first_b_ = src.first_b_;
+  handle_ = src.handle_;
+  music_l_ = src.music_l_;
+}
+
+Music_iterator::~Music_iterator()
+{
+}
+
 void
 Music_iterator::do_print() const
 {
@@ -94,10 +110,6 @@ Music_iterator::construct_children()
 {
 }
 
-Music_iterator::~Music_iterator()
-{
-}
-
 Moment
 Music_iterator::next_moment() const
 {
@@ -217,11 +229,6 @@ Music_iterator::get_iterator_p (Music *m) const
   return p;
 }
 
-Music_iterator::Music_iterator()
-{
-  first_b_ = true;
-}
-
 Music_iterator*
 Music_iterator::try_music (Music  *m) const
 {
index 43fe4b495c97ada4d73d6b5bcc9c98c787588294..4aa13bd9a24fad357a3a1d7fa9145d27312063b8 100644 (file)
@@ -16,7 +16,16 @@ Music_wrapper_iterator::Music_wrapper_iterator ()
   child_iter_p_ =0;
 }
 
+Music_wrapper_iterator::Music_wrapper_iterator (Music_wrapper_iterator const &src)
+  : Music_iterator (src)
+{
+  child_iter_p_ = src.child_iter_p_;
+}
 
+Music_wrapper_iterator::~Music_wrapper_iterator ()
+{
+  delete child_iter_p_;
+}
 
 void
 Music_wrapper_iterator::do_print () const
@@ -31,12 +40,6 @@ Music_wrapper_iterator::construct_children ()
     get_iterator_p (dynamic_cast<Music_wrapper const*> (music_l_)->element ());
 }
 
-Music_wrapper_iterator::~Music_wrapper_iterator ()
-{
-  delete child_iter_p_;
-}
-
-
 bool
 Music_wrapper_iterator::ok () const
 {
index 9c924c12842a8fafc366c93e330e416f06b24d75..ab2ec18b9a0601852f4f84d011ae1fdea063af15 100644 (file)
@@ -118,197 +118,11 @@ Part_combine_music_iterator::change_to (Music_iterator *it, String to_type,
     error (_f ("none of these in my family: `%s'", to_id.ch_C ()));
 }
 
-#if 0
-Pitch_interrogate_req* first_spanish_inquisition; // nobody expects it
-Pitch_interrogate_req* second_spanish_inquisition; // won't strike twice
-
-Rhythm_interrogate_req* first_rhythmic_inquisition;
-Rhythm_interrogate_req* second_rhythmic_inquisition;
-
-void
-Part_combine_music_iterator::do_process_and_next (Moment m)
-{
-  Part_combine_music const * p = dynamic_cast<Part_combine_music const* > (music_l_);
-
-  now_ = next_moment ();
-
-  /*
-    Hmm, shouldn't we check per iterator if next_moment < m?
-  */
-  if (first_iter_p_->ok ())
-    first_iter_p_->process_and_next (m);
-  
-  if (second_iter_p_->ok ())
-    second_iter_p_->process_and_next (m);
-
-  Music_iterator::do_process_and_next (m);
-
-  /*
-    TODO:
-
-    * Maybe we need a Skip_engraver?
-
-    (check): can this all be handled now?
-    
-    Maybe different modes exist?
-
-    * Wind instruments (Flute I/II)
-    * Hymnals:  
-
-
-    Rules for Hymnals/SATB (John Henckel <henckel@iname.com>):
-
-    1. if S and A differ by less than a third, the stems should be up/down.
-    2. else if S and A have different values, the stems should be up/down.
-    3. else if A sings "la" or higher, both S and A stems should be down.
-    4. else both stems should be up
-
-    * This may get really tricky: combining voices/staffs: string instruments
-
-    */
-  
-  if (!first_spanish_inquisition)
-    first_spanish_inquisition = new Pitch_interrogate_req;
-  first_iter_p_->try_music (first_spanish_inquisition);
-  
-  if (!second_spanish_inquisition)
-    second_spanish_inquisition = new Pitch_interrogate_req;
-  second_iter_p_->try_music (second_spanish_inquisition);
-
-  Array<Musical_pitch>* first_pitches = &first_spanish_inquisition->pitch_arr_;
-  Array<Musical_pitch>* second_pitches = &second_spanish_inquisition->pitch_arr_;
-
-  if (!first_rhythmic_inquisition)
-    first_rhythmic_inquisition = new Rhythm_interrogate_req;
-  first_iter_p_->try_music (first_rhythmic_inquisition);
-
-  if (!second_rhythmic_inquisition)
-    second_rhythmic_inquisition = new Rhythm_interrogate_req;
-  second_iter_p_->try_music (second_rhythmic_inquisition);
-
-  Array<Duration>* first_durations = &first_rhythmic_inquisition->duration_arr_;
-  Array<Duration>* second_durations = &second_rhythmic_inquisition->duration_arr_;
-
-  SCM interval = SCM_BOOL_F;
-  if (first_pitches->size () && second_pitches->size ())
-    {
-      first_pitches->sort (Musical_pitch::compare);
-      second_pitches->sort (Musical_pitch::compare);
-      interval = gh_int2scm (first_pitches->top ().steps ()
-                            - (*second_pitches)[0].steps ());
-    }
-  if (first_durations->size ())
-    {
-      first_durations->sort (Duration::compare);
-      Moment new_until = now_ + first_durations->top ().length_mom ();
-      if (new_until > first_until_)
-       first_until_ = new_until;
-    }
-
-    if (second_durations->size ())
-    {
-      second_durations->sort (Duration::compare);
-      Moment new_until = now_ + second_durations->top ().length_mom ();
-      if (new_until > second_until_)
-       second_until_ = new_until;
-    }
-
-  Translator_group * fir = first_iter_p_->report_to_l ();
-  Translator_group * sir = second_iter_p_->report_to_l ();
-
-  bool solo_b = (first_pitches->empty () != second_pitches->empty ())
-    && !(first_until_ > now_ && second_until_ > now_);
-
-  bool unirhythm_b = !solo_b && !compare (first_durations, second_durations);
-  bool unison_b = unirhythm_b && !first_pitches->empty ()
-    &&!compare (first_pitches, second_pitches);
-  bool unisilence_b = unirhythm_b && first_pitches->empty ();
-
-  Translator_group * fd = fir->find_create_translator_l (p->what_str_, "one");
-  Translator_group * sd = sir->find_create_translator_l (p->what_str_, "two");
-
-  bool split_interval_b = false;
-  if (gh_number_p (interval))
-    {
-      SCM s = fd->get_property (ly_symbol2scm ("splitInterval"));
-      int i = gh_scm2int (interval);
-      if (gh_pair_p (s)
-         && gh_number_p (gh_car (s))
-         && gh_number_p (gh_cdr (s))
-         && i >= gh_scm2int (gh_car (s))
-         && i <= gh_scm2int (gh_cdr (s)))
-       split_interval_b = true;
-    }
-
-  /*
-    Hmm, maybe we should set/check combined_b_ against
-
-       first_iter_p_->report_to_l () == second_iter_p_->report_to_l ()
-
-   ? 
-   */
-
-  String to_id =  combined_b_ ? "one" : "two";
-  if ((!unirhythm_b && combined_b_)
-      || (split_interval_b && combined_b_)
-      || (solo_b && combined_b_)
-      /*|| (unisilence_b && combined_b_) */
-      || ((unirhythm_b || unison_b || unisilence_b)
-         && !combined_b_ && !split_interval_b && !solo_b))
-    {
-      combined_b_ = !combined_b_;
-      to_id =  combined_b_ ? "one" : "two";
-      change_to (second_iter_p_, p->what_str_, to_id);
-    }
-
-  if (!combined_b_)
-    sir = second_iter_p_->report_to_l ();
-
-  SCM b = unirhythm_b ? SCM_BOOL_T : SCM_BOOL_F;
-  fd->set_property ("unirhythm", b);
-  sd->set_property ("unirhythm", b);
-
-  b = split_interval_b ? SCM_BOOL_T : SCM_BOOL_F;
-  fd->set_property ("split-interval", b);
-  sd->set_property ("split-interval",  b);
-
-  b = unisilence_b ? SCM_BOOL_T : SCM_BOOL_F;
-  fd->set_property ("unisilence", b);
-  sd->set_property ("unisilence", b);
-
-  b = unison_b ? SCM_BOOL_T : SCM_BOOL_F;
-  fd->set_property ("unison", b);
-  sd->set_property ("unison", b);
-
-  b = solo_b  ? SCM_BOOL_T : SCM_BOOL_F;
-  if (first_pitches->size ())
-    {
-      fd->set_property ("solo", b);
-      sd->set_property ("solo", SCM_BOOL_F);
-    }
-
-  if (second_pitches->size ())
-    {
-      fd->set_property ("solo", SCM_BOOL_F);
-      sd->set_property ("solo", b);
-    }
-
-  first_pitches->clear ();
-  second_pitches->clear ();
-  first_durations->clear ();
-  second_durations->clear ();
-}
-#else
 void
 Part_combine_music_iterator::do_process_and_next (Moment m)
 {
   Part_combine_music const * p = dynamic_cast<Part_combine_music const* > (music_l_);
 
-  /*
-    Huh?
-   */
-  //  now_ = next_moment ();
-
   /*
     TODO:
 
@@ -333,14 +147,32 @@ Part_combine_music_iterator::do_process_and_next (Moment m)
 
    */
   
-#if 1
+  /*
+    Huh?
+   */
+  now_ = next_moment ();
   Music *first_music;
-  Music *second_music;
-  if (first_iter_p_->ok ())
-    first_music = first_iter_p_->get_music ();
+  Music_iterator* first_next = first_iter_p_->clone ();
+  //first_next->next ();
+  if (first_next->ok ())
+    first_music = first_next->get_music ();
+#if 0
+  delete first_next;
+#else
+  //URGURURGU
+  first_next->handle_.down ();
+#endif
   
-  if (second_iter_p_->ok ())
-    second_music = second_iter_p_->get_music ();
+  Music *second_music;
+  Music_iterator* second_next = second_iter_p_->clone ();
+  //second_next->next ();
+  if (second_next->ok ())
+    second_music = second_next->get_music ();
+#if 0
+  delete second_next;
+#else
+  //URGURURGU
+  second_next->handle_.down ();
 #endif
 
   Array<Musical_pitch> first_pitches;
@@ -485,7 +317,6 @@ Part_combine_music_iterator::do_process_and_next (Moment m)
   Music_iterator::do_process_and_next (m);
   now_ = next_moment ();
 }
-#endif
 
 Music_iterator*
 Part_combine_music_iterator::try_music_in_children (Music *m) const
index a1d711ef9c95d8ca4bc3aa0f753ad08f89df3f5a..61e38b309492ed69953456fe794f635a9936e136 100644 (file)
 #include "music-list.hh"
 #include "request.hh"
 
+Request_chord_iterator::Request_chord_iterator ()
+{
+  last_b_ = false;
+}
 
+Request_chord_iterator::Request_chord_iterator (Request_chord_iterator const &src)
+  : Music_iterator (src)
+{
+  last_b_ = src.last_b_;
+  elt_length_mom_ = src.elt_length_mom_;
+}
 
 void
 Request_chord_iterator::construct_children()
@@ -27,12 +37,6 @@ Request_chord_iterator::elt_l () const
   return (Request_chord*) music_l_;
 }
 
-Request_chord_iterator::Request_chord_iterator ()
-{
-  last_b_ = false;
-}
-
-
 bool
 Request_chord_iterator::ok() const
 {
index 16cd0e5e599e582748dab1fd37e410cc5a9cdc93..3e89e02522bf74d0181c67eb2b158e89b31dcda3 100644 (file)
 #include "music-list.hh"
 #include "request-chord-iterator.hh"
 
+Sequential_music_iterator::Sequential_music_iterator ()
+{
+  cursor_ = 0;
+  here_mom_ = 0;
+  iter_p_ =0;
+}
 
-void
-Sequential_music_iterator::do_print() const
+Sequential_music_iterator::Sequential_music_iterator (Sequential_music_iterator const &src)
+  : Music_iterator (src)
+{
+  cursor_ = src.cursor_;
+  here_mom_ = src.here_mom_;
+  iter_p_ = src.iter_p_;
+}
+
+Sequential_music_iterator::~Sequential_music_iterator()
 {
   if (iter_p_)
-    iter_p_->print();
+    {
+      if (iter_p_->ok ())
+       music_l_->origin ()->warning (_ ("Must stop before this music ends"));
+      delete iter_p_;
+      iter_p_ = 0;
+    }
 }
 
-Sequential_music_iterator::Sequential_music_iterator ()
+void
+Sequential_music_iterator::do_print() const
 {
-  cursor_ = 0;
-  here_mom_ = 0;
-  iter_p_ =0;
+  if (iter_p_)
+    iter_p_->print();
 }
 
 void
@@ -75,17 +93,6 @@ Sequential_music_iterator::set_sequential_music_translator()
     set_translator (child_report);
 }
 
-Sequential_music_iterator::~Sequential_music_iterator()
-{
-  if (iter_p_)
-    {
-      if (iter_p_->ok ())
-       music_l_->origin ()->warning (_ ("Must stop before this music ends"));
-      delete iter_p_;
-      iter_p_ = 0;
-    }
-}
-
 Music*
 Sequential_music_iterator::get_music ()
 {
index 4c925f3c9100c55e666a45f3003672c6ef4f490f..d19d615a22b67ea7dd4e225682e208bcb6d72037 100644 (file)
 #include "music.hh"
 #include "input.hh"
 
+Simple_music_iterator::Simple_music_iterator ()
+  : Music_iterator ()
+{
+}
+
+Simple_music_iterator::Simple_music_iterator (Simple_music_iterator const &src)
+  : Music_iterator (src)
+{
+}
 
 void
 Simple_music_iterator::do_process_and_next (Moment m)