22#ifndef COMMON_ARCHIVE_H
23#define COMMON_ARCHIVE_H
25#include "common/error.h"
26#include "common/hashmap.h"
27#include "common/hash-str.h"
28#include "common/list.h"
29#include "common/path.h"
30#include "common/ptr.h"
31#include "common/singleton.h"
32#include "common/str.h"
48class SeekableReadStream;
50enum class AltStreamType {
143 Archive() : _mapsAreReady(
false) { }
219 kListDirectoriesOnly = 2,
226 void prepareMaps()
const;
228 mutable bool _mapsAreReady;
231 mutable AllfileMap _directoryMap, _fileMap;
234class MemcachingCaseInsensitiveArchive;
246 _contentSize(contentSize), _missingFile(
false), _bypass(
nullptr) {}
247 SharedArchiveContents() : _strongRef(
nullptr), _weakRef(
nullptr), _contentSize(0), _missingFile(
true), _bypass(
nullptr) {}
255 bool isFileMissing()
const {
return _missingFile; }
257 uint32 getSize()
const {
return _contentSize; }
260 if (_strongRef || _contentSize == 0 || _missingFile)
270 if (_contentSize == 0)
272 _strongRef =
nullptr;
293 virtual Path translatePath(
const Path &path)
const {
298 virtual SharedArchiveContents readContentsForPathAltStream(
const Path &translatedPath, AltStreamType altStreamType)
const;
305 AltStreamType altStreamType;
308 struct CacheKey_EqualTo {
309 bool operator()(
const CacheKey &x,
const CacheKey &y)
const;
312 struct CacheKey_Hash {
313 uint operator()(
const CacheKey &x)
const;
316 SeekableReadStream *createReadStreamForMemberImpl(
const Path &path,
bool isAltStream, Common::AltStreamType altStreamType)
const;
318 mutable HashMap<CacheKey, SharedArchiveContents, CacheKey_Hash, CacheKey_EqualTo> _cache;
319 uint32 _maxStronglyCachedSize;
336 Node(
int priority,
const String &name,
Archive *arc,
bool autoFree)
337 : _priority(priority), _name(name), _arc(arc), _autoFree(autoFree) {
346 void insert(
const Node& node);
374 void addDirectory(
const Path &directory,
int priority = 0,
int depth = 1,
bool flat =
false);
375 void addDirectory(
const FSNode &directory,
int priority = 0,
int depth = 1,
bool flat =
false);
498#define SearchMan Common::SearchManager::instance()
Definition: archive.h:141
virtual bool hasFile(const Path &path) const =0
virtual SeekableReadStream * createReadStreamForMember(const Path &path) const =0
virtual int listMatchingMembers(ArchiveMemberList &list, const Path &pattern, bool matchPathComponents=false) const
virtual const ArchiveMemberPtr getMember(const Path &path) const =0
virtual char getPathSeparator() const
virtual SeekableReadStream * createReadStreamForMemberAltStream(const Path &path, AltStreamType altStreamType) const
virtual bool isPathDirectory(const Path &path) const
Common::Error dumpArchive(const Path &destPath)
virtual int listMembers(ArchiveMemberList &list) const =0
virtual SeekableReadStream * createReadStreamForMemberNext(const Path &path, const Archive *starting) const
Definition: archive.h:203
virtual Path getPathInArchive() const =0
virtual bool isDirectory() const
virtual SeekableReadStream * createReadStreamForAltStream(AltStreamType altStreamType) const =0
virtual U32String getDisplayName() const
virtual SeekableReadStream * createReadStream() const =0
virtual void listChildren(ArchiveMemberList &childList, const char *pattern=nullptr) const
virtual String getFileName() const =0
virtual String getName() const =0
virtual bool isInMacArchive() const
Definition: archive.h:117
void listChildren(ArchiveMemberList &childList, const char *pattern) const override
String getFileName() const override
bool isDirectory() const override
GenericArchiveMember(const Common::Path &path, const Archive &parent)
SeekableReadStream * createReadStreamForAltStream(AltStreamType altStreamType) const override
GenericArchiveMember(const Common::String &pathStr, const Archive &parent)
String getName() const override
Path getPathInArchive() const override
SeekableReadStream * createReadStream() const override
Definition: archive.h:287
SeekableReadStream * createReadStreamForMember(const Path &path) const override
SeekableReadStream * createReadStreamForMemberAltStream(const Path &path, Common::AltStreamType altStreamType) const override
Definition: archive.h:483
Definition: archive.h:330
SeekableReadStream * createReadStreamForMember(const Path &path) const override
SeekableReadStream * createReadStreamForMemberNext(const Path &path, const Archive *starting) const override
void addDirectory(const String &name, const FSNode &directory, int priority=0, int depth=1, bool flat=false)
void addSubDirectoryMatching(const FSNode &directory, const String &caselessName, int priority=0, int depth=1, bool flat=false)
Definition: archive.h:397
void addDirectory(const Path &directory, int priority=0, int depth=1, bool flat=false)
SeekableReadStream * createReadStreamForMemberAltStream(const Path &path, AltStreamType altStreamType) const override
bool hasFile(const Path &path) const override
void setPriority(const String &name, int priority)
int listMatchingMembers(ArchiveMemberList &list, const Path &pattern, bool matchPathComponents=false) const override
void addDirectory(const String &name, const Path &directory, int priority=0, int depth=1, bool flat=false)
const ArchiveMemberPtr getMember(const Path &path) const override
void addSubDirectoriesMatching(const FSNode &directory, String origPattern, bool ignoreCase, int priority=0, int depth=1, bool flat=false)
bool isPathDirectory(const Path &path) const override
int listMembers(ArchiveMemberList &list) const override
char getPathSeparator() const override
Definition: archive.h:354
void add(const String &name, Archive *arch, int priority=0, bool autoFree=true)
void remove(const String &name)
void setIgnoreClashes(bool ignoreClashes)
Definition: archive.h:477
bool hasArchive(const String &name) const
Archive * getArchive(const String &name) const
Definition: archive.h:242
Definition: singleton.h:42
In find(In first, In last, const T &v)
Definition: algorithm.h:225
List< ArchiveMemberPtr > ArchiveMemberList
Definition: archive.h:58
SharedPtr< ArchiveMember > ArchiveMemberPtr
Definition: archive.h:57
List< ArchiveMemberDetails > ArchiveMemberDetailsList
Definition: archive.h:95
Definition: algorithm.h:29
Definition: archive.h:100
Definition: list_intern.h:108
Definition: list_intern.h:54