Improve speed of category tab title updates
[amule.git] / src / FileArea.h
blobc87fd3efd2ea788452c9afac1f2582eaf1a04c8e
1 //
2 // This file is part of the aMule Project.
3 //
4 // Copyright (c) 2009 aMule Team ( admin@amule.org / http://www.amule.org )
5 // Copyright (c) 2009 Frediano Ziglio (freddy77@gamilc.com)
6 //
7 // This program is free software; you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License as published by
9 // the Free Software Foundation; either version 2 of the License, or
10 // (at your option) any later version.
12 // This program is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 // GNU General Public License for more details.
16 //
17 // You should have received a copy of the GNU General Public License
18 // along with this program; if not, write to the Free Software
19 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
22 #ifndef FILEAREA_H
23 #define FILEAREA_H
25 #include "Types.h" // Needed for byte
27 class CFileAreaSigHandler;
28 class CFileAutoClose;
30 /**
31 * This class is used to optimize file read/write using mapped memory
32 * if supported.
34 class CFileArea
36 friend class CFileAreaSigHandler;
37 public:
38 /**
39 * Creates a uninitialized file area.
41 CFileArea();
44 /**
45 * Destructor, closes the file if opened.
47 virtual ~CFileArea();
49 /**
50 * Closes the file.
52 bool Close();
54 /**
55 * Init area with a given piece of file.
57 * @param file file to read.
58 * @param offset seek address in file.
59 * @param count bytes to read.
61 * Initialize buffer. Buffer will contain data from current file
62 * position for count length. Buffer will be a memory mapped area
63 * or a allocated buffer depending on systems.
65 void ReadAt(CFileAutoClose& file, uint64 offset, size_t count);
67 /**
68 * Start a new write
70 void StartWriteAt(CFileAutoClose& file, uint64 offset, size_t count);
72 /**
73 * Flushes data not yet written.
75 bool FlushAt(CFileAutoClose& file, uint64 offset, size_t count);
77 /**
78 * Get buffer that contains data readed or to write.
79 * @return allocated buffer or NULL if not initialized
81 byte *GetBuffer() const { return m_buffer; };
83 /**
84 * Report error pending
86 void CheckError();
88 private:
89 //! A CFileArea is neither copyable nor assignable.
90 //@{
91 CFileArea(const CFileArea&);
92 CFileArea& operator=(const CFileArea&);
93 //@}
95 /**
96 * Pointer to buffer used for read/write operations.
97 * If mapped points inside m_mmap_buffer area otherwise
98 * point to an allocated buffer to be freed.
100 byte *m_buffer;
102 * Pointer to memory mapped area or NULL if not mapped.
104 byte *m_mmap_buffer;
106 * Length of the mapped region, currently used only for munmap.
108 size_t m_length;
110 * Global chain
112 CFileArea* m_next;
114 * File handle to release
116 CFileAutoClose * m_file;
118 * true if error detected
120 bool m_error;
123 #endif // FILEAREA_H
124 // File_checked_for_headers