diff options
Diffstat (limited to 'tools/quickbook/src/files.hpp')
-rw-r--r-- | tools/quickbook/src/files.hpp | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/tools/quickbook/src/files.hpp b/tools/quickbook/src/files.hpp index 1b0ef282b0..4f217e70cd 100644 --- a/tools/quickbook/src/files.hpp +++ b/tools/quickbook/src/files.hpp @@ -12,11 +12,10 @@ #define BOOST_QUICKBOOK_FILES_HPP #include <string> -#include <boost/filesystem/v3/path.hpp> +#include <boost/filesystem/path.hpp> #include <boost/intrusive_ptr.hpp> #include <stdexcept> #include <cassert> -#include "intrusive_base.hpp" namespace quickbook { @@ -34,20 +33,35 @@ namespace quickbook { int column; }; - struct file : intrusive_base<file> + struct file { + private: + // Non copyable + file& operator=(file const&); + file(file const&); + public: fs::path const path; std::string source; + bool is_code_snippets; private: unsigned qbk_version; + unsigned ref_count; public: file(fs::path const& path, std::string const& source, unsigned qbk_version) : - path(path), source(source), qbk_version(qbk_version) + path(path), source(source), is_code_snippets(false), + qbk_version(qbk_version), ref_count(0) {} - virtual ~file() {} + file(file const& f, std::string const& source) : + path(f.path), source(source), is_code_snippets(f.is_code_snippets), + qbk_version(f.qbk_version), ref_count(0) + {} + + virtual ~file() { + assert(!ref_count); + } unsigned version() const { assert(qbk_version); @@ -63,6 +77,11 @@ namespace quickbook { } virtual file_position position_of(std::string::const_iterator) const; + + friend void intrusive_ptr_add_ref(file* ptr) { ++ptr->ref_count; } + + friend void intrusive_ptr_release(file* ptr) + { if(--ptr->ref_count == 0) delete ptr; } }; // If version isn't supplied then it must be set later. |