]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/include/object-key.hh
Merge branch 'jneeman' of git+ssh://jneem@git.sv.gnu.org/srv/git/lilypond into jneeman
[lilypond.git] / lily / include / object-key.hh
index c64fcc9deb488a6fabd64486387eb29c267f3799..c163d4c0e9a09ebfda25c5ab55ee4d1054692841 100644 (file)
@@ -3,8 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004 Han-Wen Nienhuys <hanwen@xs4all.nl>
-
+  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #ifndef OBJECT_KEY_HH
 
   In the future, they might also act as handles for external processes
   requesting notation to be drawn.
- */
+*/
 class Object_key
 {
-  DECLARE_SMOBS(Object_key,);
+  DECLARE_SMOBS (Object_key);
 
 protected:
-  Object_key();
+  Object_key ();
   virtual void derived_mark () const;
   virtual int get_type () const;
-  virtual int do_compare (Object_key const * other) const;
+  virtual int do_compare (Object_key const *other) const;
 public:
+  virtual SCM as_scheme () const;
+  static Object_key *from_scheme (SCM);
+  static Object_key *undump (SCM);
   int compare (Object_key const *other) const;
+  SCM dump () const;
 };
 
-enum Object_key_type {
-  GENERAL_KEY, 
-  GROB_KEY,
-  CONTEXT_KEY,
-  COPIED_KEY,
-};
+enum Object_key_type
+  {
+    BASE_KEY,
+    COPIED_KEY,
+    GENERAL_KEY,
+    GROB_KEY,
+    CONTEXT_KEY,
+    KEY_COUNT,
+  };
 
 class Copied_key : public Object_key
 {
 
 private:
-  Object_key const * original_;
+  Object_key const *original_;
   int copy_count_;
+
 protected:
   virtual void derived_mark () const;
   virtual int get_type () const;
-  virtual int do_compare (Object_key const * other) const;
+  virtual int do_compare (Object_key const *other) const;
+  virtual SCM as_scheme () const;
 public:
-  Copied_key (Object_key const*, int); 
+  static Object_key *from_scheme (SCM);
+  Copied_key (Object_key const *, int);
 };
 
-DECLARE_UNSMOB(Object_key, key);
+DECLARE_UNSMOB (Object_key, key);
+
+struct Object_key_less
+{
+  bool operator () (Object_key const *const &t1, Object_key const *const &t2) const
+  {
+    return t1->compare (t2);
+  }
+};
 
 #endif /* OBJECT_KEY_HH */