OSDN Git Service

Add Log Cache Code
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / gitlogcache.h
1 #pragma once\r
2 \r
3 #include "Git.h"\r
4 #include "TGitPath.h"\r
5 #include "GitRev.h"\r
6 \r
7 #define LOG_INDEX_MAGIC         0x88445566\r
8 #define LOG_DATA_MAGIC          0x99aa00FF\r
9 #define LOG_DATA_ITEM_MAGIC 0x0F8899CC\r
10 #define LOG_INDEX_VERSION 0x1\r
11 \r
12 struct SLogCacheIndexHeader \r
13 {\r
14         DWORD m_Magic;\r
15         DWORD m_Version;\r
16         DWORD m_ItemCount;\r
17 };\r
18 \r
19 struct SLogCacheItem\r
20 {\r
21         BYTE  m_Hash[40];\r
22         DWORD m_Offset;\r
23 };\r
24 \r
25 struct SLogCacheRevFileHeader\r
26 {\r
27         DWORD m_Magic;\r
28         DWORD m_Version;\r
29 };\r
30 \r
31 struct SLogCacheRevItemHeader\r
32 {\r
33         DWORD m_Magic;\r
34         DWORD m_Version;\r
35         DWORD m_RevSize;\r
36         DWORD m_FileCount;\r
37 };\r
38 \r
39 #define INDEX_FILE_NAME _T("tortoisegit.index")\r
40 #define DATA_FILE_NAME _T("tortoisegit.data")\r
41 #define LOCK_FILE_NAME _T("tortoisegit.lock")\r
42 \r
43 class CLogCache\r
44 {\r
45 protected:\r
46         CFile m_IndexFile;\r
47         CFile m_DataFile;\r
48         CFile m_LockFile;\r
49 \r
50         BOOL CheckHeader(SLogCacheRevFileHeader &header)\r
51         {\r
52                 if(header.m_Magic == LOG_DATA_MAGIC)\r
53                         return TRUE;\r
54                 else\r
55                         return FALSE;\r
56 \r
57                 if(header.m_Version == LOG_INDEX_VERSION)\r
58                         return TRUE;\r
59                 else\r
60                         return FALSE;\r
61         }\r
62 \r
63         BOOL CheckHeader(SLogCacheRevItemHeader &header)\r
64         {\r
65                 if(header.m_Magic == LOG_DATA_ITEM_MAGIC)\r
66                         return TRUE;\r
67                 else\r
68                         return FALSE;\r
69 \r
70                 if(header.m_Version == LOG_INDEX_VERSION)\r
71                         return TRUE;\r
72                 else\r
73                         return FALSE;\r
74 \r
75         }\r
76 \r
77         int SaveOneItem(GitRev &Rev);\r
78         int LoadOneItem(GitRev &Rev,UINT offset);\r
79 \r
80 public:\r
81         CLogCache();\r
82         ~CLogCache();\r
83         int FetchCache(CString GitDir);\r
84         std::vector<GitRev> m_NewCacheEntry;\r
85         std::map<CString, DWORD> m_HashMapIndex;\r
86         int GetCacheData(GitRev &Rev);\r
87         int AddCacheEntry(GitRev &Rev);\r
88 \r
89 };