// // aegis - project change supervisor // Copyright (C) 2004-2006, 2008 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 // . // #ifndef LIBAEGIS_FILE_REVISION_H #define LIBAEGIS_FILE_REVISION_H #include /** * The file_revision class is used to represent the path to a file * revision, and wether or not is needs to be unlinked by the * destructor. */ class file_revision { public: /** * The destructor. * Thou shalt not derive from this class. */ ~file_revision(); /** * The constructor. */ file_revision(const nstring &filename, bool need_to_unlink); /** * The copy constructor. */ file_revision(const file_revision &); /** * The assignment operator. */ file_revision &operator=(const file_revision &); /** * The get_path method is used to extract the path of the file * containing the file revision. */ nstring get_path() const { return ref->get_path(); } private: class inner { public: /** * The destructor. * Thou shalt not derive from this class. * * This method is private because you are supposed to call * one_fewer() so that the instance will delete itself once the * last reference is gone. */ ~inner(); /** * The constructor. */ inner(const nstring &filename, bool need_to_unlink); /** * The get_path method is used to extract the path of the file * containing the file revision. */ nstring get_path() const { return filename; } /** * The one_fewer method is used to notify this instance that * there is one fewer reference to it. Once all references are * gone, this instance will delete itself. */ void one_fewer(); /** * The one_more method is used to notify this instance that * there is one more reference to it. */ void one_more() { ++reference_count; } private: /** * The reference_count instance variable is used to remember * how many references exist to this. */ long reference_count; /** * The filename instance variable is used to remember the absolute * path of the file. */ nstring filename; /** * The need_to_unlink instance variable is used to remember wether * or not we need to unlink the file in the destructor. */ bool need_to_unlink; /** * The default constructor. Do not use. */ inner(); /** * The copy constructor. Do not use. */ inner(const inner &); /** * The assignment operator. Do not use. */ inner &operator=(const inner &); }; /** * The ref instance variable is used to remember the reference to * the inner reference-counted data. */ inner *ref; /** * The default constructor. */ file_revision(); }; #endif // LIBAEGIS_FILE_REVISION_H