rpcsx/rpcs3/Loader/PSF.h

89 lines
1.4 KiB
C
Raw Normal View History

#pragma once
struct vfsStream;
enum class psf_entry_format : u16
{
string_not_null_term = 0x0004,
string = 0x0204,
integer = 0x0404,
};
struct PSFHeader
{
2015-04-16 17:33:55 +02:00
u32 magic;
u32 version;
u32 off_key_table;
u32 off_data_table;
u32 entries_num;
};
2015-04-16 17:33:55 +02:00
struct PSFDefTable
{
u16 key_off;
psf_entry_format param_fmt;
2015-04-16 17:33:55 +02:00
u32 param_len;
u32 param_max;
u32 data_off;
};
struct PSFEntry
{
psf_entry_format fmt;
2015-04-16 17:33:55 +02:00
std::string name;
2015-04-16 17:33:55 +02:00
s32 vint;
std::string vstr;
};
class PSFLoader
{
std::vector<PSFEntry> m_entries;
public:
2015-04-18 15:38:42 +02:00
PSFLoader() = default;
2015-04-16 01:17:42 +02:00
PSFLoader(vfsStream& stream)
{
Load(stream);
}
virtual ~PSFLoader() = default;
bool Load(vfsStream& stream);
2015-04-17 06:37:13 +02:00
bool Save(vfsStream& stream) const;
2015-04-16 17:33:55 +02:00
void Clear();
2015-04-16 01:17:42 +02:00
explicit operator bool() const
2015-04-16 01:17:42 +02:00
{
2015-04-16 18:19:41 +02:00
return !m_entries.empty();
2015-04-16 01:17:42 +02:00
}
const PSFEntry* SearchEntry(const std::string& key) const;
PSFEntry& AddEntry(const std::string& key, psf_entry_format format);
2015-04-16 01:17:42 +02:00
std::string GetString(const std::string& key, std::string def = "") const;
2015-04-16 17:33:55 +02:00
s32 GetInteger(const std::string& key, s32 def = 0) const;
void SetString(const std::string& key, std::string value);
void SetInteger(const std::string& key, s32 value);
std::vector<PSFEntry>& entries()
{
return m_entries;
}
const std::vector<PSFEntry>& entries() const
{
return m_entries;
}
std::vector<PSFEntry>::iterator begin()
{
return m_entries.begin();
}
std::vector<PSFEntry>::iterator end()
{
return m_entries.end();
}
2015-04-16 01:17:42 +02:00
};