From: hanwen <hanwen>
Date: Wed, 9 Mar 2005 00:13:59 +0000 (+0000)
Subject: * lily/include/group-interface.hh (extract_grob_array): rename
X-Git-Tag: release/2.5.23~397
X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=873bbee396e5bb4d02e8b7434e5faafe14a5e7c0;p=lilypond.git

* lily/include/group-interface.hh (extract_grob_array): rename
from Pointer_group_interface__extract_grobs
---

diff --git a/ChangeLog b/ChangeLog
index 587ba152e7..da0021e5a8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2005-03-09  Han-Wen Nienhuys  <hanwen@xs4all.nl>
 
+	* lily/include/group-interface.hh (extract_grob_array): rename
+	from Pointer_group_interface__extract_grobs
+
 	* input/regression/ledger-line-minimum.ly (texidoc): new file.
 
 	* lily/ledger-line-spanner.cc (set_spacing_rods): new
diff --git a/lily/accidental-placement.cc b/lily/accidental-placement.cc
index 2fae8292a3..91e0de193b 100644
--- a/lily/accidental-placement.cc
+++ b/lily/accidental-placement.cc
@@ -312,7 +312,7 @@ Accidental_placement::position_accidentals (Grob * me)
       if (Note_collision_interface::has_interface (c))
 	{
 	  Link_array<Grob> gs =
-	    Pointer_group_interface__extract_grobs (c, (Grob*)0, "elements");
+	    extract_grob_array (c, ly_symbol2scm ("elements"));
       
 	  note_cols.concat (gs);
 	}
@@ -320,10 +320,7 @@ Accidental_placement::position_accidentals (Grob * me)
   
   for (int i = note_cols.size () ; i--;)
     {
-      heads.concat (Pointer_group_interface__extract_grobs (note_cols[i],
-							    (Grob*)0,
-							    "note-heads"));
-      
+      heads.concat (extract_grob_array (note_cols[i], ly_symbol2scm ("note-heads")));
     }
   heads.default_sort ();
   heads.uniq ();
diff --git a/lily/align-interface.cc b/lily/align-interface.cc
index 0486f09d3a..89c1991077 100644
--- a/lily/align-interface.cc
+++ b/lily/align-interface.cc
@@ -58,7 +58,7 @@ Align_interface::align_to_fixed_distance (Grob *me , Axis a)
   Real dy = robust_scm2double (me->get_property ("forced-distance"), 0.0);
   
   Link_array<Grob> elems
-    = Pointer_group_interface__extract_grobs (me, (Grob*) 0, "elements");
+    = extract_grob_array (me, ly_symbol2scm ("elements"));
 
   Real where_f = 0;
 
@@ -134,7 +134,7 @@ Align_interface::align_elements_to_extents (Grob * me, Axis a)
 
   Link_array<Grob> elems;
   Link_array<Grob> all_grobs
