1 #ifndef buffer_manager_hh_INCLUDED
2 #define buffer_manager_hh_INCLUDED
3 
4 #include "buffer.hh"
5 #include "vector.hh"
6 
7 #include <memory>
8 
9 namespace Kakoune
10 {
11 
12 class BufferManager : public Singleton<BufferManager>
13 {
14 public:
15     using BufferList = Vector<std::unique_ptr<Buffer>, MemoryDomain::BufferMeta>;
16     using iterator = BufferList::const_iterator;
17 
18     ~BufferManager();
19 
20     Buffer* create_buffer(String name, Buffer::Flags flags, BufferLines lines, ByteOrderMark bom, EolFormat eolformat, FsStatus fs_status);
21 
22     void delete_buffer(Buffer& buffer);
23 
begin() const24     iterator begin() const { return m_buffers.cbegin(); }
end() const25     iterator end() const { return m_buffers.cend(); }
count() const26     size_t   count() const { return m_buffers.size(); }
27 
28     Buffer* get_buffer_ifp(StringView name);
29     Buffer& get_buffer(StringView name);
30 
31     void arrange_buffers(ConstArrayView<String> first_ones);
32 
33     Buffer& get_first_buffer();
34 
35     void backup_modified_buffers();
36 
37     void clear_buffer_trash();
38 private:
39     BufferList m_buffers;
40     BufferList m_buffer_trash;
41 };
42 
43 }
44 
45 #endif // buffer_manager_hh_INCLUDED
46