-bool
-Music_iterator::ok() const
-{
- return first_b_;
-}
-
-Music_iterator*
-Music_iterator::static_get_iterator_p (Music *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);
- else if (m->is_type_b (Change_translator::static_name ()))
- p = new Change_iterator((Change_translator*) m);
- else if (m->is_type_b (Music_wrapper::static_name ()))
- p = new Music_wrapper_iterator ((Music_wrapper *)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_);
- p->set_translator (a);
- }
+/****************************************************************/
+
+IMPLEMENT_TYPE_P (Music_iterator, "ly:iterator?");
+IMPLEMENT_SMOBS (Music_iterator);
+IMPLEMENT_DEFAULT_EQUAL_P (Music_iterator);
+
+SCM
+Music_iterator::mark_smob (SCM smob)
+{
+ Music_iterator *mus = (Music_iterator *)SCM_CELL_WORD_1 (smob);
+
+ mus->derived_mark ();
+ /*
+ Careful with GC, although we intend the following as pointers
+ only, we _must_ mark them.
+ */
+ if (mus->get_outlet ())
+ scm_gc_mark (mus->get_outlet ()->self_scm ());
+ if (mus->music_)
+ scm_gc_mark (mus->music_->self_scm ());
+
+ return SCM_EOL;
+}
+
+int
+Music_iterator::print_smob (SCM sm, SCM port, scm_print_state*)
+{
+ char s[1000];
+
+ Music_iterator *iter = unsmob_iterator (sm);
+ sprintf (s, "#<%s>", iter->class_name ());
+ scm_puts (s, port);
+ return 1;
+}
+
+void
+Music_iterator::derived_mark ()const
+{
+}