-    = Pointer_group_interface__extract_grobs (me, (Grob*) 0, "elements");
+    = extract_grob_array (me, ly_symbol2scm ("elements"));
   for (int i = 0; i < all_grobs.size (); i++) 
     {
       Interval y = all_grobs[i]->extent (me, a);
diff --git a/lily/ambitus.cc b/lily/ambitus.cc
index 7f8cf43fcf..43c9f0a01b 100644
--- a/lily/ambitus.cc
+++ b/lily/ambitus.cc
@@ -25,7 +25,7 @@ Ambitus::print (SCM smob)
   Stencil stencil;
 
   // join heads
-  Link_array<Grob> heads (Pointer_group_interface__extract_grobs (me, (Grob*)0, "note-heads"));
+  Link_array<Grob> heads (extract_grob_array (me, ly_symbol2scm ("note-heads")));
   if (to_boolean (me->get_property ("join-heads"))
       && heads.size() > 1)
     {
diff --git a/lily/beam-concave.cc b/lily/beam-concave.cc
index ea040131cb..0f2cb2fb9c 100644
--- a/lily/beam-concave.cc
+++ b/lily/beam-concave.cc
@@ -89,7 +89,7 @@ Beam::check_concave (SCM smob)
   Grob *me = unsmob_grob (smob);
 
   Link_array<Grob> stems = 
-    Pointer_group_interface__extract_grobs (me, (Grob*) 0, "stems");
+    extract_grob_array (me, ly_symbol2scm ("stems"));
 
   if (is_knee (me))
     return SCM_UNSPECIFIED;
diff --git a/lily/beam-quanting.cc b/lily/beam-quanting.cc
index 54cee073b9..a3197932f6 100644
--- a/lily/beam-quanting.cc
+++ b/lily/beam-quanting.cc
@@ -138,7 +138,7 @@ Beam::quanting (SCM smob)
     precompute for every stem 2 factors.
    */
   Link_array<Grob> stems =
-    Pointer_group_interface__extract_grobs (me, (Grob*)0, "stems");
+    extract_grob_array (me, ly_symbol2scm ("stems"));
   Array<Stem_info> stem_infos;
   Array<Real> base_lengths;
   Array<Real> stem_xposns;  
diff --git a/lily/beam.cc b/lily/beam.cc
index 33672e4608..3880f691bd 100644
--- a/lily/beam.cc
+++ b/lily/beam.cc
@@ -229,7 +229,7 @@ void
 Beam::connect_beams (Grob *me)
 {
   Link_array<Grob> stems =
-    Pointer_group_interface__extract_grobs (me, (Grob*)0, "stems");
+    extract_grob_array (me, ly_symbol2scm ("stems"));
 
   Slice last_int;
   last_int.set_empty ();
@@ -309,7 +309,7 @@ Beam::print (SCM grob)
   position_beam (me);
   
   Link_array<Grob> stems =
-    Pointer_group_interface__extract_grobs (me, (Grob*)0, "stems");
+    extract_grob_array (me, ly_symbol2scm ("stems"));
   Grob* xcommon = common_refpoint_of_array (stems, me, X_AXIS);
 
   xcommon = me->get_bound (LEFT)->common_refpoint (xcommon, X_AXIS);
@@ -545,7 +545,7 @@ Beam::get_default_dir (Grob *me)
   Direction d = DOWN;
 
   Link_array<Grob> stems =
-	Pointer_group_interface__extract_grobs (me, (Grob*)0, "stems");
+	extract_grob_array (me, ly_symbol2scm ("stems"));
 
   for (int i = 0; i < stems.size (); i++)
     do {
@@ -584,7 +584,7 @@ void
 Beam::set_stem_directions (Grob *me, Direction d)
 {
   Link_array<Grob> stems
-    = Pointer_group_interface__extract_grobs (me, (Grob*) 0, "stems");
+    = extract_grob_array (me, ly_symbol2scm ("stems"));
   
   for (int i = 0; i <stems.size (); i++)
     {
@@ -614,7 +614,7 @@ Beam::consider_auto_knees (Grob* me)
   gaps.set_full ();
 
   Link_array<Grob> stems =
-    Pointer_group_interface__extract_grobs (me, (Grob*) 0, "stems");
+    extract_grob_array (me, ly_symbol2scm ("stems"));
   
   Grob *common = common_refpoint_of_array (stems, me,  Y_AXIS);
   Real staff_space = Staff_symbol_referencer::staff_space (me);
@@ -828,7 +828,7 @@ Beam::least_squares (SCM smob)
 
   Array<Real> x_posns ;
   Link_array<Grob> stems =
-    Pointer_group_interface__extract_grobs (me, (Grob*)0, "stems");
+    extract_grob_array (me, ly_symbol2scm ("stems"));
   Grob *commonx = common_refpoint_of_array (stems, me, X_AXIS);
   Grob *commony = common_refpoint_of_array (stems, me, Y_AXIS);  
 
@@ -941,7 +941,7 @@ Beam::shift_region_to_valid (SCM grob)
    */
   Array<Real> x_posns ;
   Link_array<Grob> stems =
-    Pointer_group_interface__extract_grobs (me, (Grob*)0, "stems");
+    extract_grob_array (me, ly_symbol2scm ("stems"));
   Grob *commonx = common_refpoint_of_array (stems, me, X_AXIS);
   Grob *commony = common_refpoint_of_array (stems, me, Y_AXIS);  
 
@@ -1145,7 +1145,7 @@ void
 Beam::set_stem_lengths (Grob *me)
 {
   Link_array<Grob> stems =
-    Pointer_group_interface__extract_grobs (me, (Grob*)0, "stems");
+    extract_grob_array (me, ly_symbol2scm ("stems"));
 
   if (!stems.size ())
     return;
@@ -1200,7 +1200,7 @@ void
 Beam::set_beaming (Grob *me, Beaming_info_list *beaming)
 {
   Link_array<Grob> stems =
-    Pointer_group_interface__extract_grobs (me, (Grob *)0, "stems");
+    extract_grob_array (me, ly_symbol2scm ("stems"));
   
   Direction d = LEFT;
   for (int i = 0; i  < stems.size (); i++)
@@ -1238,7 +1238,7 @@ int
 Beam::forced_stem_count (Grob *me) 
 {
   Link_array<Grob>stems = 
-    Pointer_group_interface__extract_grobs (me, (Grob*) 0, "stems");
+    extract_grob_array (me, ly_symbol2scm ("stems"));
   int f = 0;
   for (int i = 0; i < stems.size (); i++)
     {
@@ -1263,7 +1263,7 @@ int
 Beam::visible_stem_count (Grob *me) 
 {
   Link_array<Grob>stems = 
-    Pointer_group_interface__extract_grobs (me, (Grob*) 0, "stems");
+    extract_grob_array (me, ly_symbol2scm ("stems"));
   int c = 0;
   for (int i = stems.size (); i--;)
     {
@@ -1277,7 +1277,7 @@ Grob*
 Beam::first_visible_stem (Grob *me) 
 {
   Link_array<Grob>stems = 
-    Pointer_group_interface__extract_grobs (me, (Grob*) 0, "stems");
+    extract_grob_array (me, ly_symbol2scm ("stems"));
   
   for (int i = 0; i < stems.size (); i++)
     {
@@ -1291,7 +1291,7 @@ Grob*
 Beam::last_visible_stem (Grob *me) 
 {
   Link_array<Grob>stems = 
-    Pointer_group_interface__extract_grobs (me, (Grob*) 0, "stems");
+    extract_grob_array (me, ly_symbol2scm ("stems"));
   for (int i = stems.size (); i--;)
     {
       if (!Stem::is_invisible (stems[i]))
@@ -1419,7 +1419,7 @@ int
 Beam::get_direction_beam_count (Grob *me, Direction d )
 {
   Link_array<Grob>stems = 
-    Pointer_group_interface__extract_grobs (me, (Grob*) 0, "stems");
+    extract_grob_array (me, ly_symbol2scm ("stems"));
   int bc = 0;
   
   for (int i = stems.size (); i--;)
diff --git a/lily/break-align-interface.cc b/lily/break-align-interface.cc
index fec7946752..36966bcd13 100644
--- a/lily/break-align-interface.cc
+++ b/lily/break-align-interface.cc
@@ -76,8 +76,7 @@ Break_align_interface::ordered_elements (Grob *grob)
   SCM order_vec = me->get_property ("break-align-orders");
   if (!scm_is_vector (order_vec)
       || scm_c_vector_length (order_vec) < 3)
-    return  Pointer_group_interface__extract_grobs (me, (Grob*)0,
-						    "elements");
+    return  extract_grob_array (me, ly_symbol2scm ("elements"));
   SCM order = scm_vector_ref (order_vec,
 			      scm_int2num (me->break_status_dir () + 1));
 
diff --git a/lily/dot-column.cc b/lily/dot-column.cc
index f30c544b81..48e325e133 100644
--- a/lily/dot-column.cc
+++ b/lily/dot-column.cc
@@ -231,7 +231,7 @@ SCM
 Dot_column::do_shifts (Grob*me)
 {
   Link_array<Grob> dots =
-    Pointer_group_interface__extract_grobs (me, (Grob*)0, "dots");
+    extract_grob_array (me, ly_symbol2scm ("dots"));
 
   { /*
       Trigger note collision resolution first, since that may kill off
diff --git a/lily/group-interface.cc b/lily/group-interface.cc
index 95d388cc07..eccb1210da 100644
--- a/lily/group-interface.cc
+++ b/lily/group-interface.cc
@@ -8,6 +8,7 @@
  */
 
 #include "group-interface.hh"
+#include "item.hh"
 
 void
 Group_interface::add_thing (Grob*me, SCM sym, SCM thing)
@@ -28,3 +29,35 @@ Pointer_group_interface::add_grob (Grob*me, SCM name, Grob*p)
 {
   Group_interface::add_thing (me, name, p->self_scm ());
 }
+
+
+
+Link_array<Grob>
+extract_grob_array (Grob const *elt, SCM symbol)
+{
+  Link_array<Grob> arr;
+
+  for (SCM s = elt->internal_get_property (symbol); scm_is_pair (s); s = scm_cdr (s))
+    {
+      SCM e = scm_car (s);
+      arr.push (unsmob_grob (e));
+    }
+
+  arr.reverse ();
+  return arr;
+}
+
+
+Link_array<Item>
+extract_item_array (Grob const *elt, SCM symbol)
+{
+  Link_array<Item> arr;
+  for (SCM s = elt->internal_get_property (symbol); scm_is_pair (s); s = scm_cdr (s))
+    {
+      SCM e = scm_car (s);
+      arr.push (dynamic_cast<Item*> (unsmob_grob (e)));
+    }
+
+  arr.reverse ();
+  return arr;
+}
diff --git a/lily/horizontal-bracket.cc b/lily/horizontal-bracket.cc
index 98f905f766..1abe992ae4 100644
--- a/lily/horizontal-bracket.cc
+++ b/lily/horizontal-bracket.cc
@@ -36,7 +36,7 @@ Horizontal_bracket::print (SCM smob)
 {
   Grob * me = unsmob_grob (smob);
   Spanner *sp = dynamic_cast<Spanner*> (me);
-  Link_array<Grob> gs = Pointer_group_interface__extract_grobs (me, (Grob*)0, "columns");
+  Link_array<Grob> gs = extract_grob_array (me, ly_symbol2scm ("columns"));
 
   if (!gs.size ())
     {
diff --git a/lily/include/group-interface.hh b/lily/include/group-interface.hh
index 228f58b6a1..6471007845 100644
--- a/lily/include/group-interface.hh
+++ b/lily/include/group-interface.hh
@@ -32,21 +32,8 @@ public:
   static void add_grob (Grob*, SCM nm, Grob*e);
 };
 
-template<class T>
-Link_array<T>
-Pointer_group_interface__extract_grobs (Grob const *elt, T *, const char* name)
-{
-  Link_array<T> arr;
-
-  for (SCM s = elt->get_property (name); scm_is_pair (s); s = scm_cdr (s))
-    {
-      SCM e = scm_car (s);
-      arr.push (dynamic_cast<T*> (unsmob_grob (e)));
-    }
-
-  arr.reverse ();
-  return arr;
-}
+Link_array<Grob> extract_grob_array (Grob const *elt, SCM symbol);
+Link_array<Item> extract_item_array (Grob const *elt, SCM symbol);
 
 
 
diff --git a/lily/ledger-line-spanner.cc b/lily/ledger-line-spanner.cc
index 0af662952f..903a97bb1f 100644
--- a/lily/ledger-line-spanner.cc
+++ b/lily/ledger-line-spanner.cc
@@ -96,7 +96,7 @@ Ledger_line_spanner::set_spacing_rods (SCM smob)
   if (!staff)
     return SCM_EOL;
 
-  Link_array<Grob> heads (Pointer_group_interface__extract_grobs (me, (Grob*)0, "note-heads"));
+  Link_array<Grob> heads (extract_grob_array (me, ly_symbol2scm ("note-heads")));
   
   if (heads.is_empty ())
     return SCM_EOL;
@@ -200,7 +200,7 @@ SCM
 Ledger_line_spanner::print (SCM smob)
 {
   Spanner *me = dynamic_cast<Spanner*> (unsmob_grob (smob));
-  Link_array<Grob> heads (Pointer_group_interface__extract_grobs (me, (Grob*)0, "note-heads"));
+  Link_array<Grob> heads (extract_grob_array (me, ly_symbol2scm ("note-heads")));
 
   if (heads.is_empty ())
     return SCM_EOL;
diff --git a/lily/lyric-extender.cc b/lily/lyric-extender.cc
index 700fbf40cd..b71d4337c3 100644
--- a/lily/lyric-extender.cc
+++ b/lily/lyric-extender.cc
@@ -32,8 +32,7 @@ Lyric_extender::print (SCM smob)
   
   common = common->common_refpoint (me->get_bound (RIGHT), X_AXIS);
   Real sl = me->get_layout ()->get_dimension (ly_symbol2scm ("linethickness"));  
-  Link_array<Grob> heads (Pointer_group_interface__extract_grobs (me, (Grob*)0,
-								  "heads"));
+  Link_array<Grob> heads (extract_grob_array (me, ly_symbol2scm ("heads")));
 
   if (!heads.size ())
     return SCM_EOL;
diff --git a/lily/slur-configuration.cc b/lily/slur-configuration.cc
index 0b9dc137d2..ec1bb08840 100644
--- a/lily/slur-configuration.cc
+++ b/lily/slur-configuration.cc
@@ -115,7 +115,7 @@ Slur_configuration::generate_curve (Slur_score_state const &state,
     }
 
   Link_array<Grob> extra_encompasses
-    = Pointer_group_interface__extract_grobs (state.slur_, (Grob *)0, "encompass-objects");
+    = extract_grob_array (state.slur_, ly_symbol2scm ("encompass-objects"));
   for (int i = 0;  i < extra_encompasses.size (); i++)
     if (Slur::has_interface (extra_encompasses[i]))
       {
diff --git a/lily/slur-scoring.cc b/lily/slur-scoring.cc
index 4ead1be2b5..b06a1b019e 100644
--- a/lily/slur-scoring.cc
+++ b/lily/slur-scoring.cc
@@ -277,7 +277,7 @@ Slur_score_state::fill (Grob *me)
 {
   slur_ = dynamic_cast<Spanner*> (me);
   columns_ 
-    = Pointer_group_interface__extract_grobs (me, (Grob *) 0, "note-columns");
+    = extract_grob_array (me, ly_symbol2scm ("note-columns"));
   
   if (columns_.is_empty ())
     {
@@ -705,8 +705,7 @@ Array<Extra_collision_info>
 Slur_score_state::get_extra_encompass_infos () const
 {
   Link_array<Grob> encompasses
-    = Pointer_group_interface__extract_grobs (slur_, (Grob *)0,
-					      "encompass-objects");
+    = extract_grob_array (slur_, ly_symbol2scm ("encompass-objects"));
   Array<Extra_collision_info> collision_infos;
   for (int i = encompasses.size (); i--; )
     {
diff --git a/lily/slur.cc b/lily/slur.cc
index 5d8138b36e..c219eb0607 100644
--- a/lily/slur.cc
+++ b/lily/slur.cc
@@ -203,7 +203,7 @@ static Direction
 get_default_dir (Grob*me)
 {
   Link_array<Grob> encompasses
-    = Pointer_group_interface__extract_grobs (me, (Grob*) 0, "note-columns");
+    = extract_grob_array (me, ly_symbol2scm ("note-columns"));
 
   Direction d = DOWN;
   for (int i = 0; i < encompasses.size (); i ++)
diff --git a/lily/stem.cc b/lily/stem.cc
index b4de3c1ce5..f3ed966975 100644
--- a/lily/stem.cc
+++ b/lily/stem.cc
@@ -393,7 +393,7 @@ Stem::position_noteheads (Grob *me)
     return;
 
   Link_array<Grob> heads =
-    Pointer_group_interface__extract_grobs (me, (Grob*) 0, "note-heads");
+    extract_grob_array (me, ly_symbol2scm ("note-heads"));
 
   heads.sort (compare_position);
   Direction dir = get_direction (me);
diff --git a/lily/system.cc b/lily/system.cc
index d667bdd2a0..c8aea6b379 100644
--- a/lily/system.cc
+++ b/lily/system.cc
@@ -461,7 +461,7 @@ Link_array<Grob>
 System::columns () const
 {
   Link_array<Grob> acs
-    = Pointer_group_interface__extract_grobs (this, (Grob*) 0, "columns");
+    = extract_grob_array (this, ly_symbol2scm ("columns"));
   bool found = false;
   for (int i = acs.size (); i--;)
     {
diff --git a/lily/tie-column.cc b/lily/tie-column.cc
index dbe70e3ee8..a6f053376e 100644
--- a/lily/tie-column.cc
+++ b/lily/tie-column.cc
@@ -74,7 +74,7 @@ void
 Tie_column::werner_directions (Grob *me)
 {
   Link_array<Grob> ties =
-    Pointer_group_interface__extract_grobs (me, (Grob*)0, "ties");
+    extract_grob_array (me, ly_symbol2scm ("ties"));
 
   if (!ties.size ())
     return ;
diff --git a/lily/tuplet-bracket.cc b/lily/tuplet-bracket.cc
index 380a5f4363..2db6fca93f 100644
--- a/lily/tuplet-bracket.cc
+++ b/lily/tuplet-bracket.cc
@@ -79,9 +79,7 @@ Tuplet_bracket::parallel_beam (Grob *me, Link_array<Grob> const &cols, bool *equ
   if (! (b1 && (b1 == b2) && !sp->is_broken ()))
       return 0;
 
-  Link_array<Grob> beam_stems = Pointer_group_interface__extract_grobs
-    (b1, (Grob*)0, "stems");
-
+  Link_array<Grob> beam_stems = extract_grob_array (b1, ly_symbol2scm ("stems"));
   if (beam_stems.size () == 0)
     {
       programming_error ("Beam under tuplet bracket has no stems!");
@@ -108,13 +106,11 @@ Tuplet_bracket::print (SCM smob)
   Grob *me = unsmob_grob (smob);
   Stencil  mol;
   Link_array<Grob> columns =
-    Pointer_group_interface__extract_grobs (me, (Grob*)0, "note-columns");
+    extract_grob_array (me, ly_symbol2scm ("note-columns"));
 
   if (!columns.size ())
     return mol.smobbed_copy ();
 
-  
-
   {
     SCM lp = me->get_property ("left-position");
     SCM rp = me->get_property ("right-position");  
@@ -307,7 +303,7 @@ void
 Tuplet_bracket::calc_position_and_height (Grob*me, Real *offset, Real * dy) 
 {
   Link_array<Grob> columns =
-    Pointer_group_interface__extract_grobs (me, (Grob*)0, "note-columns");
+    extract_grob_array (me, ly_symbol2scm ("note-columns"));
 
   SCM cols = me->get_property ("note-columns");
   Grob * commony = common_refpoint_of_list (cols, me, Y_AXIS);
@@ -419,7 +415,7 @@ Tuplet_bracket::before_line_breaking (SCM smob)
 {
   Grob *me = unsmob_grob (smob);
   Link_array<Grob> columns =
-    Pointer_group_interface__extract_grobs (me, (Grob*)0, "note-columns");
+    extract_grob_array (me, ly_symbol2scm ("note-columns"));
 
 
   for (int i = columns.size (); i--;)
@@ -439,7 +435,7 @@ Tuplet_bracket::after_line_breaking (SCM smob)
 {
   Grob * me = unsmob_grob (smob);
   Link_array<Grob> columns =
-    Pointer_group_interface__extract_grobs (me, (Grob*)0, "note-columns");
+    extract_grob_array (me, ly_symbol2scm ("note-columns"));
 
   if (!columns.size ())
     {