summaryrefslogtreecommitdiff
path: root/src/buffer_manager.cc
diff options
context:
space:
mode:
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)