// // aegis - project change supervisor // Copyright (C) 2004-2006, 2008, 2012 Peter Miller // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published // by the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // #include #include #include #include file_revision::~file_revision() { assert(ref); ref->one_fewer(); ref = 0; } void file_revision::inner::one_fewer() { --reference_count; if (reference_count <= 0) delete this; } file_revision::inner::~inner() { if (need_to_unlink) { need_to_unlink = false; os_become_orig(); os_unlink(filename.get_ref()); os_become_undo(); } } file_revision::file_revision(const nstring &arg1, bool arg2) : ref(new inner(arg1, arg2)) { assert(ref); } file_revision::inner::inner(const nstring &arg1, bool arg2) : reference_count(1), filename(arg1), need_to_unlink(arg2) { } file_revision::file_revision(const file_revision &arg) : ref(arg.ref) { ref->one_more(); } file_revision & file_revision::operator=(const file_revision &arg) { if (this != &arg) { ref->one_fewer(); ref = arg.ref; ref->one_more(); } return *this; } // vim: set ts=8 sw=4 et :