]> git.donarmstrong.com Git - lilypond.git/blob - lily/protected-scm.cc
*** empty log message ***
[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
10 #include "protected-scm.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_)
25              : s.object_);
26 }
27
28 Protected_scm::~Protected_scm ()
29 {
30   if (SCM_NIMP (object_))
31     scm_gc_unprotect_object (object_);
32 }
33
34 Protected_scm & 
35 Protected_scm::operator = (SCM s)
36 {
37   if (object_ == s)
38     return *this;
39   
40   if (SCM_NIMP (object_))
41     scm_gc_unprotect_object (object_);
42
43   object_ = SCM_NIMP (s) ? scm_gc_protect_object (s) : s;
44   return *this;
45 }
46
47 Protected_scm&
48 Protected_scm::operator = (Protected_scm const &s)
49 {
50   return operator = (s.object_);
51 }
52
53 Protected_scm::operator SCM () const
54 {
55   return object_;
56 }
57
58 SCM 
59 Protected_scm::to_SCM () const
60 {
61   return object_;
62 }