From e4f07a592ebde9621dede5a47430a51b9c232eb3 Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Thu, 25 May 2000 19:52:28 +0200 Subject: [PATCH] patch::: 1.3.54.hwn1 1.3.1.3.54.hwn1 =========== * Massive search replace patch: store pointers and properties separately, in preparation of property collapse. --- CHANGES | 6 ++ VERSION | 2 +- lily/align-interface.cc | 6 +- lily/axis-group-interface.cc | 12 ++-- lily/bar-number-engraver.cc | 2 +- lily/beam.cc | 14 ++--- lily/break-align-engraver.cc | 2 +- lily/break-align-item.cc | 2 +- lily/collision.cc | 6 +- lily/dot-column.cc | 6 +- lily/dynamic-engraver.cc | 2 +- lily/engraver.cc | 2 +- lily/group-interface.cc | 21 ------- lily/hara-kiri-vertical-group-spanner.cc | 8 +-- lily/include/group-interface.hh | 19 ++++-- lily/include/score-element.hh | 17 ++++-- lily/item.cc | 7 ++- lily/line-of-score.cc | 42 ++++++------- lily/multi-measure-rest-engraver.cc | 2 +- lily/multi-measure-rest.cc | 10 +-- lily/note-column.cc | 24 ++++---- lily/pointer-group-interface.cc | 58 ++++++++++++++++++ lily/property-engraver.cc | 2 +- lily/rest-collision.cc | 12 ++-- lily/rhythmic-head.cc | 6 +- lily/scm-hash.cc | 2 +- lily/score-element.cc | 78 ++++++++++++++++-------- lily/score-engraver.cc | 2 +- lily/script-column.cc | 4 +- lily/separating-group-spanner.cc | 11 ++-- lily/side-position-interface.cc | 9 ++- lily/single-malt-grouping-item.cc | 9 ++- lily/slur.cc | 12 ++-- lily/span-bar.cc | 6 +- lily/staff-symbol-engraver.cc | 2 +- lily/staff-symbol-referencer.cc | 4 +- lily/stem-tremolo.cc | 6 +- lily/stem.cc | 22 +++---- lily/system-start-delimiter-engraver.cc | 2 +- lily/system-start-delimiter.cc | 4 +- lily/tie-column.cc | 8 +-- lily/tie.cc | 10 +-- lily/tuplet-spanner.cc | 30 ++++----- lily/volta-spanner.cc | 8 +-- 44 files changed, 300 insertions(+), 219 deletions(-) create mode 100644 lily/pointer-group-interface.cc diff --git a/CHANGES b/CHANGES index 496aaedfee..1e07902ff9 100644 --- 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 c3ec2ace94..12c3a81827 100644 --- 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. diff --git a/lily/align-interface.cc b/lily/align-interface.cc index af9089b0eb..c377935871 100644 --- a/lily/align-interface.cc +++ b/lily/align-interface.cc @@ -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 elems; Link_array 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)) { diff --git a/lily/axis-group-interface.cc b/lily/axis-group-interface.cc index 06e7436685..a08865c19c 100644 --- a/lily/axis-group-interface.cc +++ b/lily/axis-group-interface.cc @@ -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) diff --git a/lily/bar-number-engraver.cc b/lily/bar-number-engraver.cc index 3aa50afbf2..a9d39a62f6 100644 --- a/lily/bar-number-engraver.cc +++ b/lily/bar-number-engraver.cc @@ -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; } diff --git a/lily/beam.cc b/lily/beam.cc index e19a82270b..d7461746cc 100644 --- a/lily/beam.cc +++ b/lily/beam.cc @@ -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 (unsmob_element (gh_car (s))) : 0; } diff --git a/lily/break-align-engraver.cc b/lily/break-align-engraver.cc index c358df46c4..6a3293c73e 100644 --- a/lily/break-align-engraver.cc +++ b/lily/break-align-engraver.cc @@ -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_); diff --git a/lily/break-align-item.cc b/lily/break-align-item.cc index 74fc20e399..ca3925cf4a 100644 --- a/lily/break-align-item.cc +++ b/lily/break-align-item.cc @@ -36,7 +36,7 @@ Break_align_item::before_line_breaking () Real interline= paper_l ()->get_var ("interline"); Link_array elems; Link_array 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++) diff --git a/lily/collision.cc b/lily/collision.cc index e3eb69a403..81de09987f 100644 --- a/lily/collision.cc +++ b/lily/collision.cc @@ -73,7 +73,7 @@ Collision::automatic_shift () Drul_array > 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)) diff --git a/lily/dot-column.cc b/lily/dot-column.cc index 75f8391fe9..322a188653 100644 --- a/lily/dot-column.cc +++ b/lily/dot-column.cc @@ -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 = Group_interface__extract_elements (this, (Dots*)0 , "dots"); + Link_array dots = Pointer_group_interface__extract_elements (this, (Dots*)0 , "dots"); dots.sort (Dot_column::compare); if (dots.size () < 2) diff --git a/lily/dynamic-engraver.cc b/lily/dynamic-engraver.cc index 9a8675caee..af10c5037d 100644 --- a/lily/dynamic-engraver.cc +++ b/lily/dynamic-engraver.cc @@ -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); } diff --git a/lily/engraver.cc b/lily/engraver.cc index 2211e8ac32..8ae01f77b6 100644 --- a/lily/engraver.cc +++ b/lily/engraver.cc @@ -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; diff --git a/lily/group-interface.cc b/lily/group-interface.cc index a24e883da6..b78783c192 100644 --- a/lily/group-interface.cc +++ b/lily/group-interface.cc @@ -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; -} diff --git a/lily/hara-kiri-vertical-group-spanner.cc b/lily/hara-kiri-vertical-group-spanner.cc index 12d5093c07..76c95fcb8b 100644 --- a/lily/hara-kiri-vertical-group-spanner.cc +++ b/lily/hara-kiri-vertical-group-spanner.cc @@ -15,22 +15,20 @@ 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; diff --git a/lily/include/group-interface.hh b/lily/include/group-interface.hh index 72bc892258..e2eafc6de4 100644 --- a/lily/include/group-interface.hh +++ b/lily/include/group-interface.hh @@ -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 Link_array -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 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)); diff --git a/lily/include/score-element.hh b/lily/include/score-element.hh index e803d487fe..1c0d7e4ef3 100644 --- a/lily/include/score-element.hh +++ b/lily/include/score-element.hh @@ -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. diff --git a/lily/item.cc b/lily/item.cc index ed98073452..feab9823ef 100644 --- a/lily/item.cc +++ b/lily/item.cc @@ -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 ())); } diff --git a/lily/line-of-score.cc b/lily/line-of-score.cc index abc8b0a455..721240dbf2 100644 --- a/lily/line-of-score.cc +++ b/lily/line-of-score.cc @@ -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 (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 Line_of_score::column_l_arr ()const { Link_array 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); diff --git a/lily/multi-measure-rest-engraver.cc b/lily/multi-measure-rest-engraver.cc index 6a49f50a54..fa7573888c 100644 --- a/lily/multi-measure-rest-engraver.cc +++ b/lily/multi-measure-rest-engraver.cc @@ -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_); /* diff --git a/lily/multi-measure-rest.cc b/lily/multi-measure-rest.cc index 0d360c945b..ff02759d3c 100644 --- a/lily/multi-measure-rest.cc +++ b/lily/multi-measure-rest.cc @@ -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 column_arr (Group_interface__extract_elements (this, (Item*)0, "columns")); + Link_array 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); diff --git a/lily/note-column.cc b/lily/note-column.cc index 1f424860fe..7b8426077d 100644 --- a/lily/note-column.cc +++ b/lily/note-column.cc @@ -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 (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 (h)) { - Group_interface gi (this, "rests"); + Pointer_group_interface gi (this, "rests"); gi.add_element (h); } if (Note_head *nh=dynamic_cast (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 index 0000000000..dd40723e39 --- /dev/null +++ b/lily/pointer-group-interface.cc @@ -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 + + */ +#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); + } +} + diff --git a/lily/property-engraver.cc b/lily/property-engraver.cc index b60416ef42..a509bd1adb 100644 --- a/lily/property-engraver.cc +++ b/lily/property-engraver.cc @@ -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; diff --git a/lily/rest-collision.cc b/lily/rest-collision.cc index df842f8f33..d713630dbe 100644 --- a/lily/rest-collision.cc +++ b/lily/rest-collision.cc @@ -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 (e); @@ -61,9 +61,9 @@ void Rest_collision::before_line_breaking () { Link_array rest_l_arr = - Group_interface__extract_elements (this, (Note_column*) 0, "rests"); + Pointer_group_interface__extract_elements (this, (Note_column*) 0, "rests"); Link_array 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); diff --git a/lily/rhythmic-head.cc b/lily/rhythmic-head.cc index 64d2bd4bdd..83aa03820b 100644 --- a/lily/rhythmic-head.cc +++ b/lily/rhythmic-head.cc @@ -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 (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 (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); } diff --git a/lily/scm-hash.cc b/lily/scm-hash.cc index 551a050a2a..8a2094b86e 100644 --- a/lily/scm-hash.cc +++ b/lily/scm-hash.cc @@ -65,7 +65,7 @@ Scheme_hash_table::print_smob (SCM s, SCM p, scm_print_state*) sprintf (str, "#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); diff --git a/lily/score-element.cc b/lily/score-element.cc index 9aeac9c546..65c5e496af 100644 --- a/lily/score-element.cc +++ b/lily/score-element.cc @@ -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 (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); diff --git a/lily/score-engraver.cc b/lily/score-engraver.cc index 7b7dbe428a..76500dcf6b 100644 --- a/lily/score-engraver.cc +++ b/lily/score-engraver.cc @@ -1,5 +1,5 @@ /* - score-grav.cc -- implement Score_engraver + score-engraver.cc -- implement Score_engraver source file of the GNU LilyPond music typesetter diff --git a/lily/script-column.cc b/lily/script-column.cc index 35d9d02604..ad776158a2 100644 --- a/lily/script-column.cc +++ b/lily/script-column.cc @@ -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 > arrs; Link_array 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++) diff --git a/lily/separating-group-spanner.cc b/lily/separating-group-spanner.cc index 295bef4824..ea15f96c09 100644 --- a/lily/separating-group-spanner.cc +++ b/lily/separating-group-spanner.cc @@ -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 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(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); } diff --git a/lily/side-position-interface.cc b/lily/side-position-interface.cc index 6e018180fd..28773f479f 100644 --- a/lily/side-position-interface.cc +++ b/lily/side-position-interface.cc @@ -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)); diff --git a/lily/single-malt-grouping-item.cc b/lily/single-malt-grouping-item.cc index 3ab74cdc25..e12f7ed0c1 100644 --- a/lily/single-malt-grouping-item.cc +++ b/lily/single-malt-grouping-item.cc @@ -10,11 +10,12 @@ #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)) diff --git a/lily/slur.cc b/lily/slur.cc index 13b2c7b7c8..f0d82bf1b3 100644 --- a/lily/slur.cc +++ b/lily/slur.cc @@ -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 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 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 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 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 Slur::get_encompass_offset_arr () const { Link_array 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_arr; diff --git a/lily/span-bar.cc b/lily/span-bar.cc index c5f29de20f..f33f70fdce 100644 --- a/lily/span-bar.cc +++ b/lily/span-bar.cc @@ -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 ((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); diff --git a/lily/staff-symbol-engraver.cc b/lily/staff-symbol-engraver.cc index 4bed0bf752..3baf35e3ef 100644 --- a/lily/staff-symbol-engraver.cc +++ b/lily/staff-symbol-engraver.cc @@ -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 } diff --git a/lily/staff-symbol-referencer.cc b/lily/staff-symbol-referencer.cc index ed53435809..328957da32 100644 --- a/lily/staff-symbol-referencer.cc +++ b/lily/staff-symbol-referencer.cc @@ -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 (unsmob_element(st)); } diff --git a/lily/stem-tremolo.cc b/lily/stem-tremolo.cc index 3da86edc03..4cb96a2e83 100644 --- a/lily/stem-tremolo.cc +++ b/lily/stem-tremolo.cc @@ -25,14 +25,14 @@ 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 ( 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); } diff --git a/lily/stem.cc b/lily/stem.cc index d883849bc6..a6ae80f1e9 100644 --- a/lily/stem.cc +++ b/lily/stem.cc @@ -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 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 (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 (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 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 ((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 (unsmob_element (b)); } diff --git a/lily/system-start-delimiter-engraver.cc b/lily/system-start-delimiter-engraver.cc index caa138477d..d84e707b2c 100644 --- a/lily/system-start-delimiter-engraver.cc +++ b/lily/system-start-delimiter-engraver.cc @@ -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 (inf.elem_l_)) { diff --git a/lily/system-start-delimiter.cc b/lily/system-start-delimiter.cc index 928a1a9924..763b3a5773 100644 --- a/lily/system-start-delimiter.cc +++ b/lily/system-start-delimiter.cc @@ -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); diff --git a/lily/tie-column.cc b/lily/tie-column.cc index 78f398d1e0..01935d3526 100644 --- a/lily/tie-column.cc +++ b/lily/tie-column.cc @@ -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 s = - Group_interface__extract_elements (this, (Tie*)0, "ties"); + Pointer_group_interface__extract_elements (this, (Tie*)0, "ties"); Direction d = directional_element (this).get (); diff --git a/lily/tie.cc b/lily/tie.cc index 2b0e032b7c..baba2c7061 100644 --- a/lily/tie.cc +++ b/lily/tie.cc @@ -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 (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 diff --git a/lily/tuplet-spanner.cc b/lily/tuplet-spanner.cc index 3bafebeec8..7b9a4531eb 100644 --- a/lily/tuplet-spanner.cc +++ b/lily/tuplet-spanner.cc @@ -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 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 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 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 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 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 (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 (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); diff --git a/lily/volta-spanner.cc b/lily/volta-spanner.cc index d4604f151a..357a9072d4 100644 --- a/lily/volta-spanner.cc +++ b/lily/volta-spanner.cc @@ -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_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_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); -- 2.39.2