diff options
author | Kirill Volinsky <mataes2007@gmail.com> | 2012-05-18 22:10:43 +0000 |
---|---|---|
committer | Kirill Volinsky <mataes2007@gmail.com> | 2012-05-18 22:10:43 +0000 |
commit | 725f68b6808a8a30778f58223fac75386f082785 (patch) | |
tree | ccba410760749d45139e5e78fd5e08f416ade1a0 /plugins/FreeImage/Source/CacheFile.h | |
parent | f920ef497f3299ae24fe783ce03bdd93b419f764 (diff) |
plugins folders renaming
git-svn-id: http://svn.miranda-ng.org/main/trunk@61 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins/FreeImage/Source/CacheFile.h')
-rw-r--r-- | plugins/FreeImage/Source/CacheFile.h | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/plugins/FreeImage/Source/CacheFile.h b/plugins/FreeImage/Source/CacheFile.h new file mode 100644 index 0000000000..50df26f4f1 --- /dev/null +++ b/plugins/FreeImage/Source/CacheFile.h @@ -0,0 +1,92 @@ +// ==========================================================
+// Multi-Page functions
+//
+// Design and implementation by
+// - Floris van den Berg (flvdberg@wxs.nl)
+//
+// This file is part of FreeImage 3
+//
+// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY
+// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
+// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE
+// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED
+// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT
+// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY
+// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL
+// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER
+// THIS DISCLAIMER.
+//
+// Use at your own risk!
+// ==========================================================
+
+#ifndef CACHEFILE_H
+#define CACHEFILE_H
+
+// ----------------------------------------------------------
+
+#include "FreeImage.h"
+#include "Utilities.h"
+
+// ----------------------------------------------------------
+
+static const int CACHE_SIZE = 32;
+static const int BLOCK_SIZE = (64 * 1024) - 8;
+
+// ----------------------------------------------------------
+
+#ifdef _WIN32
+#pragma pack(push, 1)
+#else
+#pragma pack(1)
+#endif // _WIN32
+
+struct Block {
+ unsigned nr;
+ unsigned next;
+ BYTE *data;
+};
+
+#ifdef _WIN32
+#pragma pack(pop)
+#else
+#pragma pack()
+#endif // _WIN32
+
+// ----------------------------------------------------------
+
+class CacheFile {
+ typedef std::list<Block *> PageCache;
+ typedef std::list<Block *>::iterator PageCacheIt;
+ typedef std::map<int, PageCacheIt> PageMap;
+ typedef std::map<int, PageCacheIt>::iterator PageMapIt;
+
+public :
+ CacheFile(const std::string filename, BOOL keep_in_memory);
+ ~CacheFile();
+
+ BOOL open();
+ void close();
+ BOOL readFile(BYTE *data, int nr, int size);
+ int writeFile(BYTE *data, int size);
+ void deleteFile(int nr);
+
+private :
+ void cleanupMemCache();
+ int allocateBlock();
+ Block *lockBlock(int nr);
+ BOOL unlockBlock(int nr);
+ BOOL deleteBlock(int nr);
+
+private :
+ FILE *m_file;
+ std::string m_filename;
+ std::list<int> m_free_pages;
+ PageCache m_page_cache_mem;
+ PageCache m_page_cache_disk;
+ PageMap m_page_map;
+ int m_page_count;
+ Block *m_current_block;
+ BOOL m_keep_in_memory;
+};
+
+#endif // CACHEFILE_H
|