]> git.donarmstrong.com Git - lilypond.git/commitdiff
patch::: 1.3.54.hwn1
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Thu, 25 May 2000 17:52:28 +0000 (19:52 +0200)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Thu, 25 May 2000 17:52:28 +0000 (19:52 +0200)
1.3.1.3.54.hwn1
===========

* Massive search replace patch: store pointers and properties
separately, in preparation of property collapse.

44 files changed:
CHANGES
VERSION
lily/align-interface.cc
lily/axis-group-interface.cc
lily/bar-number-engraver.cc
lily/beam.cc
lily/break-align-engraver.cc
lily/break-align-item.cc
lily/collision.cc
lily/dot-column.cc
lily/dynamic-engraver.cc
lily/engraver.cc
lily/group-interface.cc
lily/hara-kiri-vertical-group-spanner.cc
lily/include/group-interface.hh
lily/include/score-element.hh
lily/item.cc
lily/line-of-score.cc
lily/multi-measure-rest-engraver.cc
lily/multi-measure-rest.cc
lily/note-column.cc
lily/pointer-group-interface.cc [new file with mode: 0644]
lily/property-engraver.cc
lily/rest-collision.cc
lily/rhythmic-head.cc
lily/scm-hash.cc
lily/score-element.cc
lily/score-engraver.cc
lily/script-column.cc
lily/separating-group-spanner.cc
lily/side-position-interface.cc
lily/single-malt-grouping-item.cc
lily/slur.cc
lily/span-bar.cc
lily/staff-symbol-engraver.cc
lily/staff-symbol-referencer.cc
lily/stem-tremolo.cc
lily/stem.cc
lily/system-start-delimiter-engraver.cc
lily/system-start-delimiter.cc
lily/tie-column.cc
lily/tie.cc
lily/tuplet-spanner.cc
lily/volta-spanner.cc

diff --git a/CHANGES b/CHANGES
index 496aaedfee965bc22744698bcd91b4cb02db1ef7..1e07902ff91f855782654b0c164f749e35242d72 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,9 @@
+1.3.1.3.54.hwn1
+===========
+
+* Massive search replace patch: store pointers and properties
+separately, in preparation of property collapse.
+
 1.3.53.uu1
 ==========
 
diff --git a/VERSION b/VERSION
index c3ec2ace94040b1b89bebe2f4d4a052925a8a160..12c3a8182799244f517d1515df3f0d071d5ada5d 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -2,7 +2,7 @@ PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=3
 PATCH_LEVEL=54
-MY_PATCH_LEVEL=
+MY_PATCH_LEVEL=hwn1
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
 # released version.
