X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fprotected-scm.hh;h=48a26b15c995a4d948a5c4974dd9da02f414cb71;hb=905109ea0e90efa8d9c1ba02769e458a0707cc47;hp=b8f9b084c2c7fb9edcd8638f48f7eaa705ffcdfb;hpb=55ac733b69643a6bc6a83b706c65cb56efd388ef;p=lilypond.git diff --git a/lily/include/protected-scm.hh b/lily/include/protected-scm.hh index b8f9b084c2..48a26b15c9 100644 --- a/lily/include/protected-scm.hh +++ b/lily/include/protected-scm.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1998--2011 Han-Wen Nienhuys + Copyright (C) 1998--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 @@ -24,19 +24,35 @@ /* Mix GUILE GC with C++ ctors and dtors. + + This version is intended to be only used for variables of static + lifetime (which are not feasible to protect using the per-instance + mechanism of the smob classes) but possibly varying content. As a + result, the protection mechanism being used is the irreversible + scm_permanent_object. The destructor (typically called after the + end of program execution) does not free resources and consequently + does not require the memory subsystem to be still workable. A + working memory subsystem is only required once a non-immediate + Scheme value is assigned to the variable. Since creation of a + non-immediate Scheme value requires a working memory subsystem in + the first place, this is not really a restriction. + + To avoid accidental creation of temporaries, the copy constructor is + made unavailable. */ class Protected_scm { SCM object_; + static SCM list_; + static SCM last_; + Protected_scm (Protected_scm const &); public: Protected_scm (); Protected_scm (SCM); - Protected_scm (Protected_scm const &); ~Protected_scm (); Protected_scm &operator = (SCM); Protected_scm &operator = (Protected_scm const &); operator SCM () const; - SCM to_SCM () const; }; #endif /* PROTECTED_SCM_HH */