![]() |
SourcePP
Several modern C++20 libraries for sanely parsing Valve's formats.
|
#include <GCF.h>


Classes | |
| struct | Block |
| struct | BlockHeader |
| struct | ChecksumMapEntry |
| struct | ChecksumMapHeader |
| struct | DataBlockHeader |
| struct | DirectoryEntry |
| struct | DirectoryEntry2 |
| struct | DirectoryHeader |
| struct | DirectoryMapEntry |
| struct | DirectoryMapHeader |
| struct | Header |
Public Member Functions | |
| constexpr std::string_view | getGUID () const override |
| Get the GUID corresponding to the pack file type. | |
| constexpr bool | hasEntryChecksums () const override |
| Returns true if the format has a checksum for each entry. | |
| std::vector< std::string > | verifyEntryChecksums () const override |
| Verify the checksums of each file, if a file fails the check its path will be added to the vector If there is no checksum ability in the format, it will return an empty vector. | |
| constexpr bool | isCaseSensitive () const override |
| Does the format support case-sensitive file names? | |
| std::optional< std::vector< std::byte > > | readEntry (const std::string &path_) const override |
| Try to read the entry's data to a bytebuffer. | |
| Attribute | getSupportedEntryAttributes () const override |
| Returns a list of supported entry attributes Mostly for GUI programs that show entries and their metadata in a table ;) | |
| operator std::string () const override | |
| uint32_t | getVersion () const |
| uint32_t | getAppID () const |
| uint32_t | getAppVersion () const |
| Public Member Functions inherited from vpkpp::PackFileReadOnly | |
| constexpr bool | isReadOnly () const noexcept final |
| operator std::string () const override | |
| Public Member Functions inherited from vpkpp::PackFile | |
| PackFile (const PackFile &other)=delete | |
| PackFile & | operator= (const PackFile &other)=delete |
| PackFile (PackFile &&other) noexcept=default | |
| PackFile & | operator= (PackFile &&other) noexcept=default |
| virtual | ~PackFile ()=default |
| template<typename T> requires requires (const T&) {{T::GUID} -> std::convertible_to<std::string_view>;} | |
| bool | isInstanceOf () const |
| Check if the pack file is an instance of the given pack file class. | |
| virtual bool | hasPackFileChecksum () const |
| Returns true if the entire file has a checksum. | |
| virtual bool | verifyPackFileChecksum () const |
| Verify the checksum of the entire file, returns true on success Will return true if there is no checksum ability in the format. | |
| virtual bool | hasPackFileSignature () const |
| Returns true if the file is signed. | |
| virtual bool | verifyPackFileSignature () const |
| Verify the file signature, returns true on success Will return true if there is no signature ability in the format. | |
| bool | hasEntry (const std::string &path, bool includeUnbaked=true) const |
| Check if an entry exists given the file path. | |
| std::optional< Entry > | findEntry (const std::string &path_, bool includeUnbaked=true) const |
| Try to find an entry given the file path. | |
| std::optional< std::vector< std::byte > > | operator[] (const std::string &path_) const |
| std::optional< std::string > | readEntryText (const std::string &path) const |
| Try to read the entry's data to a string. | |
| void | addEntry (const std::string &entryPath, const std::string &filepath, EntryOptions options={}) |
| Add a new entry from a file path - the first parameter is the path in the PackFile, the second is the path on disk. | |
| void | addEntry (const std::string &path, std::vector< std::byte > &&buffer, EntryOptions options={}) |
| Add a new entry from a buffer. | |
| void | addEntry (const std::string &path, std::span< const std::byte > buffer, EntryOptions options={}) |
| Add a new entry from a buffer. | |
| void | addDirectory (const std::string &entryBaseDir, const std::string &dir, EntryOptions options={}) |
| Adds new entries using the contents of a given directory. | |
| void | addDirectory (const std::string &entryBaseDir_, const std::string &dir, const EntryCreation &creation) |
| Adds new entries using the contents of a given directory. | |
| virtual bool | renameEntry (const std::string &oldPath_, const std::string &newPath_) |
| Rename an existing entry. | |
| virtual bool | renameDirectory (const std::string &oldDir_, const std::string &newDir_) |
| Rename an existing directory. | |
| virtual bool | removeEntry (const std::string &path_) |
| Remove an entry. | |
| virtual std::size_t | removeDirectory (const std::string &dirName_) |
| Remove a directory. | |
| bool | extractEntry (const std::string &entryPath, const std::string &filepath) const |
| Extract the given entry to disk at the given file path. | |
| bool | extractDirectory (const std::string &dir_, const std::string &outputDir) const |
| Extract the given directory to disk under the given output directory. | |
| bool | extractAll (const std::string &outputDir, bool createUnderPackFileDir=true) const |
| Extract the contents of the pack file to disk at the given directory. | |
| bool | extractAll (const std::string &outputDir, const EntryPredicate &predicate, bool stripSharedDirs=true) const |
| Extract the contents of the pack file to disk at the given directory - only entries which match the predicate are extracted. | |
| const EntryTrie & | getBakedEntries () const |
| Get entries saved to disk. | |
| const EntryTrie & | getUnbakedEntries () const |
| Get entries that have been added but not yet baked. | |
| std::size_t | getEntryCount (bool includeUnbaked=true) const |
| Get the number of entries in the pack file. | |
| void | runForAllEntries (const EntryCallback &operation, bool includeUnbaked=true) const |
| Run a callback for each entry in the pack file. | |
| void | runForAllEntries (const std::string &parentDir, const EntryCallback &operation, bool recursive=true, bool includeUnbaked=true) const |
| Run a callback for each entry in the pack file under the parent directory. | |
| std::string_view | getFilepath () const |
| /home/user/pak01_dir.vpk | |
| std::string | getTruncatedFilepath () const |
| /home/user/pak01_dir.vpk -> /home/user/pak01 | |
| std::string | getFilename () const |
| /home/user/pak01_dir.vpk -> pak01_dir.vpk | |
| std::string | getTruncatedFilename () const |
| /home/user/pak01_dir.vpk -> pak01.vpk | |
| std::string | getFilestem () const |
| /home/user/pak01_dir.vpk -> pak01_dir | |
| virtual std::string | getTruncatedFilestem () const |
| /home/user/pak01_dir.vpk -> pak01 | |
Static Public Member Functions | |
| static std::unique_ptr< PackFile > | open (const std::string &path, const EntryCallback &callback=nullptr, const OpenPropertyRequest &requestProperty=nullptr) |
| Static Public Member Functions inherited from vpkpp::PackFile | |
| static std::unique_ptr< PackFile > | open (const std::string &path, const EntryCallback &callback=nullptr, const OpenPropertyRequest &requestProperty=nullptr) |
| Open a generic pack file. The parser is selected based on the file extension. | |
| static std::vector< std::string > | getOpenableExtensions () |
| Returns a sorted list of supported extensions for opening, e.g. {".bsp", ".vpk"}. | |
| static std::string | escapeEntryPathForWrite (const std::string &path) |
| On Windows, some characters and file names are invalid - this escapes the given entry path. | |
Static Public Attributes | |
| static constexpr std::string_view | GUID = "0C088488F666451E9361297528F2446D" |
Protected Member Functions | |
| PackFileReadOnly (const std::string &fullFilePath_) | |
| Protected Member Functions inherited from vpkpp::PackFileReadOnly | |
| PackFileReadOnly (const std::string &fullFilePath_) | |
| void | addEntryInternal (Entry &entry, const std::string &path, std::vector< std::byte > &buffer, EntryOptions options) final |
| bool | bake (const std::string &outputDir_, BakeOptions options, const EntryCallback &callback) final |
| If output folder is an empty string, it will overwrite the original. | |
| Protected Member Functions inherited from vpkpp::PackFile | |
| PackFile (std::string fullFilePath_) | |
| void | runForAllEntriesInternal (const std::function< void(const std::string &, Entry &)> &operation, bool includeUnbaked=true) |
| void | runForAllEntriesInternal (const std::string &parentDir, const std::function< void(const std::string &, Entry &)> &operation, bool recursive=true, bool includeUnbaked=true) |
| std::vector< std::string > | verifyEntryChecksumsUsingCRC32 () const |
| std::string | getBakeOutputDir (const std::string &outputDir) const |
| void | mergeUnbakedEntries () |
| void | setFullFilePath (const std::string &outputDir) |
| std::string | cleanEntryPath (const std::string &path) const |
Protected Attributes | |
| Header | header {} |
| BlockHeader | blockheader {} |
| std::vector< Block > | blockdata {} |
| std::vector< uint32_t > | fragmap {} |
| DirectoryHeader | dirheader {} |
| std::vector< DirectoryMapEntry > | dirmap_entries {} |
| DataBlockHeader | datablockheader {} |
| std::vector< ChecksumMapEntry > | chksum_map {} |
| std::vector< uint32_t > | checksums {} |
| std::array< std::byte, 16 > | decryption_key |
| Protected Attributes inherited from vpkpp::PackFile | |
| std::string | fullFilePath |
| EntryTrie | entries |
| EntryTrie | unbakedEntries |
Additional Inherited Members | |
| Public Types inherited from vpkpp::PackFile | |
| enum class | OpenProperty { DECRYPTION_KEY } |
| using | OpenPropertyRequest = std::function<std::vector<std::byte>(PackFile* packFile, OpenProperty property)> |
| template<typename R> | |
| using | EntryCallbackBase = std::function<R(const std::string& path, const Entry& entry)> |
| Accepts the entry's path and metadata. | |
| using | EntryCallback = EntryCallbackBase<void> |
| using | EntryPredicate = EntryCallbackBase<bool> |
| using | EntryCreation = std::function<EntryOptions(const std::string& path)> |
| using | EntryTrie = tsl::htrie_map<char, Entry> |
| Protected Types inherited from vpkpp::PackFile | |
| using | OpenFactoryFunctionBasic = std::function<std::unique_ptr<PackFile>(const std::string& path, const EntryCallback& callback)> |
| using | OpenFactoryFunction = std::function<std::unique_ptr<PackFile>(const std::string& path, const EntryCallback& callback, const OpenPropertyRequest& requestProperty)> |
| Static Protected Member Functions inherited from vpkpp::PackFile | |
| static Entry | createNewEntry () |
| static std::optional< std::vector< std::byte > > | readUnbakedEntry (const Entry &entry) |
| static std::unordered_map< std::string, std::vector< OpenFactoryFunction > > & | getOpenExtensionRegistry () |
| static const OpenFactoryFunction & | registerOpenExtensionForTypeFactory (std::string_view extension, const OpenFactoryFunctionBasic &factory) |
| static const OpenFactoryFunction & | registerOpenExtensionForTypeFactory (std::string_view extension, const OpenFactoryFunction &factory) |
|
inlinenodiscardconstexproverridevirtual |
Get the GUID corresponding to the pack file type.
Implements vpkpp::PackFile.
|
nodiscardoverridevirtual |
Returns a list of supported entry attributes Mostly for GUI programs that show entries and their metadata in a table ;)
Reimplemented from vpkpp::PackFile.
|
inlinenodiscardconstexproverridevirtual |
Returns true if the format has a checksum for each entry.
Reimplemented from vpkpp::PackFile.
|
inlinenodiscardconstexproverridevirtual |
Does the format support case-sensitive file names?
Reimplemented from vpkpp::PackFile.
|
staticnodiscard |
This should NEVER occur when reading a "normal" gcf file. It will only be false if a) the gcf file isn't a gcf file b) the gcf file is from a beta steam version that used a different format that there are no public docs for (v6 was used throughout 2004-2013)
struct FragMapHeader { uint32_t blockcount; uint32_t dummy0; uint32_t dummy1; uint32_t checksum; };
|
explicitnodiscardoverridevirtual |
Reimplemented from vpkpp::PackFile.
|
explicitprotected |
Definition at line 246 of file PackFile.cpp.
|
nodiscardoverridevirtual |
Try to read the entry's data to a bytebuffer.
Implements vpkpp::PackFile.
|
nodiscardoverridevirtual |
Verify the checksums of each file, if a file fails the check its path will be added to the vector If there is no checksum ability in the format, it will return an empty vector.
Reimplemented from vpkpp::PackFile.
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
staticconstexpr |