index af9089b0eb203e822e356ccd629a17e4933db414..c3779358711f53c0ef277fa3182eb0898b500637 100644 (file)
@@ -32,7 +32,7 @@ Align_interface::alignment_callback (Score_element const *sc, Axis ax)
 Real
 Align_interface::center_on_element (Score_element const *me, Axis a)
 {
-  Score_element *cent = unsmob_element (me->get_elt_property ("group-center-element"));
+  Score_element *cent = unsmob_element (me->get_elt_pointer ("group-center-element"));
 
   if (cent)
     {
@@ -61,7 +61,7 @@ Align_interface::do_side_processing (Axis a)
 
   Link_array<Score_element> elems;
   Link_array<Score_element> all_elts
-    = Group_interface__extract_elements (  elt_l_, (Score_element*) 0, "elements");
+    = Pointer_group_interface__extract_elements (  elt_l_, (Score_element*) 0, "elements");
   for (int i=0; i < all_elts.size(); i++) 
     {
       Interval y = all_elts[i]->extent(a) + all_elts[i]->relative_coordinate (elt_l_, a);
@@ -134,7 +134,7 @@ Align_interface::axis ()const
 int
 Align_interface::get_count (Score_element*s)const
 {
-  SCM e = elt_l_->get_elt_property ("elements");
+  SCM e = elt_l_->get_elt_pointer ("elements");
   int c =0;
   while (gh_pair_p (e))
     {
index 06e7436685841f9f00f3fbc73e8ed534a2b97183..a08865c19cd9207144b9ba53854acab1115da6ee 100644 (file)
@@ -38,7 +38,7 @@ Axis_group_interface::add_element (Score_element *e)
        e->set_parent (elt_l_, a);
     }
 
-  Group_interface (elt_l_).add_element (e);
+  Pointer_group_interface (elt_l_).add_element (e);
   elt_l_->add_dependency (e);
 }
 
@@ -68,14 +68,14 @@ Axis_group_interface::group_extent_callback (Score_element const*me, Axis a)
 {
   Score_element * common =(Score_element*) me;
 
-  for (SCM s = me->get_elt_property ("elements"); gh_pair_p (s); s = gh_cdr (s))
+  for (SCM s = me->get_elt_pointer ("elements"); gh_pair_p (s); s = gh_cdr (s))
     {
       Score_element * se = unsmob_element (gh_car (s));
       common = se->common_refpoint (common, a);
     }
 
   Real my_coord = me->relative_coordinate (common, a);
-  Interval r (relative_group_extent (a, common, me->get_elt_property ("elements")));
+  Interval r (relative_group_extent (a, common, me->get_elt_pointer ("elements")));
 
   return r - my_coord;
 }
@@ -85,10 +85,10 @@ Axis_group_interface::set_interface ()
 {
   if (!has_interface_b ())
     {
-      elt_l_->set_elt_property ("elements", SCM_EOL);
+      elt_l_->set_elt_pointer ("elements", SCM_EOL);
       elt_l_->set_elt_property ("transparent", SCM_BOOL_T); //  junk this?
       elt_l_->set_elt_property ("axes" , SCM_EOL);
-      group (elt_l_, "interfaces").add_thing (ly_symbol2scm ("Axis_group"));
+      Group_interface (elt_l_, "interfaces").add_thing (ly_symbol2scm ("Axis_group"));
     }
 }
 
@@ -122,7 +122,7 @@ Axis_group_interface::get_children ()
   if (!has_interface_b ())
     return childs;
   
-  for (SCM ep = elt_l_->get_elt_property ("elements"); gh_pair_p (ep); ep = gh_cdr (ep))
+  for (SCM ep = elt_l_->get_elt_pointer ("elements"); gh_pair_p (ep); ep = gh_cdr (ep))
     {
       Score_element* e = unsmob_element (gh_car (ep));
       if (e)
index 3aa50afbf22914da8eea7a5a42536f7d174f2eb6..a9d39a62f6c1f8c2c57c4bb1438355b2a24ba664 100644 (file)
@@ -98,7 +98,7 @@ Bar_number_engraver::do_pre_move_processing ()
 {
   if (text_p_)
     {
-      text_p_->set_elt_property ("side-support", staffs_);
+      text_p_->set_elt_pointer ("side-support", staffs_);
       typeset_element (text_p_);
       text_p_ =0;
     }
index e19a82270b5e79b6a323d3e826d11cd0af0fc201..d7461746cc877561f4be4a776068581ac8617398 100644 (file)
@@ -34,7 +34,7 @@
 
 Beam::Beam ()
 {
-  Group_interface g (this, "stems");
+  Pointer_group_interface g (this, "stems");
   g.set_interface ();
 
   set_elt_property ("height", gh_int2scm (0)); // ugh.
@@ -44,13 +44,13 @@ Beam::Beam ()
 void
 Beam::add_stem (Stem*s)
 {
-  Group_interface gi (this, "stems");
+  Pointer_group_interface gi (this, "stems");
   gi.add_element (s);
   
   s->add_dependency (this);
 
   assert (!s->beam_l ());
-  s->set_elt_property ("beam", self_scm_);
+  s->set_elt_pointer ("beam", self_scm_);
 
   if (!get_bound (LEFT))
     set_bound (LEFT,s);
@@ -62,7 +62,7 @@ int
 Beam::get_multiplicity () const
 {
   int m = 0;
-  for (SCM s = get_elt_property ("stems"); gh_pair_p (s); s = gh_cdr (s))
+  for (SCM s = get_elt_pointer ("stems"); gh_pair_p (s); s = gh_cdr (s))
     {
       Score_element * sc = unsmob_element (gh_car (s));
 
@@ -780,20 +780,20 @@ Beam::forced_stem_count () const
 Stem *
 Beam::stem (int i) const
 {
-  return Group_interface__extract_elements ((Beam*) this, (Stem*) 0, "stems")[i];
+  return Pointer_group_interface__extract_elements ((Beam*) this, (Stem*) 0, "stems")[i];
 }
 
 int
 Beam::stem_count () const
 {
-  Group_interface gi (this, "stems");
+  Pointer_group_interface gi (this, "stems");
   return gi.count ();
 }
 
 Stem*
 Beam::stem_top () const
 {
-  SCM s = get_elt_property ("stems");
+  SCM s = get_elt_pointer ("stems");
   
   return gh_pair_p (s) ? dynamic_cast<Stem*> (unsmob_element (gh_car (s))) : 0;
 }
index c358df46c42b33ed300e273fee88991415de00eb..6a3293c73e98ce4366096514dadab05c45f6bb4a 100644 (file)
@@ -112,7 +112,7 @@ Break_align_engraver::acknowledge_element (Score_element_info inf)
          */
          edge->set_extent_callback (Score_element::point_dimension_callback,X_AXIS);
          
-         align_l_->set_elt_property ("group-center-element", edge->self_scm_);
+         align_l_->set_elt_pointer ("group-center-element", edge->self_scm_);
 
          announce_element (Score_element_info(edge, 0));
          column_alist_ = scm_assoc_set_x (column_alist_, edge_sym, edge->self_scm_);
index 74fc20e399882e4e12906a1fd1d1d9819e4ea7b6..ca3925cf4a4ebfa1c07d9b8912dfb31899c5b151 100644 (file)
@@ -36,7 +36,7 @@ Break_align_item::before_line_breaking ()
   Real interline= paper_l ()->get_var ("interline");   
   Link_array<Score_element> elems;
   Link_array<Score_element> all_elems
-    = Group_interface__extract_elements (this, (Score_element*)0,
+    = Pointer_group_interface__extract_elements (this, (Score_element*)0,
                                         "elements");
   
   for (int i=0; i < all_elems.size(); i++) 
index e3eb69a4032a86700a18efc7adf3962f9cf1dc22..81de09987f31fedb0048aea0eb726dbd855f8044 100644 (file)
@@ -73,7 +73,7 @@ Collision::automatic_shift ()
   Drul_array<Array<int> > shifts;
   SCM  tups = SCM_EOL;
 
-  SCM s = get_elt_property ("elements");
+  SCM s = get_elt_pointer ("elements");
   for (; gh_pair_p (s); s = gh_cdr (s))
     {
       SCM car = gh_car (s);
@@ -200,10 +200,10 @@ Collision::forced_shift ()
 {
   SCM tups = SCM_EOL;
   
-  SCM s = get_elt_property ("elements");
+  SCM s = get_elt_pointer ("elements");
   for (; gh_pair_p (s); s = gh_cdr (s))
     {
-      Score_element * se = unsmob_element ( gh_car (s));
+      Score_element * se = unsmob_element (gh_car (s));
 
       SCM force =  se->remove_elt_property ("force-hshift");
       if (gh_number_p (force))
index 75f8391fe934b16092c5dd2b2aa4d2e9da6c8bb6..322a18865302c820584922e6c2ac6e68a9659c02 100644 (file)
@@ -20,7 +20,7 @@
 void
 Dot_column::add_dots (Dots *d)
 {
-  Group_interface gi (this, "dots");
+  Pointer_group_interface gi (this, "dots");
   gi.add_element (d);
 
   add_dependency (d);
@@ -50,7 +50,7 @@ Dot_column::compare (Dots * const &d1, Dots * const &d2)
 
 Dot_column::Dot_column ()
 {
-  Group_interface gi (this, "dots");
+  Pointer_group_interface gi (this, "dots");
   gi.set_interface ();
   directional_element (this).set (RIGHT);
   
@@ -76,7 +76,7 @@ Dot_column::Dot_column ()
 void
 Dot_column::after_line_breaking ()
 {
-  Link_array<Dots> dots = Group_interface__extract_elements (this, (Dots*)0 , "dots"); 
+  Link_array<Dots> dots = Pointer_group_interface__extract_elements (this, (Dots*)0 , "dots"); 
   dots.sort (Dot_column::compare);
   
   if (dots.size () < 2)
index 9a8675caee640890c33a7cca497da23124987e94..af10c5037dce23e679051b7f6b7307a789fbb4eb 100644 (file)
@@ -114,7 +114,7 @@ ADD_THIS_TRANSLATOR (Dynamic_engraver);
 void
 Dynamic_engraver::announce_element (Score_element_info i)
 {
-  group (i.elem_l_, "interfaces").add_thing (ly_symbol2scm ("dynamic"));
+  Group_interface (i.elem_l_, "interfaces").add_thing (ly_symbol2scm ("dynamic"));
   
   Engraver::announce_element (i);
 }
index 2211e8ac324a1c260f0f69c88c82c08307605b30..8ae01f77b6b0e53471d312ee3274665f9298907c 100644 (file)
@@ -27,7 +27,7 @@ Engraver::announce_element (Score_element_info i)
   Score_element *  e = i.elem_l_;
 
   if (e->get_elt_property ("interfaces") == SCM_EOL)
-    group (e, "interfaces").add_thing (ly_symbol2scm (e->name()));
+    Group_interface (e, "interfaces").add_thing (ly_symbol2scm (e->name()));
   
   if (!i.origin_trans_l_)
     i.origin_trans_l_ = this;
index a24e883da67cf83019269d52e87ad63e01c01e71..b78783c192d4fe3216aea51e938e2227ed5a75e5 100644 (file)
@@ -30,14 +30,6 @@ Group_interface::has_interface_b ()
 }
 
 
-void
-Group_interface::add_element (Score_element*p) 
-{
-  p->used_b_ =  true;
-  elt_l_->used_b_ = true;
-
-  add_thing (p->self_scm_);
-}
 
 void
 Group_interface::add_thing (SCM s)
@@ -63,16 +55,3 @@ Group_interface::set_interface ()
     }
 }
 
-Group_interface
-group (Score_element*s,String n)
-{
-  Group_interface gi (s,n);
-  return gi;
-}
-
-Group_interface
-group (Score_element*s)
-{
-  Group_interface gi (s);
-  return gi;
-}
index 12d5093c079185a83059eb16c3d325b3d9824071..76c95fcb8b935857e853fcad97e9f27d953fc4ba 100644 (file)
 
 Hara_kiri_group_spanner::Hara_kiri_group_spanner()
 {
-  set_elt_property ("items-worth-living", SCM_EOL);
+  set_elt_pointer ("items-worth-living", SCM_EOL);
 }
 
 void 
 Hara_kiri_group_spanner::add_interesting_item (Item* n)
 {
   add_dependency (n);
-  set_elt_property ("items-worth-living",
-                   gh_cons (n->self_scm_,
-                            get_elt_property ("items-worth-living")));
+  Pointer_group_interface (this, "items-worth-living").add_element (n);
 }
 
 void 
 Hara_kiri_group_spanner::after_line_breaking ()
 {
-  SCM worth = get_elt_property ("items-worth-living");
+  SCM worth = get_elt_pointer ("items-worth-living");
   if (gh_pair_p (worth))
     return;
 
index 72bc892258ac1aa104e9ee398352dcb0a94727cf..e2eafc6de41e7913efad9192da77ebe065f8ad1d 100644 (file)
@@ -34,22 +34,29 @@ public:
   void add_thing (SCM);
   bool has_interface_b ();
   void set_interface ();
-  void add_element (Score_element*);
 };
 
-Group_interface group (Score_element*);
-Group_interface group (Score_element*, String);
-
+struct Pointer_group_interface {
+  Score_element * elt_l_;
+  String name_;
+public:
+  Pointer_group_interface (Score_element const*);
+  Pointer_group_interface (Score_element const*, String);
+  int count ();
+  void set_interface ();
+  bool has_interface_b ();
+  void add_element (Score_element*);
+};
 /** 
   Put all score elements of ELT's property called NAME into an array,
   and return it.  */
 template<class T>
 Link_array<T>
-Group_interface__extract_elements (Score_element const *elt, T *, String name)
+Pointer_group_interface__extract_elements (Score_element const *elt, T *, const char* name)
 {
   Link_array<T> arr;
 
-  for (SCM s = elt->get_elt_property (name); gh_pair_p (s); s = gh_cdr (s))
+  for (SCM s = elt->get_elt_pointer (name); gh_pair_p (s); s = gh_cdr (s))
     {
       SCM e = gh_car (s);
       assert (SMOB_IS_TYPE_B(Score_element,e));
index e803d487fe66a838239921c7b9c2000b6c5c05e2..1c0d7e4ef3e5e4216cb26bb5d37dc5905978c9e9 100644 (file)
@@ -58,7 +58,7 @@ class Score_element  {
      The lookup, determined by the font size. Cache this value.
    */
   Lookup * lookup_l_;
-public:
+
   /**
      properties specific for this element. Destructor will not call
      scm_unprotect, so as to allow more flexible GC arrangements.  The
@@ -66,8 +66,10 @@ public:
      need for more scm_protect calls.
 
   */
-  SCM element_property_alist_;
-  
+public:                                // ugh.
+  SCM property_alist_;
+  SCM pointer_alist_;
+public:
   Score_element *original_l_;
 
   /**
@@ -102,6 +104,13 @@ public:
   SCM get_elt_property (String nm) const;
   void set_elt_property (String, SCM val);
 
+  /**
+     Pointers are like properties, but they are subject to    a substitution
+     after line breaking.
+   */
+  SCM get_elt_pointer (const char*) const;
+  void set_elt_pointer (const char*, SCM val);
+  friend class Property_engraver; //  UGHUGHUGH.
   /**
      UGH! JUNKME ?
 
@@ -117,7 +126,7 @@ public:
      twice may do weird things if Bar::foo has a default set.
      
    */
-  SCM remove_elt_property (String nm);
+  SCM remove_elt_property (const char* nm);
 
   /*
     related classes.
index ed980734523d879b369b112e630d80f462cc4c7b..feab9823ef1de126c42eefdc94fc98698e798573 100644 (file)
@@ -137,8 +137,11 @@ Item::handle_prebroken_dependencies ()
 {
   if (original_l_)
     {
-      element_property_alist_
-       = handle_broken_smobs (original_l_->element_property_alist_,
+      property_alist_
+       = handle_broken_smobs (original_l_->property_alist_,
+                              gh_int2scm (break_status_dir ()));
+      pointer_alist_
+       = handle_broken_smobs (original_l_->pointer_alist_,
                               gh_int2scm (break_status_dir ()));
     }
   
index abc8b0a4558c7d0731e7130d1adfebfd7977e06d..721240dbf29ee5867fc7552e94d7b51eb1bc25e7 100644 (file)
@@ -22,8 +22,8 @@
 
 Line_of_score::Line_of_score()
 {
-  set_elt_property ("columns", SCM_EOL);
-  set_elt_property ("all-elements", SCM_EOL);
+  set_elt_pointer ("columns", SCM_EOL);
+  set_elt_pointer ("all-elements", SCM_EOL);
 
   Axis_group_interface (this).set_interface ();
   Axis_group_interface (this).set_axes (Y_AXIS,X_AXIS);
@@ -32,7 +32,7 @@ Line_of_score::Line_of_score()
 int
 Line_of_score::element_count () const
 {
-  return scm_ilength ( get_elt_property ("all-elements"));
+  return scm_ilength ( get_elt_pointer ("all-elements"));
 }
 
 
@@ -43,14 +43,14 @@ void
 Line_of_score::typeset_element (Score_element * elem_p)
 {
   elem_p->pscore_l_ = pscore_l_;
-  Group_interface (this, "all-elements").add_element (elem_p);
+  Pointer_group_interface (this, "all-elements").add_element (elem_p);
   scm_unprotect_object (elem_p->self_scm_);
 }
 
 void
 Line_of_score::output_lines ()
 {
-  for (SCM s = get_elt_property ("all-elements");
+  for (SCM s = get_elt_pointer ("all-elements");
        gh_pair_p (s); s = gh_cdr (s))
     {
       unsmob_element (gh_car (s))->do_break_processing ();
@@ -62,7 +62,7 @@ Line_of_score::output_lines ()
   for (int i=0; i < broken_into_l_arr_.size (); i++)
     {
       Score_element *se = broken_into_l_arr_[i];
-      SCM all = se->get_elt_property ("all-elements");
+      SCM all = se->get_elt_pointer ("all-elements");
       for (SCM s = all; gh_pair_p (s); s = gh_cdr (s))
        {
          unsmob_element (gh_car (s))->fixup_refpoint ();
@@ -74,13 +74,13 @@ Line_of_score::output_lines ()
   /*
     needed for doing items.
    */
-  for (SCM s = get_elt_property ("all-elements");
+  for (SCM s = get_elt_pointer ("all-elements");
        gh_pair_p (s); s = gh_cdr (s))
     {
       unsmob_element (gh_car (s))->fixup_refpoint ();
     }
   
-  for (SCM s = get_elt_property ("all-elements");
+  for (SCM s = get_elt_pointer ("all-elements");
        gh_pair_p (s); s = gh_cdr (s))
     {
       unsmob_element (gh_car (s))->handle_broken_dependencies ();
@@ -167,12 +167,12 @@ Line_of_score::output_scheme (SCM s)
 void
 Line_of_score::add_column (Paper_column*p)
 {
-  SCM cs = get_elt_property ("columns");
+  SCM cs = get_elt_pointer ("columns");
   Score_element * prev =  gh_pair_p (cs) ? unsmob_element (gh_car (cs)) : 0;
   int rank = prev ? dynamic_cast<Paper_column*> (prev)->rank_i () + 1 : 0; 
 
   p->set_rank (rank);
-  set_elt_property ("columns",  gh_cons (p->self_scm_, cs));
+  set_elt_pointer ("columns",  gh_cons (p->self_scm_, cs));
 
   Axis_group_interface (this).add_element (p);
   typeset_element (p);
@@ -182,7 +182,7 @@ Link_array<Paper_column>
 Line_of_score::column_l_arr ()const
 {
   Link_array<Paper_column> acs
-    = Group_interface__extract_elements (this, (Paper_column*) 0, "columns");
+    = Pointer_group_interface__extract_elements (this, (Paper_column*) 0, "columns");
   bool bfound = false;
   for (int i= acs.size (); i -- ; )
     {
@@ -195,7 +195,7 @@ Line_of_score::column_l_arr ()const
        someone forced a breakpoint.
       */
       if (!bfound
-         || (acs[i]->get_elt_property ("elements") == SCM_EOL
+         || (acs[i]->get_elt_pointer ("elements") == SCM_EOL
              && !brb))
        acs.del (i);
     }
@@ -223,32 +223,32 @@ fixup_refpoints (SCM s)
 void
 Line_of_score::pre_processing ()
 {
-  for (SCM s = get_elt_property ("all-elements"); gh_pair_p (s); s = gh_cdr (s))
+  for (SCM s = get_elt_pointer ("all-elements"); gh_pair_p (s); s = gh_cdr (s))
     unsmob_element (gh_car (s))->discretionary_processing ();
 
   progress_indication ( _f("Element count %d ",  element_count ()));
 
   
-  for (SCM s = get_elt_property ("all-elements"); gh_pair_p (s); s = gh_cdr (s))
+  for (SCM s = get_elt_pointer ("all-elements"); gh_pair_p (s); s = gh_cdr (s))
     unsmob_element (gh_car (s))->handle_prebroken_dependencies ();
   
-  fixup_refpoints (get_elt_property ("all-elements"));
+  fixup_refpoints (get_elt_pointer ("all-elements"));
   
-  for (SCM s = get_elt_property ("all-elements"); gh_pair_p (s); s = gh_cdr (s))
+  for (SCM s = get_elt_pointer ("all-elements"); gh_pair_p (s); s = gh_cdr (s))
     {
       Score_element* sc = unsmob_element (gh_car (s));
       sc->calculate_dependencies (PRECALCED, PRECALCING, &Score_element::before_line_breaking);
     }
   
   progress_indication ("\n" + _ ("Calculating column positions...") + " " );
-  for (SCM s = get_elt_property ("all-elements"); gh_pair_p (s); s = gh_cdr (s))
+  for (SCM s = get_elt_pointer ("all-elements"); gh_pair_p (s); s = gh_cdr (s))
     unsmob_element (gh_car (s))->do_space_processing ();
 }
 
 void
 Line_of_score::post_processing ()
 {
-  for (SCM s = get_elt_property ("all-elements");
+  for (SCM s = get_elt_pointer ("all-elements");
        gh_pair_p (s); s = gh_cdr (s))
     {
       Score_element* sc = unsmob_element (gh_car (s));
@@ -272,7 +272,7 @@ Line_of_score::post_processing ()
     generate all molecules  to trigger all font loads.
 
     (ugh. This is not very memory efficient.)  */
-  for (SCM s = get_elt_property ("all-elements"); gh_pair_p (s); s = gh_cdr (s))
+  for (SCM s = get_elt_pointer ("all-elements"); gh_pair_p (s); s = gh_cdr (s))
     unsmob_element (gh_car (s))->get_molecule ();
   
   /*
@@ -295,7 +295,7 @@ Line_of_score::post_processing ()
   /*
     all elements.
    */ 
-  for (SCM s = get_elt_property ("all-elements"); gh_pair_p (s); s = gh_cdr (s))
+  for (SCM s = get_elt_pointer ("all-elements"); gh_pair_p (s); s = gh_cdr (s))
     {
       Score_element * sc =  unsmob_element (gh_car (s));
       Molecule m = sc->get_molecule ();
@@ -323,7 +323,7 @@ Line_of_score::broken_col_range (Item const*l, Item const*r) const
 
   l = l->column_l ();
   r = r->column_l ();
-  SCM s = get_elt_property ("columns");
+  SCM s = get_elt_pointer ("columns");
 
   while (gh_car (s) != r->self_scm_)
     s = gh_cdr  (s);
index 6a49f50a5413d7be7fdb332d3f7a5ca8be5e669e..fa7573888c8e6eebe07623ef226b9ca1ae2c9cd3 100644 (file)
@@ -127,7 +127,7 @@ Multi_measure_rest_engraver::do_pre_move_processing ()
 
   if (mmrest_p_ && (now_mom () >= start_moment_) 
     && !mp
-    && (scm_ilength (mmrest_p_->get_elt_property ("columns")) >= 2))
+    && (scm_ilength (mmrest_p_->get_elt_pointer ("columns")) >= 2))
     {
       typeset_element (mmrest_p_);
       /*
index 0d360c945b06029706bb9f1c0527e8cd3d17f38f..ff02759d3c51061f89a50b3595c2f18d93d688a1 100644 (file)
@@ -22,7 +22,7 @@
 
 Multi_measure_rest::Multi_measure_rest ()
 {
-  set_elt_property ("columns", SCM_EOL);
+  set_elt_pointer ("columns", SCM_EOL);
 }
 
 
@@ -139,9 +139,9 @@ Multi_measure_rest::do_brew_molecule () const
 void
 Multi_measure_rest::do_add_processing ()
 {
-  if (gh_pair_p (get_elt_property ("columns")))
+  if (gh_pair_p (get_elt_pointer ("columns")))
     {
-      Link_array<Item> column_arr (Group_interface__extract_elements (this, (Item*)0, "columns"));
+      Link_array<Item> column_arr (Pointer_group_interface__extract_elements (this, (Item*)0, "columns"));
                                    
       set_bound (LEFT, column_arr[0 >? column_arr.size () - 2]);
       set_bound (RIGHT, column_arr.top ());
@@ -153,7 +153,7 @@ Multi_measure_rest::do_add_processing ()
 void
 Multi_measure_rest::after_line_breaking ()
 {
-  if (!gh_pair_p (get_elt_property ("columns")))
+  if (!gh_pair_p (get_elt_pointer ("columns")))
     set_elt_property ("transparent", SCM_BOOL_T);
 }
 
@@ -162,7 +162,7 @@ Multi_measure_rest::after_line_breaking ()
 void
 Multi_measure_rest::add_column (Item* c)
 {
-  Group_interface gi (this, "columns");
+  Pointer_group_interface gi (this, "columns");
   gi.add_element (c);
 
   
index 1f424860feaaaab8a140d1625bd20a6a43f45549..7b8426077d88d3fab0271b80bbaefe351573ee40 100644 (file)
@@ -22,7 +22,7 @@
 bool
 Note_column::rest_b () const
 {
-  SCM r = get_elt_property ("rests");
+  SCM r = get_elt_pointer ("rests");
 
   return gh_pair_p (r);
 }
@@ -40,8 +40,8 @@ Note_column::shift_compare (Note_column *const &p1, Note_column*const&p2)
 
 Note_column::Note_column()
 {
-  set_elt_property ("rests", SCM_EOL);
-  set_elt_property ("note-heads", SCM_EOL);  
+  set_elt_pointer ("rests", SCM_EOL);
+  set_elt_pointer ("note-heads", SCM_EOL);  
   Axis_group_interface (this).set_interface ();
   Axis_group_interface (this).set_axes (X_AXIS, Y_AXIS);
   Group_interface (this, "interfaces").add_thing (ly_symbol2scm ("Note_column"));
@@ -50,7 +50,7 @@ Note_column::Note_column()
 Stem *
 Note_column::stem_l () const
 {
-  SCM s = get_elt_property ("stem");
+  SCM s = get_elt_pointer ("stem");
   return dynamic_cast<Stem*> (unsmob_element (s));
 
 }
@@ -63,7 +63,7 @@ Note_column::head_positions_interval() const
 
   iv.set_empty ();
 
-  SCM h = get_elt_property ("note-heads");
+  SCM h = get_elt_pointer ("note-heads");
   for (; gh_pair_p (h); h = gh_cdr (h))
     {
       Score_element *se = unsmob_element (gh_car (h));
@@ -80,7 +80,7 @@ Note_column::dir () const
 {
   if (stem_l ())
     return stem_l ()->get_direction ();
-  else if (gh_pair_p (get_elt_property ("note-heads")))
+  else if (gh_pair_p (get_elt_pointer ("note-heads")))
     return (Direction)sign (head_positions_interval().center ());
 
   programming_error ("Note column without heads and stem!");
@@ -91,7 +91,7 @@ Note_column::dir () const
 void
 Note_column::set_stem (Stem * stem_l)
 {
-  set_elt_property ("stem", stem_l->self_scm_);
+  set_elt_pointer ("stem", stem_l->self_scm_);
 
   add_dependency (stem_l);
   Axis_group_interface (this).add_element (stem_l);
@@ -104,12 +104,12 @@ Note_column::add_head (Rhythmic_head *h)
 {
   if (Rest*r=dynamic_cast<Rest *> (h))
     {
-      Group_interface gi (this, "rests");
+      Pointer_group_interface gi (this, "rests");
       gi.add_element (h);
     }
   if (Note_head *nh=dynamic_cast<Note_head *> (h))
     {
-      Group_interface gi (this, "note-heads");
+      Pointer_group_interface gi (this, "note-heads");
       gi.add_element (nh);
     }
   Axis_group_interface (this).add_element (h);
@@ -121,7 +121,7 @@ Note_column::add_head (Rhythmic_head *h)
 void
 Note_column::translate_rests (int dy_i)
 {
-  SCM s = get_elt_property ("rests");
+  SCM s = get_elt_pointer ("rests");
   for (; gh_pair_p (s); s = gh_cdr (s))
     {
       Score_element * se = unsmob_element (gh_car (s));
@@ -181,7 +181,7 @@ Note_column::after_line_breaking ()
   Direction d = stem_l ()->get_direction ();
   Real beamy = (stem_l ()->relative_coordinate (0, X_AXIS) - x0) * dydx + beam_y;
 
-  s = get_elt_property ("rests");
+  s = get_elt_pointer ("rests");
   Score_element * se = unsmob_element (gh_car (s));
   Staff_symbol_referencer_interface si (se);
 
@@ -210,7 +210,7 @@ Interval
 Note_column::rest_dim () const
 {
   Interval restdim;
-  SCM s = get_elt_property ("rests");
+  SCM s = get_elt_pointer ("rests");
   for (; gh_pair_p (s); s = gh_cdr (s))
     {
       Score_element * sc = unsmob_element ( gh_car (s));
diff --git a/lily/pointer-group-interface.cc b/lily/pointer-group-interface.cc
new file mode 100644 (file)
index 0000000..dd40723
--- /dev/null
@@ -0,0 +1,58 @@
+/*   
+  group-interface.cc --  implement Pointer_group_interface
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 1999--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  
+ */
+#include "group-interface.hh"
+#include "score-element.hh"
+
+Pointer_group_interface::Pointer_group_interface (Score_element const* e)
+{
+  elt_l_ = (Score_element*)e;
+  name_ = "elements";
+}
+
+
+Pointer_group_interface::Pointer_group_interface (Score_element const *e, String s)
+{
+  elt_l_ =(Score_element*)e;
+  name_ = s;
+} 
+bool
+Pointer_group_interface::has_interface_b () 
+{
+  SCM el = elt_l_->get_elt_pointer (name_.ch_C());
+
+  return el == SCM_EOL || gh_pair_p (el);
+}
+
+
+void
+Pointer_group_interface::add_element (Score_element*p) 
+{
+  p->used_b_ =  true;
+  elt_l_->used_b_ = true;
+
+  elt_l_->set_elt_pointer (name_.ch_C(),
+                          gh_cons (p->self_scm_,
+                                   elt_l_->get_elt_pointer (name_.ch_C())));
+}
+
+int
+Pointer_group_interface::count ()
+{
+  return scm_ilength (elt_l_->get_elt_pointer (name_.ch_C()));
+}
+
+void
+Pointer_group_interface::set_interface ()
+{
+  if (!has_interface_b ())
+    {
+      elt_l_->set_elt_pointer (name_.ch_C(), SCM_EOL);
+    }
+} 
+
index b60416ef421ab853cc2ab1765ded1642530c2dfb..a509bd1adb47ed5247fb9054f62e705c4b55cd0c 100644 (file)
@@ -76,7 +76,7 @@ Property_engraver::apply_properties (SCM p, Score_element *e)
       SCM type_p   = gh_cadr (entry);
       SCM elt_prop_sym = gh_caddr (entry);
 
-      SCM preset = scm_assq(elt_prop_sym, e->element_property_alist_);
+      SCM preset = scm_assq(elt_prop_sym, e->property_alist_);
       if (preset != SCM_BOOL_F)
        continue;
   
index df842f8f33cbdf5c273f687f9df7fd14adbd2617..d713630dbedd1ebc6416507e01d0dee15c202478 100644 (file)
@@ -24,7 +24,7 @@ void
 Rest_collision::add_column (Note_column *nc_l)
 {
   add_dependency (nc_l);
-  Group_interface gi (this);  
+  Pointer_group_interface gi (this);  
   if (nc_l->rest_b ())
     gi.name_ = "rests";
   else
@@ -51,7 +51,7 @@ rhythmic_head2mom (Rhythmic_head* r)
 static Rhythmic_head*
 col2rhythmic_head (Note_column* c)
 {
-  SCM s = c->get_elt_property ("rests");
+  SCM s = c->get_elt_pointer ("rests");
   assert (gh_pair_p (s));
   Score_element* e = unsmob_element (gh_car (s));
   return dynamic_cast<Rhythmic_head*> (e);
@@ -61,9 +61,9 @@ void
 Rest_collision::before_line_breaking ()
 {
   Link_array<Note_column> rest_l_arr =
-    Group_interface__extract_elements (this, (Note_column*) 0, "rests");
+    Pointer_group_interface__extract_elements (this, (Note_column*) 0, "rests");
   Link_array<Note_column> ncol_l_arr =
-    Group_interface__extract_elements (this, (Note_column*) 0, "notes");
+    Pointer_group_interface__extract_elements (this, (Note_column*) 0, "notes");
                                      
   
   /* 
@@ -190,8 +190,8 @@ Rest_collision::before_line_breaking ()
 
 Rest_collision::Rest_collision()
 {
-  set_elt_property ("rests", SCM_EOL);
-  set_elt_property ("notes", SCM_EOL);
+  set_elt_pointer ("rests", SCM_EOL);
+  set_elt_pointer ("notes", SCM_EOL);
   set_elt_property ("transparent", SCM_BOOL_T);
   set_extent_callback (0, X_AXIS);
   set_extent_callback (0, Y_AXIS);
index 64d2bd4bdd6f716e4de9141be933f4038cf9c21b..83aa03820b44503c375f0ea2a4e6584583874722 100644 (file)
@@ -21,7 +21,7 @@
 Dots*
 Rhythmic_head::dots_l () const
 {
-  SCM s = get_elt_property ("dot");
+  SCM s = get_elt_pointer ("dot");
   return dynamic_cast<Dots*> (unsmob_element (s));
 }
 
@@ -36,7 +36,7 @@ Rhythmic_head::balltype_i () const
 Stem*
 Rhythmic_head::stem_l () const
 {
-  SCM s = get_elt_property ("stem");
+  SCM s = get_elt_pointer ("stem");
   return dynamic_cast<Stem*> (unsmob_element (s));
 }
 
@@ -62,7 +62,7 @@ Rhythmic_head::after_line_breaking ()
 void
 Rhythmic_head::add_dots (Dots *dot_l)
 {
-  set_elt_property ("dot", dot_l->self_scm_);
+  set_elt_pointer ("dot", dot_l->self_scm_);
   dot_l->add_dependency (this);  
 }
 
index 551a050a2a29b4d7e940ef50413f6d36bf9d9005..8a2094b86ee7508b246f70f70417fbf0981bb6ed 100644 (file)
@@ -65,7 +65,7 @@ Scheme_hash_table::print_smob (SCM s, SCM p, scm_print_state*)
   sprintf (str, "#<Scheme_hash_table 0x%0x ", s);
   scm_puts (str, p);      
   Scheme_hash_table *me = SMOB_TO_TYPE(Scheme_hash_table,s);
-  for (Scm_stl_map ::const_iterator i = me->begin (); i != me->end(); i++)
+  for (Scm_stl_map::const_iterator i = me->begin (); i != me->end(); i++)
     {
       scm_display ((*i).first, p);
       scm_puts (" = ",p);      
index 9aeac9c546040b844e283812424ea553b348be1c..65c5e496afecaed0c044d2d9551f09b5a2180c69 100644 (file)
@@ -50,10 +50,11 @@ Score_element::Score_element()
   status_i_ = 0;
   self_scm_ = SCM_EOL;
   original_l_ = 0;
-  element_property_alist_ = SCM_EOL;
-
+  property_alist_ = SCM_EOL;
+  pointer_alist_ = SCM_EOL;
+  
   smobify_self ();
-  set_elt_property ("dependencies", SCM_EOL);
+  set_elt_pointer ("dependencies", SCM_EOL);
   set_elt_property ("interfaces", SCM_EOL);
 }
 
@@ -64,8 +65,9 @@ Score_element::Score_element (Score_element const&s)
   self_scm_ = SCM_EOL;
   used_b_ = true;
   original_l_ =(Score_element*) &s;
-  element_property_alist_ = SCM_EOL; // onstack;
-
+  property_alist_ = SCM_EOL;
+  pointer_alist_ = SCM_EOL;
+  
   status_i_ = s.status_i_;
   lookup_l_ = s.lookup_l_;
   pscore_l_ = s.pscore_l_;
@@ -82,11 +84,14 @@ SCM
 Score_element::get_elt_property (String nm) const
 {
   SCM sym =  ly_symbol2scm (nm.ch_C());
-  SCM s = scm_assq(sym, element_property_alist_);
+  SCM s = scm_assq(sym, property_alist_);
 
   if (s != SCM_BOOL_F)
     return gh_cdr (s); 
-  
+
+  /*
+    JUNKME
+   */
   if (pscore_l_)
     {
       SCM sym2 = ly_symbol2scm ((name () + ("::" + nm)).ch_C());
@@ -104,24 +109,38 @@ Score_element::get_elt_property (String nm) const
 }
 
 SCM
-Score_element::remove_elt_property (String key)
+Score_element::get_elt_pointer (const char *nm) const
+{
+  SCM sym =  ly_symbol2scm (nm);
+  SCM s = scm_assq(sym, pointer_alist_);
+
+  return (s == SCM_BOOL_F) ? SCM_UNDEFINED :  gh_cdr (s); 
+}
+
+SCM
+Score_element::remove_elt_property (const char* key)
 {
   SCM s = get_elt_property (key); 
-  SCM sym = ly_symbol2scm (key.ch_C());
-  element_property_alist_ =  scm_assq_remove_x (element_property_alist_, sym);
+  SCM sym = ly_symbol2scm (key);
+  property_alist_ =  scm_assq_remove_x (property_alist_, sym);
   return s;
 }
 
-/*
-  UGH. assoc vs. assq
- */
 void
 Score_element::set_elt_property (String k, SCM v)
 {
-  SCM s = ly_symbol2scm (k.ch_C( ));
-  element_property_alist_ = scm_assoc_set_x (element_property_alist_, s, v);
+  SCM s = ly_symbol2scm (k.ch_C ());
+  property_alist_ = scm_assq_set_x (property_alist_, s, v);
+}
+
+void
+Score_element::set_elt_pointer (const char* k, SCM v)
+{
+  SCM s = ly_symbol2scm (k);
+  pointer_alist_ = scm_assq_set_x (pointer_alist_, s, v);
 }
 
+
 Interval
 Score_element::molecule_extent (Score_element const *s, Axis a )
 {
@@ -200,7 +219,7 @@ Score_element::calculate_dependencies (int final, int busy,
   
   status_i_= busy;
 
-  for (SCM d=  get_elt_property ("dependencies"); gh_pair_p (d); d = gh_cdr (d))
+  for (SCM d=  get_elt_pointer ("dependencies"); gh_pair_p (d); d = gh_cdr (d))
     {
       unsmob_element (gh_car (d))
        ->calculate_dependencies (final, busy, funcptr);
@@ -284,7 +303,7 @@ Score_element::add_dependency (Score_element*e)
 {
   if (e)
     {
-      Group_interface gi (this, "dependencies");
+      Pointer_group_interface gi (this, "dependencies");
       gi.add_element (e);
     }
   else
@@ -385,8 +404,11 @@ Score_element::handle_broken_dependencies()
        {
          Score_element * sc = s->broken_into_l_arr_[i];
          Line_of_score * l = sc->line_l ();
-         s->broken_into_l_arr_[i]->element_property_alist_ =
-           handle_broken_smobs (element_property_alist_,
+         s->broken_into_l_arr_[i]->property_alist_ =
+           handle_broken_smobs (property_alist_,
+                                l ? l->self_scm_ : SCM_UNDEFINED);
+         s->broken_into_l_arr_[i]->pointer_alist_ =
+           handle_broken_smobs (pointer_alist_,
                                 l ? l->self_scm_ : SCM_UNDEFINED);
        }
     }
@@ -396,14 +418,14 @@ Score_element::handle_broken_dependencies()
 
   if (line && common_refpoint (line, X_AXIS) && common_refpoint (line, Y_AXIS))
     {
-      element_property_alist_
-       = handle_broken_smobs (element_property_alist_,
+      pointer_alist_
+       = handle_broken_smobs (pointer_alist_,
                               line ? line->self_scm_ : SCM_UNDEFINED);
     }
   else if (dynamic_cast <Line_of_score*> (this))
     {
-      element_property_alist_ = handle_broken_smobs (element_property_alist_,
-                                                    SCM_UNDEFINED);
+      pointer_alist_ = handle_broken_smobs (pointer_alist_,
+                                           SCM_UNDEFINED);
     }
   else
     {
@@ -427,7 +449,8 @@ Score_element::handle_broken_dependencies()
 void
 Score_element::suicide ()
 {
-  element_property_alist_ = SCM_EOL;
+  property_alist_ = SCM_EOL;
+  pointer_alist_ = SCM_EOL;
   set_extent_callback (0, Y_AXIS);
   set_extent_callback (0, X_AXIS);
 }
@@ -684,7 +707,8 @@ Score_element::mark_smob (SCM ses)
       programming_error ("SMOB marking gone awry");
       return SCM_EOL;
     }
-  return s->element_property_alist_;
+  scm_gc_mark (s->pointer_alist_);
+  return s->property_alist_;
 }
 
 int
@@ -728,7 +752,7 @@ Score_element::ly_set_elt_property (SCM elt, SCM sym, SCM val)
 
   if (sc)
     {
-      sc->element_property_alist_ = scm_assoc_set_x (sc->element_property_alist_, sym, val);
+      sc->property_alist_ = scm_assq_set_x (sc->property_alist_, sym, val);
     }
   else
     {
@@ -747,7 +771,7 @@ Score_element::ly_get_elt_property (SCM elt, SCM sym)
   
   if (sc)
     {
-      SCM s = scm_assq(sym, sc->element_property_alist_);
+      SCM s = scm_assq(sym, sc->property_alist_);
 
       if (s != SCM_BOOL_F)
        return gh_cdr (s); 
index 7b7dbe428a6f19fbc025a72f76272120b9cb9847..76500dcf6b75886027e70d487ef580ce7c4db78e 100644 (file)
@@ -1,5 +1,5 @@
 /*
-  score-grav.cc -- implement Score_engraver
+  score-engraver.cc -- implement Score_engraver
 
   source file of the GNU LilyPond music typesetter
 
index 35d9d0260492782d30aa9654e7924327ebe82692..ad776158a28e5c65fb760e8d8b5a8ae7eb8177cd 100644 (file)
@@ -19,7 +19,7 @@ Script_column::add_staff_sided (Item *i)
     return;
   
 
-  Group_interface gi (this, "scripts");
+  Pointer_group_interface gi (this, "scripts");
   gi.add_element (i);
   
   add_dependency (i);
@@ -45,7 +45,7 @@ Script_column::before_line_breaking ()
 {
   Drul_array<Link_array<Item> > arrs;
   Link_array<Item> staff_sided 
-    = Group_interface__extract_elements (this, (Item*)0, "scripts");
+    = Pointer_group_interface__extract_elements (this, (Item*)0, "scripts");
                                     
                                     
   for (int i=0; i < staff_sided.size (); i++)
index 295bef4824fa866176c26ac6224b0a8dc1add831..ea15f96c0928da0235b48075632b106802b44b69 100644 (file)
@@ -12,6 +12,7 @@
 #include "paper-column.hh"
 #include "paper-def.hh"
 #include "dimensions.hh"
+#include "group-interface.hh"
 
 static Rod
 make_rod (Single_malt_grouping_item *l, Single_malt_grouping_item *r)
@@ -39,7 +40,7 @@ Separating_group_spanner::get_rods () const
 {
   Array<Rod> a;
   
-  for (SCM s = get_elt_property ("elements"); gh_pair_p (s) && gh_pair_p (gh_cdr (s)); s = gh_cdr (s))
+  for (SCM s = get_elt_pointer ("elements"); gh_pair_p (s) && gh_pair_p (gh_cdr (s)); s = gh_cdr (s))
     {
       /*
        Order of elements is reversed!
@@ -81,7 +82,7 @@ Separating_group_spanner::get_rods () const
   /*
     We've done our job, so we get lost. 
    */
-  for (SCM s = get_elt_property ("elements"); gh_pair_p (s); s = gh_cdr (s))
+  for (SCM s = get_elt_pointer ("elements"); gh_pair_p (s); s = gh_cdr (s))
     {
       Item * it =dynamic_cast<Item*>(unsmob_element (gh_car (s)));
       if (it && it->broken_b ())
@@ -100,14 +101,12 @@ Separating_group_spanner::get_rods () const
 void
 Separating_group_spanner::add_spacing_unit (Single_malt_grouping_item*i)
 {
-  set_elt_property ("elements",
-                   gh_cons (i->self_scm_,
-                            get_elt_property ("elements")));
+  Pointer_group_interface (this, "elements").add_element (i);
   add_dependency (i);
 }
 
 
 Separating_group_spanner::Separating_group_spanner ()
 {
-  set_elt_property ("elements", SCM_EOL);
+  set_elt_pointer ("elements", SCM_EOL);
 }
index 6e018180fd05a83bc21ce7b4c0e661990476bd61..28773f479f27b7678c4bc49152c0b0e9a222e3f1 100644 (file)
@@ -15,6 +15,7 @@
 #include "dimensions.hh"
 #include "dimension-cache.hh"
 #include "staff-symbol-referencer.hh"
+#include "group-interface.hh"
 
 Side_position_interface::Side_position_interface (Score_element const *e)
 {
@@ -24,9 +25,7 @@ Side_position_interface::Side_position_interface (Score_element const *e)
 void
 Side_position_interface::add_support (Score_element*e)
 {
-  SCM sup = elt_l_->get_elt_property ("side-support");
-  elt_l_->set_elt_property ("side-support",
-                           gh_cons (e->self_scm_,sup));
+  Pointer_group_interface (elt_l_, "side-support").add_element (e);
 }
 
 
@@ -45,7 +44,7 @@ Side_position_interface::get_direction () const
       relative_dir = to_dir (reldir);
     }
   
-  SCM other_elt = elt_l_->get_elt_property ("direction-source");
+  SCM other_elt = elt_l_->get_elt_pointer ("direction-source");
   Score_element * e = unsmob_element(other_elt);
   if (e)
     {
@@ -64,7 +63,7 @@ Side_position_interface::side_position (Score_element const *cme, Axis axis)
 {
   Score_element* me = (Score_element*)cme;
   Score_element *common = me->parent_l (axis);
-  SCM support = me->get_elt_property ("side-support");
+  SCM support = me->get_elt_pointer ("side-support");
   for (SCM s = support; s != SCM_EOL; s = gh_cdr (s))
     {
       Score_element * e  = unsmob_element (gh_car (s));
index 3ab74cdc25cf5268115ff732da3706fb31b05c2f..e12f7ed0c1857fcbcca1385eb0e10660337a90cf 100644 (file)
 #include "single-malt-grouping-item.hh"
 #include "paper-column.hh"
 #include "debug.hh"
+#include "group-interface.hh"
 
 Single_malt_grouping_item ::Single_malt_grouping_item()
 {
   set_elt_property ("transparent", SCM_BOOL_T);
-  set_elt_property ("elements", SCM_EOL);
+  set_elt_pointer ("elements", SCM_EOL);
 
   // this is weird! , but needed!
   set_extent_callback (0, X_AXIS);
@@ -26,9 +27,7 @@ void
 Single_malt_grouping_item::add_item (Item* i)
 {
   assert (i);
-  set_elt_property ("elements",
-                   gh_cons (i->self_scm_,
-                            get_elt_property ("elements")));
+  Pointer_group_interface (this).add_element (i);
 
   add_dependency (i);
 }
@@ -39,7 +38,7 @@ Single_malt_grouping_item::my_width () const
   Paper_column * pc = column_l ();
   Interval w;
   
-  for (SCM s = get_elt_property ("elements"); gh_pair_p (s); s = gh_cdr (s))
+  for (SCM s = get_elt_pointer ("elements"); gh_pair_p (s); s = gh_cdr (s))
     {
       SCM elt = gh_car (s);
       if (!SMOB_IS_TYPE_B(Score_element, elt))
index 13b2c7b7c8e6e77736f6727bae02ebfd6e28984a..f0d82bf1b3a19bf3a167a1cffae6a3d4e3eb0b22 100644 (file)
@@ -232,7 +232,7 @@ Slur::add_column (Note_column*n)
     warning (_ ("Putting slur over rest.  Ignoring."));
   else
     {
-      Group_interface (this, "note-columns").add_element (n);
+      Pointer_group_interface (this, "note-columns").add_element (n);
       add_dependency (n);
     }
 }
@@ -271,7 +271,7 @@ Direction
 Slur::get_default_dir () const
 {
   Link_array<Note_column> encompass_arr =
-    Group_interface__extract_elements (this, (Note_column*)0, "note-columns");
+    Pointer_group_interface__extract_elements (this, (Note_column*)0, "note-columns");
   
   Direction d = DOWN;
   for (int i=0; i < encompass_arr.size (); i ++) 
@@ -289,7 +289,7 @@ void
 Slur::do_add_processing ()
 {
   Link_array<Note_column> encompass_arr =
-    Group_interface__extract_elements (this, (Note_column*)0, "note-columns");
+    Pointer_group_interface__extract_elements (this, (Note_column*)0, "note-columns");
 
   if (encompass_arr.size ())
     {
@@ -357,7 +357,7 @@ void
 Slur::set_extremities ()
 {
   Link_array<Note_column> encompass_arr =
-    Group_interface__extract_elements (this, (Note_column*)0, "note-columns");
+    Pointer_group_interface__extract_elements (this, (Note_column*)0, "note-columns");
 
   if (!encompass_arr.size ())
     {
@@ -517,7 +517,7 @@ int
 Slur::cross_staff_count ()const
 {
   Link_array<Note_column> encompass_arr =
-    Group_interface__extract_elements (this, (Note_column*)0, "note-columns");
+    Pointer_group_interface__extract_elements (this, (Note_column*)0, "note-columns");
 
   int k=0;
 
@@ -534,7 +534,7 @@ Array<Offset>
 Slur::get_encompass_offset_arr () const
 {
   Link_array<Note_column> encompass_arr =
-    Group_interface__extract_elements (this, (Note_column*)0, "note-columns");
+    Pointer_group_interface__extract_elements (this, (Note_column*)0, "note-columns");
   
   Array<Offset> offset_arr;
 
index c5f29de20fadfba00b1bb743d57519b6e727085f..f33f70fdcedb3bb092a7f7c4e6471eb1bdcd2e42 100644 (file)
@@ -18,7 +18,7 @@
 void
 Span_bar::add_bar (Score_element*b)
 {
-  Group_interface gi (this);
+  Pointer_group_interface gi (this);
   gi.add_element (b);
 
   add_dependency (b);
@@ -26,7 +26,7 @@ Span_bar::add_bar (Score_element*b)
 
 
 Interval
-Span_bar::width_callback (Score_element const *se, Axis a)
+Span_bar::width_callback (Score_element const *se, Axis )
 {
   Span_bar*  s= dynamic_cast<Span_bar*> ((Score_element*)se);
   String gl = ly_scm2string (s->get_elt_property ("glyph"));
@@ -112,7 +112,7 @@ Span_bar::get_bar_size () const
 
 Span_bar::Span_bar ()
 {
-  group (this).set_interface ();
+  Pointer_group_interface(this).set_interface ();
   set_extent_callback (width_callback, X_AXIS);
   
   // dim_cache_[Y_AXIS]->set_extent_callback (Axis_group_interface::group_extent_callback);
index 4bed0bf75264e00da63edfe0fbd094aa1f2112c9..3baf35e3ef9e816d1994d8b90b94cb1a9af9aa7d 100644 (file)
@@ -70,7 +70,7 @@ Staff_symbol_engraver::do_removal_processing()
 void
 Staff_symbol_engraver::acknowledge_element (Score_element_info s)
 {
-  s.elem_l_->set_elt_property ("staff-symbol", span_p_->self_scm_);
+  s.elem_l_->set_elt_pointer ("staff-symbol", span_p_->self_scm_);
   s.elem_l_->add_dependency (span_p_); // UGH. UGH. UGH 
 }
 
index ed53435809f48b8407957c1360f8b1b505c83a0e..328957da32161d9be1711a46b84a1ed95e9f8f56 100644 (file)
@@ -28,7 +28,7 @@ Staff_symbol_referencer_interface::set_interface ()
 bool
 Staff_symbol_referencer_interface::has_interface_b ()
 {
-  return unsmob_element (elt_l_->get_elt_property ("staff-symbol"))
+  return unsmob_element (elt_l_->get_elt_pointer ("staff-symbol"))
     || gh_number_p (elt_l_->get_elt_property ("staff-position"));
 }
 
@@ -43,7 +43,7 @@ Staff_symbol_referencer_interface::line_count () const
 Staff_symbol*
 Staff_symbol_referencer_interface::staff_symbol_l () const
 {
-  SCM st = elt_l_->get_elt_property ("staff-symbol");
+  SCM st = elt_l_->get_elt_pointer ("staff-symbol");
   return dynamic_cast<Staff_symbol* > (unsmob_element(st));
 }
 
index 3da86edc036b9993f1828e9579d7ffa90ae10bea..4cb96a2e83803033f072bad3310b8df5b2d265a9 100644 (file)
 
 Stem_tremolo::Stem_tremolo ()
 {
-  set_elt_property ("stem", SCM_EOL);
+  set_elt_pointer ("stem", SCM_EOL);
 }
 
 
 Stem *
 Stem_tremolo::stem_l ()const
 {
-  SCM s =   get_elt_property ("stem");
+  SCM s =   get_elt_pointer ("stem");
 
   return dynamic_cast<Stem*> (  unsmob_element (s));
 }
@@ -132,7 +132,7 @@ Stem_tremolo::do_brew_molecule () const
 void
 Stem_tremolo::set_stem (Stem *s)
 {
-  set_elt_property ("stem", s->self_scm_);
+  set_elt_pointer ("stem", s->self_scm_);
   add_dependency (s);
 }
 
index d883849bc664684c9fa4f941acb9226b82a679ca..a6ae80f1e9f92548564714623646cebd771ad112 100644 (file)
@@ -132,7 +132,7 @@ Stem::type_i () const
 Score_element*
 Stem::support_head ()const
 {
-  SCM h = get_elt_property ("support-head");
+  SCM h = get_elt_pointer ("support-head");
   Score_element * nh = unsmob_element (h);
   if (nh)
     return nh;
@@ -142,7 +142,7 @@ Stem::support_head ()const
        UGH.
        */
       
-      return unsmob_element (gh_car (get_elt_property ("heads")));
+      return unsmob_element (gh_car (get_elt_pointer ("heads")));
     }
   else
     return first_head ();
@@ -152,7 +152,7 @@ Stem::support_head ()const
 int
 Stem::heads_i ()const
 {
-  Group_interface gi (this, "heads");
+  Pointer_group_interface gi (this, "heads");
   return gi.count ();
 }
 
@@ -179,7 +179,7 @@ Stem::extremal_heads () const
   Drul_array<Note_head *> exthead;
   exthead[LEFT] = exthead[RIGHT] =0;
   
-  for (SCM s = get_elt_property ("heads"); gh_pair_p (s); s = gh_cdr (s))
+  for (SCM s = get_elt_pointer ("heads"); gh_pair_p (s); s = gh_cdr (s))
     {
       Note_head * n = dynamic_cast<Note_head*> (unsmob_element (gh_car (s)));
       Staff_symbol_referencer_interface si (n);
@@ -202,10 +202,10 @@ Stem::extremal_heads () const
 void
 Stem::add_head (Rhythmic_head *n)
 {
-  n->set_elt_property ("stem", this->self_scm_);
+  n->set_elt_pointer ("stem", this->self_scm_);
   n->add_dependency (this);
 
-  Group_interface gi (this);
+  Pointer_group_interface gi (this);
   if (Note_head *nh = dynamic_cast<Note_head *> (n))
     gi.name_ = "heads";
   else
@@ -216,8 +216,8 @@ Stem::add_head (Rhythmic_head *n)
 
 Stem::Stem ()
 {
-  set_elt_property ("heads", SCM_EOL);
-  set_elt_property ("rests", SCM_EOL);
+  set_elt_pointer ("heads", SCM_EOL);
+  set_elt_pointer ("rests", SCM_EOL);
 
   add_offset_callback ( &Stem::off_callback, X_AXIS);
 }
@@ -338,7 +338,7 @@ Stem::position_noteheads ()
     return;
   
   Link_array<Score_element> heads =
-    Group_interface__extract_elements (this, (Score_element*)0, "heads");
+    Pointer_group_interface__extract_elements (this, (Score_element*)0, "heads");
 
   heads.sort (compare_position);
   Direction dir =get_direction ();
@@ -443,7 +443,7 @@ Stem::dim_callback (Score_element const *se, Axis )
   Stem * s = dynamic_cast<Stem*> ((Score_element*)se);
   
   Interval r (0, 0);
-  if (unsmob_element (s->get_elt_property ("beam")) || abs (s->flag_i ()) <= 2)
+  if (unsmob_element (s->get_elt_pointer ("beam")) || abs (s->flag_i ()) <= 2)
     ;  // TODO!
   else
     {
@@ -517,7 +517,7 @@ Stem::off_callback (Score_element const* se, Axis)
 Beam*
 Stem::beam_l ()const
 {
-  SCM b=  get_elt_property ("beam");
+  SCM b=  get_elt_pointer ("beam");
   return dynamic_cast<Beam*> (unsmob_element (b));
 }
 
index caa138477d667fde98a0101abc5bed05171a62ee..d84e707b2cce8f1f2efbee381ed1a01ce649f3db 100644 (file)
@@ -39,7 +39,7 @@ System_start_delimiter_engraver::acknowledge_element (Score_element_info inf)
        don't add as Axis_group_interface (delim_).add_element (),
        because that would set the parent as well */
          
-      Group_interface (delim_).add_element (inf.elem_l_);
+      Pointer_group_interface (delim_).add_element (inf.elem_l_);
     }
   else if (System_start_delimiter * b = dynamic_cast<System_start_delimiter *> (inf.elem_l_))
     {
index 928a1a99245c4f808b6b6ddb778984979d26d3cb..763b3a57738bee97c75cff3c3d1897b02d6df259 100644 (file)
@@ -41,7 +41,7 @@ System_start_delimiter::staff_bracket (Real height) const
 System_start_delimiter::System_start_delimiter ()
 {
   set_extent_callback (0, Y_AXIS);
-  Group_interface (this).set_interface();
+  Pointer_group_interface (this).set_interface();
 }
 
 Molecule
@@ -56,7 +56,7 @@ System_start_delimiter::after_line_breaking ()
 {
   SCM   gl = get_elt_property ("glyph");
   
-  if (scm_ilength (get_elt_property ("elements")) <=  1 && gl == ly_symbol2scm ("bar-line"))
+  if (scm_ilength (get_elt_pointer ("elements")) <=  1 && gl == ly_symbol2scm ("bar-line"))
     {
       set_elt_property ("transparent", SCM_BOOL_T);
       set_extent_callback (0, X_AXIS);
index 78f398d1e0c4d996fbbcc212aaef65c1c81e357b..01935d3526e71c6d61c882d6629564cb3da69f3c 100644 (file)
@@ -15,7 +15,7 @@
 
 Tie_column::Tie_column ()
 {
-  set_elt_property ("ties", SCM_EOL);
+  set_elt_pointer ("ties", SCM_EOL);
   set_extent_callback (0, X_AXIS);
   set_extent_callback (0, Y_AXIS);  
   set_elt_property ("transparent", SCM_BOOL_T);
@@ -24,14 +24,14 @@ Tie_column::Tie_column ()
 void
 Tie_column::add_tie (Tie *s)
 {
-  Group_interface g (this, "ties");
+  Pointer_group_interface g (this, "ties");
   if (!g.count ())
     {
       set_bound (LEFT, s->head (LEFT));
       set_bound (RIGHT, s->head (RIGHT));
     }
   
-  group (this, "ties").add_element (s);
+  Pointer_group_interface (this, "ties").add_element (s);
   s->add_dependency (this);
 }
 
@@ -56,7 +56,7 @@ void
 Tie_column::set_directions ()
 {
   Link_array<Tie> s =
-    Group_interface__extract_elements (this, (Tie*)0, "ties");
+    Pointer_group_interface__extract_elements (this, (Tie*)0, "ties");
 
 
   Direction d = directional_element (this).get ();
index 2b0e032b7c835688d4df01b1657a31a3829841dd..baba2c7061a3f85909da74d99b389a37c9a7a307 100644 (file)
@@ -24,7 +24,7 @@ void
 Tie::set_head (Direction d, Item * head_l)
 {
   assert (!head (d));
-  index_set_cell (get_elt_property ("heads"), d, head_l->self_scm_);
+  index_set_cell (get_elt_pointer ("heads"), d, head_l->self_scm_);
   
   set_bound (d, head_l);
   add_dependency (head_l);
@@ -32,7 +32,7 @@ Tie::set_head (Direction d, Item * head_l)
 
 Tie::Tie()
 {
-  set_elt_property ("heads", gh_cons (SCM_EOL, SCM_EOL));
+  set_elt_pointer ("heads", gh_cons (SCM_EOL, SCM_EOL));
   dy_f_drul_[LEFT] = dy_f_drul_[RIGHT] = 0.0;
   dx_f_drul_[LEFT] = dx_f_drul_[RIGHT] = 0.0;
 
@@ -41,7 +41,7 @@ Tie::Tie()
 Note_head* 
 Tie::head (Direction d) const
 {
-  SCM c = get_elt_property ("heads");
+  SCM c = get_elt_pointer ("heads");
   c = index_cell (c, d);
 
   return dynamic_cast<Note_head*> (unsmob_element (c));  
@@ -87,8 +87,8 @@ Tie::do_add_processing()
       new_head_drul[d] = head((Direction)-d);
   } while (flip(&d) != LEFT);
 
-  index_set_cell (get_elt_property ("heads"), LEFT, new_head_drul[LEFT]->self_scm_ );
-  index_set_cell (get_elt_property ("heads"), RIGHT, new_head_drul[RIGHT]->self_scm_ );
+  index_set_cell (get_elt_pointer ("heads"), LEFT, new_head_drul[LEFT]->self_scm_ );
+  index_set_cell (get_elt_pointer ("heads"), RIGHT, new_head_drul[RIGHT]->self_scm_ );
 }
 
 void
index 3bafebeec82dc4bc32b8f4dac2e7407010cc0f45..7b9a4531eb06f4f4750cd481e943196eb26cb075 100644 (file)
@@ -24,8 +24,8 @@
 
 Tuplet_spanner::Tuplet_spanner ()
 {
-  set_elt_property ("beams", SCM_EOL);
-  set_elt_property ("columns", SCM_EOL);
+  set_elt_pointer ("beams", SCM_EOL);
+  set_elt_pointer ("columns", SCM_EOL);
 
   // ugh.
   set_elt_property ("delta-y", gh_int2scm (0));
@@ -60,10 +60,10 @@ Tuplet_spanner::do_brew_molecule () const
   else if (bracket == ly_symbol2scm ("if-no-beam"))
     number_visibility = !par_beam;
   
-  if (gh_pair_p (get_elt_property ("columns")))
+  if (gh_pair_p (get_elt_pointer ("columns")))
     {
       Link_array<Note_column> column_arr=
-       Group_interface__extract_elements (this, (Note_column*)0, "columns");
+       Pointer_group_interface__extract_elements (this, (Note_column*)0, "columns");
        
       Real ncw = column_arr.top ()->extent(X_AXIS).length ();
       Real w = spanner_length () + ncw;
@@ -114,10 +114,10 @@ Tuplet_spanner::do_brew_molecule () const
 void
 Tuplet_spanner::do_add_processing ()
 {
-  if (gh_pair_p (get_elt_property ("columns")))
+  if (gh_pair_p (get_elt_pointer ("columns")))
     {
       Link_array<Note_column> column_arr=
-       Group_interface__extract_elements (this, (Note_column*)0, "columns");
+       Pointer_group_interface__extract_elements (this, (Note_column*)0, "columns");
       
       set_bound (LEFT, column_arr[0]);
       set_bound (RIGHT, column_arr.top ());  
@@ -133,10 +133,10 @@ void
 Tuplet_spanner::calc_position_and_height (Real *offset, Real * dy) const
 {
   Link_array<Note_column> column_arr=
-    Group_interface__extract_elements (this, (Note_column*)0, "columns");
+    Pointer_group_interface__extract_elements (this, (Note_column*)0, "columns");
 
 
-  Score_element * common = common_refpoint (get_elt_property ("columns"), Y_AXIS);
+  Score_element * common = common_refpoint (get_elt_pointer ("columns"), Y_AXIS);
   
   Direction d = directional_element (this).get ();
 
@@ -190,7 +190,7 @@ void
 Tuplet_spanner::calc_dy (Real * dy) const
 {
   Link_array<Note_column> column_arr=
-    Group_interface__extract_elements (this, (Note_column*)0, "columns");
+    Pointer_group_interface__extract_elements (this, (Note_column*)0, "columns");
 
  
   Direction d = directional_element (this).get ();
@@ -202,7 +202,7 @@ void
 Tuplet_spanner::after_line_breaking ()
 {
   Link_array<Note_column> column_arr=
-    Group_interface__extract_elements (this, (Note_column*)0, "columns");
+    Pointer_group_interface__extract_elements (this, (Note_column*)0, "columns");
 
   if (!column_arr.size ())
     {
@@ -226,9 +226,9 @@ Tuplet_spanner::after_line_breaking ()
 
   translate_axis (offset, Y_AXIS);
   
-  if (scm_ilength (get_elt_property ("beams")) == 1)
+  if (scm_ilength (get_elt_pointer ("beams")) == 1)
     {
-      SCM bs = get_elt_property ("beams");
+      SCM bs = get_elt_pointer ("beams");
       Score_element *b = unsmob_element (gh_car (bs));
       Beam * beam_l = dynamic_cast<Beam*> (b);
       if (!broken_b () 
@@ -252,7 +252,7 @@ Tuplet_spanner::get_default_dir () const
     }
 
   d = UP ;
-  for (SCM s = get_elt_property ("columns"); gh_pair_p (s); s = gh_cdr (s))
+  for (SCM s = get_elt_pointer ("columns"); gh_pair_p (s); s = gh_cdr (s))
     {
       Score_element * sc = unsmob_element (gh_car (s));
       Note_column * nc = dynamic_cast<Note_column*> (sc);
@@ -270,14 +270,14 @@ void
 Tuplet_spanner::add_beam (Beam *b)
 {
   add_dependency (b);
-  Group_interface gi (this, "beams");
+  Pointer_group_interface gi (this, "beams");
   gi.add_element (b);
 }
 
 void
 Tuplet_spanner::add_column (Note_column*n)
 {
-  Group_interface gi (this, "columns");
+  Pointer_group_interface gi (this, "columns");
   gi.add_element (n);
 
   add_dependency (n);
index d4604f151a124d47ba85dfb1592da3c2918bd9a3..357a9072d4c96dc40ccaa6e7ea5b4292538ba783 100644 (file)
@@ -24,7 +24,7 @@
 
 Volta_spanner::Volta_spanner ()
 {
-  set_elt_property ("bars", SCM_EOL);
+  set_elt_pointer ("bars", SCM_EOL);
   Side_position_interface (this).set_axis (Y_AXIS);
   directional_element (this).set (UP);
 }
@@ -46,7 +46,7 @@ Volta_spanner::do_brew_molecule () const
   Molecule  mol;
 
   Link_array<Bar> bar_arr
-    = Group_interface__extract_elements (this, (Bar*)0, "bars");
+    = Pointer_group_interface__extract_elements (this, (Bar*)0, "bars");
 
   if (!bar_arr.size ())
     return mol;
@@ -100,7 +100,7 @@ Volta_spanner::do_add_processing ()
 {
 
   Link_array<Bar> bar_arr
-    = Group_interface__extract_elements (this, (Bar*)0, "bars");
+    = Pointer_group_interface__extract_elements (this, (Bar*)0, "bars");
 
   if (bar_arr.size ())
     {
@@ -118,7 +118,7 @@ Volta_spanner::after_line_breaking ()
 void
 Volta_spanner::add_bar  (Bar* b)
 {
-  Group_interface gi(this, "bars");
+  Pointer_group_interface gi(this, "bars");
   gi.add_element (b);
 
   Side_position_interface (this).add_support (b);