]> git.donarmstrong.com Git - lilypond.git/blob - lily/protected-scm.cc
2003 -> 2004
[lilypond.git] / lily / protected-scm.cc
1 /*   
2   protected-scm.cc --  implement Protected_scm
3   
4   source file of the GNU LilyPond music typesetter
5   
6   (c) 1998--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7   
8  */
9 #include "protected-scm.hh"
10 #include "lily-guile.hh"
11
12 Protected_scm::Protected_scm ()
13 {
14   object_ = SCM_UNDEFINED;
15 }
16
17 Protected_scm::Protected_scm (SCM s)
18 {
19   object_ = SCM_NIMP (s)  ? scm_gc_protect_object (s): s;
20 }
21
22 Protected_scm::Protected_scm (Protected_scm const &s)
23 {
24   object_ = SCM_NIMP (s.object_) ? scm_gc_protect_object (s.object_) : s.object_;
25 }
26
27 Protected_scm & 
28 Protected_scm::operator = (SCM s)
29 {
30   if (object_ == s)
31     return *this;
32   
33   if (SCM_NIMP (object_))
34     scm_gc_unprotect_object (object_);
35
36   object_ =  SCM_NIMP (s) ? scm_gc_protect_object (s): s;
37   return *this;
38 }
39
40 Protected_scm&
41 Protected_scm::operator = (Protected_scm const &s)
42 {
43   return operator= (s.object_);
44 }
45
46
47 Protected_scm::~Protected_scm ()
48 {
49   if (SCM_NIMP (object_))
50     {
51       scm_gc_unprotect_object (object_);
52     }
53 }
54
55 Protected_scm::operator SCM () const
56 {
57   return object_;
58 }
59
60 SCM 
61 Protected_scm::to_SCM () const
62 {
63   return object_;
64 }