2 This file is part of LilyPond, the GNU music typesetter.
4 Copyright (C) 1998--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
6 LilyPond is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
11 LilyPond is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
20 #ifndef PROTECTED_SCM_HH
21 #define PROTECTED_SCM_HH
23 #include "lily-guile.hh"
26 Mix GUILE GC with C++ ctors and dtors.
28 This version is intended to be only used for variables of static
29 lifetime (which are not feasible to protect using the per-instance
30 mechanism of the smob classes) but possibly varying content. As a
31 result, the protection mechanism being used is the irreversible
32 scm_permanent_object. The destructor (typically called after the
33 end of program execution) does not free resources and consequently
34 does not require the memory subsystem to be still workable. A
35 working memory subsystem is only required once a non-immediate
36 Scheme value is assigned to the variable. Since creation of a
37 non-immediate Scheme value requires a working memory subsystem in
38 the first place, this is not really a restriction.
40 To avoid accidental creation of temporaries, the copy constructor is
48 Protected_scm (Protected_scm const &);
53 Protected_scm &operator = (SCM);
54 Protected_scm &operator = (Protected_scm const &);
55 operator SCM () const;
58 #endif /* PROTECTED_SCM_HH */