diff options
author | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2015-05-07 20:45:45 +0200 |
---|---|---|
committer | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2015-05-07 20:45:45 +0200 |
commit | 4f4d230dac936f32cceb8be35fe09822d85bb2b6 (patch) | |
tree | a180a736708834708e0e5b95fd1720f37722b429 /src/core/file_sys/archive_backend.h | |
parent | Merge pull request #695 from Subv/crash_f (diff) | |
parent | Fix printf format warning (diff) | |
download | yuzu-4f4d230dac936f32cceb8be35fe09822d85bb2b6.tar yuzu-4f4d230dac936f32cceb8be35fe09822d85bb2b6.tar.gz yuzu-4f4d230dac936f32cceb8be35fe09822d85bb2b6.tar.bz2 yuzu-4f4d230dac936f32cceb8be35fe09822d85bb2b6.tar.lz yuzu-4f4d230dac936f32cceb8be35fe09822d85bb2b6.tar.xz yuzu-4f4d230dac936f32cceb8be35fe09822d85bb2b6.tar.zst yuzu-4f4d230dac936f32cceb8be35fe09822d85bb2b6.zip |
Diffstat (limited to 'src/core/file_sys/archive_backend.h')
-rw-r--r-- | src/core/file_sys/archive_backend.h | 147 |
1 files changed, 17 insertions, 130 deletions
diff --git a/src/core/file_sys/archive_backend.h b/src/core/file_sys/archive_backend.h index 43a106549..c6a1be79d 100644 --- a/src/core/file_sys/archive_backend.h +++ b/src/core/file_sys/archive_backend.h @@ -5,22 +5,21 @@ #pragma once #include <memory> +#include <string> +#include <utility> +#include <vector> -#include "common/common_types.h" -#include "common/string_util.h" #include "common/bit_field.h" +#include "common/common_types.h" -#include "core/file_sys/file_backend.h" -#include "core/file_sys/directory_backend.h" - -#include "core/mem_map.h" -#include "core/hle/kernel/kernel.h" +#include "core/hle/result.h" -//////////////////////////////////////////////////////////////////////////////////////////////////// -// FileSys namespace namespace FileSys { +class FileBackend; +class DirectoryBackend; + // Path string type enum LowPathType : u32 { Invalid = 0, @@ -39,134 +38,22 @@ union Mode { class Path { public: + Path() : type(Invalid) {} + Path(const char* path) : type(Char), string(path) {} + Path(std::vector<u8> binary_data) : type(Binary), binary(std::move(binary_data)) {} + Path(LowPathType type, u32 size, u32 pointer); - Path() : type(Invalid) { - } - - Path(const char* path) : type(Char), string(path) { - } - - Path(std::vector<u8> binary_data) : type(Binary), binary(std::move(binary_data)) { - } - - Path(LowPathType type, u32 size, u32 pointer) : type(type) { - switch (type) { - case Binary: - { - u8* data = Memory::GetPointer(pointer); - binary = std::vector<u8>(data, data + size); - break; - } - - case Char: - { - const char* data = reinterpret_cast<const char*>(Memory::GetPointer(pointer)); - string = std::string(data, size - 1); // Data is always null-terminated. - break; - } - - case Wchar: - { - const char16_t* data = reinterpret_cast<const char16_t*>(Memory::GetPointer(pointer)); - u16str = std::u16string(data, size/2 - 1); // Data is always null-terminated. - break; - } - - default: - break; - } - } - - LowPathType GetType() const { - return type; - } + LowPathType GetType() const { return type; } /** * Gets the string representation of the path for debugging * @return String representation of the path for debugging */ - const std::string DebugStr() const { - switch (GetType()) { - case Invalid: - default: - return "[Invalid]"; - case Empty: - return "[Empty]"; - case Binary: - { - std::stringstream res; - res << "[Binary: "; - for (unsigned byte : binary) - res << std::hex << std::setw(2) << std::setfill('0') << byte; - res << ']'; - return res.str(); - } - case Char: - return "[Char: " + AsString() + ']'; - case Wchar: - return "[Wchar: " + AsString() + ']'; - } - } + const std::string DebugStr() const; - const std::string AsString() const { - switch (GetType()) { - case Char: - return string; - case Wchar: - return Common::UTF16ToUTF8(u16str); - case Empty: - return {}; - case Invalid: - case Binary: - default: - // TODO(yuriks): Add assert - LOG_ERROR(Service_FS, "LowPathType cannot be converted to string!"); - return {}; - } - } - - const std::u16string AsU16Str() const { - switch (GetType()) { - case Char: - return Common::UTF8ToUTF16(string); - case Wchar: - return u16str; - case Empty: - return {}; - case Invalid: - case Binary: - // TODO(yuriks): Add assert - LOG_ERROR(Service_FS, "LowPathType cannot be converted to u16string!"); - return {}; - } - } - - const std::vector<u8> AsBinary() const { - switch (GetType()) { - case Binary: - return binary; - case Char: - return std::vector<u8>(string.begin(), string.end()); - case Wchar: - { - // use two u8 for each character of u16str - std::vector<u8> to_return(u16str.size() * 2); - for (size_t i = 0; i < u16str.size(); ++i) { - u16 tmp_char = u16str.at(i); - to_return[i*2] = (tmp_char & 0xFF00) >> 8; - to_return[i*2 + 1] = (tmp_char & 0x00FF); - } - return to_return; - } - case Empty: - return {}; - case Invalid: - default: - // TODO(yuriks): Add assert - LOG_ERROR(Service_FS, "LowPathType cannot be converted to binary!"); - return {}; - } - } + const std::string AsString() const; + const std::u16string AsU16Str() const; + const std::vector<u8> AsBinary() const; private: LowPathType type; |