]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/include/spanner.hh
Issue 5024: Rework the Preinit framework into something simpler
[lilypond.git] / lily / include / spanner.hh
index f618e9c58ef3f8ef1fb8cbfe701518df2a204754..a5ecd3dae92c451a259a45b2fa92f2702d63c651 100644 (file)
@@ -1,7 +1,7 @@
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
-  Copyright (C) 1996--2014 Han-Wen Nienhuys
+  Copyright (C) 1996--2015 Han-Wen Nienhuys
 
   LilyPond is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
     is absolutely necessary for beams, since they have to adjust the
     length of stems of notes they encompass.
 */
-class Spanner : public Grob
+
+struct Preinit_Spanner
 {
   Drul_array<Item *> spanned_drul_;
+  SCM pure_property_cache_;
+  Preinit_Spanner ();
+};
+
+class Spanner : Preinit_Spanner, public Grob
+{
   vsize break_index_;
 
   DECLARE_CLASSNAME (Spanner);
@@ -52,13 +59,6 @@ public:
   DECLARE_SCHEME_CALLBACK (bounds_width, (SCM));
   DECLARE_SCHEME_CALLBACK (kill_zero_spanned_time, (SCM));
 
-  static Spanner *unsmob (SCM s) {
-    return dynamic_cast <Spanner *> (Grob::unsmob (s));
-  }
-  static bool is_smob (SCM s) {
-    return Grob::is_smob (s) && unsmob (s);
-  }
-
   vector<Spanner *> broken_intos_;
 
   vsize get_break_index () const;
@@ -83,15 +83,12 @@ public:
   static bool less (Spanner *const &, Spanner *const &);
   virtual Grob *find_broken_piece (System *) const;
   virtual void derived_mark () const;
-  DECLARE_GROB_INTERFACE ();
   virtual System *get_system () const;
 
   SCM get_cached_pure_property (SCM sym, int start, int end);
   void cache_pure_property (SCM sym, int start, int end, SCM value);
 
 protected:
-  SCM pure_property_cache_;
-
   void set_my_columns ();
   virtual Grob *clone () const;
   virtual void do_break_processing ();