summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2012-06-28 13:45:42 +0200
committerMaxime Coste <frrrwww@gmail.com>2012-06-28 13:45:42 +0200
commit4dfc910195985d5d345fb6800f09bd9de3acd487 (patch)
tree144d5ad6267c8b944b81cffed91718d54ed33816
parent1289268174a4a5aec2090a86de5c0c0ddc6d40ee (diff)
BufferManager use safe_ptr to reference the Buffers
-rw-r--r--src/buffer.hh2
-rw-r--r--src/buffer_manager.cc6
-rw-r--r--src/buffer_manager.hh4
3 files changed, 6 insertions, 6 deletions
diff --git a/src/buffer.hh b/src/buffer.hh
index 30cc2af9..80807efe 100644
--- a/src/buffer.hh
+++ b/src/buffer.hh
@@ -106,7 +106,7 @@ struct Modification
// The Buffer class permits to read and mutate this file
// representation. It also manage modifications undo/redo and
// provides tools to deal with the line/column nature of text.
-class Buffer
+class Buffer : public SafeCountable
{
public:
enum class Type
diff --git a/src/buffer_manager.cc b/src/buffer_manager.cc
index 77c50288..3aa64aaa 100644
--- a/src/buffer_manager.cc
+++ b/src/buffer_manager.cc
@@ -13,7 +13,7 @@ BufferManager::~BufferManager()
{
// delete remaining buffers
while (not m_buffers.empty())
- delete m_buffers.begin()->second;
+ delete m_buffers.begin()->second.get();
}
void BufferManager::register_buffer(Buffer* buffer)
@@ -23,7 +23,7 @@ void BufferManager::register_buffer(Buffer* buffer)
if (m_buffers.find(name) != m_buffers.end())
throw name_not_unique();
- m_buffers[name] = buffer;
+ m_buffers[name] = safe_ptr<Buffer>(buffer);
}
void BufferManager::unregister_buffer(Buffer* buffer)
@@ -42,7 +42,7 @@ Buffer* BufferManager::get_buffer(const String& name)
if (m_buffers.find(name) == m_buffers.end())
return nullptr;
- return m_buffers[name];
+ return m_buffers[name].get();
}
CandidateList BufferManager::complete_buffername(const String& prefix,
diff --git a/src/buffer_manager.hh b/src/buffer_manager.hh
index beba6652..80198942 100644
--- a/src/buffer_manager.hh
+++ b/src/buffer_manager.hh
@@ -14,7 +14,7 @@ class Buffer;
class BufferManager : public Singleton<BufferManager>
{
public:
- typedef std::unordered_map<String, Buffer*> BufferMap;
+ typedef std::unordered_map<String, safe_ptr<Buffer>> BufferMap;
struct iterator : public BufferMap::const_iterator
{
@@ -23,7 +23,7 @@ public:
iterator() {}
iterator(const parent_type& other) : parent_type(other) {}
Buffer& operator*() const { return *(parent_type::operator*().second); }
- Buffer* operator->() const { return parent_type::operator*().second; }
+ Buffer* operator->() const { return parent_type::operator*().second.get(); }
};
~BufferManager();