1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
#ifndef MO_REGISTER_FILEENTRY_INCLUDED
#define MO_REGISTER_FILEENTRY_INCLUDED
#include "fileregisterfwd.h"
namespace MOShared
{
class FileEntry
{
public:
static constexpr uint64_t NoFileSize =
std::numeric_limits<uint64_t>::max();
FileEntry();
FileEntry(FileIndex index, std::wstring name, DirectoryEntry *parent);
// noncopyable
FileEntry(const FileEntry&) = delete;
FileEntry& operator=(const FileEntry&) = delete;
FileIndex getIndex() const
{
return m_Index;
}
void addOrigin(
OriginID origin, FILETIME fileTime, std::wstring_view archive, int order);
// remove the specified origin from the list of origins that contain this
// file. if no origin is left, the file is effectively deleted and true is
// returned. otherwise, false is returned
bool removeOrigin(OriginID origin);
void sortOrigins();
// gets the list of alternative origins (origins with lower priority than
// the primary one). if sortOrigins has been called, it is sorted by priority
// (ascending)
const AlternativesVector &getAlternatives() const
{
return m_Alternatives;
}
const std::wstring &getName() const
{
return m_Name;
}
OriginID getOrigin() const
{
return m_Origin;
}
OriginID getOrigin(bool &archive) const
{
archive = m_Archive.isValid();
return m_Origin;
}
const DataArchiveOrigin &getArchive() const
{
return m_Archive;
}
bool isFromArchive(std::wstring archiveName = L"") const;
// if originID is -1, uses the main origin; if this file doesn't exist in the
// given origin, returns an empty string
//
std::wstring getFullPath(OriginID originID=InvalidOriginID) const;
std::wstring getRelativePath() const;
DirectoryEntry *getParent()
{
return m_Parent;
}
void setFileTime(FILETIME fileTime) const
{
m_FileTime = fileTime;
}
FILETIME getFileTime() const
{
return m_FileTime;
}
void setFileSize(uint64_t size, uint64_t compressedSize)
{
m_FileSize = size;
m_CompressedFileSize = compressedSize;
}
uint64_t getFileSize() const
{
return m_FileSize;
}
uint64_t getCompressedFileSize() const
{
return m_CompressedFileSize;
}
private:
FileIndex m_Index;
std::wstring m_Name;
OriginID m_Origin;
DataArchiveOrigin m_Archive;
AlternativesVector m_Alternatives;
DirectoryEntry *m_Parent;
mutable FILETIME m_FileTime;
uint64_t m_FileSize, m_CompressedFileSize;
mutable std::mutex m_OriginsMutex;
bool recurseParents(std::wstring &path, const DirectoryEntry *parent) const;
};
} // namespace
#endif // MO_REGISTER_FILEENTRY_INCLUDED
|