summaryrefslogtreecommitdiff
path: root/src/buffer_manager.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2013-04-10 18:54:01 +0200
committerMaxime Coste <frrrwww@gmail.com>2013-04-10 18:54:01 +0200
commit9999e5698d50b384eb95181ef06db4cc99c90bb2 (patch)
tree2e1fb8eafc82fa4c662afd75c044589283c39ad2 /src/buffer_manager.cc
parent441f9a69efc18630b4c508688ef403b0ed81b19d (diff)
Use the buffer manager to delete buffer, throw when a client is inserting
Diffstat (limited to 'src/buffer_manager.cc')
-rw-r--r--src/buffer_manager.cc21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/buffer_manager.cc b/src/buffer_manager.cc
index 16ba65cf..37bef1bb 100644
--- a/src/buffer_manager.cc
+++ b/src/buffer_manager.cc
@@ -37,15 +37,34 @@ void BufferManager::unregister_buffer(Buffer& buffer)
{
if (*it == &buffer)
{
+ m_buffers.erase(it);
+ return;
+ }
+ }
+ kak_assert(false);
+}
+
+void BufferManager::delete_buffer(Buffer& buffer)
+{
+ for (auto it = m_buffers.begin(); it != m_buffers.end(); ++it)
+ {
+ if (*it == &buffer)
+ {
if (ClientManager::has_instance())
ClientManager::instance().ensure_no_client_uses_buffer(buffer);
- m_buffers.erase(it);
+ delete it->get();
return;
}
}
kak_assert(false);
}
+void BufferManager::delete_buffer_if_exists(const String& name)
+{
+ if (Buffer* buf = get_buffer_ifp(name))
+ delete_buffer(*buf);
+}
+
Buffer* BufferManager::get_buffer_ifp(const String& name)
{
for (auto& buf : m_buffers)