22#include <unordered_map>
98 SettingByteStream(u32 ptr, u8* data,
size_t data_length,
size_t offset = 0)
102 u32
GetPtr()
const {
return static_cast<u32
>(ptr_ + GetOffset()); }
139 : setting_id(setting_id), type(type), size(size), is_set(is_set),
loaded_title_id(0) {}
149 data->
type =
static_cast<u8
>(type);
152 virtual std::vector<u8>
Serialize()
const {
return std::vector<u8>(); }
163 Int32Setting(u32
id, i32 value) :
Setting(
id, Type::kInt32, 4,
true), value(value) {}
171 Int64Setting(u32
id, i64 value) :
Setting(
id, Type::kInt64, 8,
true), value(value) {}
179 DoubleSetting(u32
id, f64 value) :
Setting(
id, Type::kDouble, 8,
true), value(value) {}
187 UnicodeSetting(u32
id,
const std::u16string& value)
188 :
Setting(
id, Type::kUnicode, 8,
true), value(value) {}
189 std::u16string value;
193 data->unicode.size = 0;
194 data->unicode.ptr = 0;
196 size_t count = value.size() + 1;
197 size_t size = 2 * count;
198 REX_ASSERT(size <= std::numeric_limits<u32>::max());
199 data->unicode.size =
static_cast<u32
>(size);
200 data->unicode.ptr = stream->
GetPtr();
201 auto buffer =
reinterpret_cast<u16*
>(&stream->GetData()[stream->GetOffset()]);
202 stream->Advance(size);
208 FloatSetting(u32
id, f32 value) :
Setting(
id, Type::kFloat, 4,
true), value(value) {}
216 BinarySetting(u32
id) :
Setting(
id, Type::kBinary, 8,
false) {}
217 BinarySetting(u32
id,
const std::vector<u8>& value)
218 :
Setting(
id, Type::kBinary, 8,
true), value(value) {}
219 std::vector<u8> value;
223 data->binary.size = 0;
224 data->binary.ptr = 0;
226 size_t size = value.size();
227 REX_ASSERT(size <= std::numeric_limits<u32>::max());
228 data->binary.size =
static_cast<u32
>(size);
229 data->binary.ptr = stream->
GetPtr();
230 stream->
Write(value.data(), size);
234 return std::vector<u8>(value.data(), value.data() + value.size());
242 DateTimeSetting(u32
id, i64 value) :
Setting(
id, Type::kDateTime, 8,
true), value(value) {}
246 data->filetime = value;
260 title_id_ = std::move(title_id);
263 u64 GetXUID()
const {
return xuid_; }
265 std::string GetName()
const {
return name_; }
294 std::vector<std::unique_ptr<Setting>> setting_list_;
295 std::unordered_map<u32, Setting*> settings_;
307struct std::formatter<
rex::xam::UserProfile::Setting::Type> : std::formatter<rex::i32> {
309 return std::formatter<rex::i32>::format(
static_cast<rex::i32
>(value), ctx);
#define REX_ASSERT(cond,...)
Definition assert.h:84
void Write(std::span< const u8 > buf)
Definition content_manager.h:73
Definition user_profile.h:96
u32 GetPtr() const
Definition user_profile.h:102
Definition user_profile.h:93
u32 GetType() const
Definition user_profile.h:276
REX_XAM_API void AddSetting(std::unique_ptr< Setting > setting)
REX_XAM_API Setting * GetSetting(u32 setting_id)
void SetContentManager(IContentManager &content, rex::MoveOnlyFunction< u32()> title_id)
Definition user_profile.h:258
u32 GetSigninState() const
Definition user_profile.h:270
Content package and language IDs.
void copy_and_swap(T *dest, const T *src, size_t count)
Definition endian.h:98
typename detail::MoveOnlyFunctionFor< Signature >::type MoveOnlyFunction
Definition utility.h:254
Bit, byte and ring buffer streams over memory.
void WriteTo(X_USER_PROFILE_SETTING_DATA *data, SettingByteStream *stream) override
Definition user_profile.h:220
std::vector< u8 > Serialize() const override
Definition user_profile.h:233
void Deserialize(const std::vector< u8 > &data) override
Definition user_profile.h:236
void WriteTo(X_USER_PROFILE_SETTING_DATA *data, SettingByteStream *stream) override
Definition user_profile.h:244
void WriteTo(X_USER_PROFILE_SETTING_DATA *data, SettingByteStream *stream) override
Definition user_profile.h:181
void WriteTo(X_USER_PROFILE_SETTING_DATA *data, SettingByteStream *stream) override
Definition user_profile.h:210
void WriteTo(X_USER_PROFILE_SETTING_DATA *data, SettingByteStream *stream) override
Definition user_profile.h:165
void WriteTo(X_USER_PROFILE_SETTING_DATA *data, SettingByteStream *stream) override
Definition user_profile.h:173
Definition user_profile.h:108
virtual void Deserialize(const std::vector< u8 > &)
Definition user_profile.h:154
virtual std::vector< u8 > Serialize() const
Definition user_profile.h:152
bool IsTitleSpecific() const
Definition user_profile.h:160
Type
Definition user_profile.h:110
virtual void WriteTo(X_USER_PROFILE_SETTING_DATA *data, SettingByteStream *stream)
Definition user_profile.h:147
u32 loaded_title_id
Definition user_profile.h:134
Setting(u32 setting_id, Type type, size_t size, bool is_set)
Definition user_profile.h:138
void WriteTo(X_USER_PROFILE_SETTING_DATA *data, SettingByteStream *stream) override
Definition user_profile.h:190
Definition user_profile.h:48
u8 unk_1[3]
Definition user_profile.h:54
u8 type
Definition user_profile.h:53
be_u32 unk_4
Definition user_profile.h:55
Definition user_profile.h:77
be_u32 from
Definition user_profile.h:78
be_u32 unk_14
Definition user_profile.h:85
be_u32 unk_04
Definition user_profile.h:79
Integer types, byte order wrappers and size literals.
Definition user_profile.h:121
struct rex::xam::X_USER_PROFILE_SETTING_DATA::@043023330207035126171061172277334130165007315100::@176300045133233070153170276052336107266103122233 binary
struct rex::xam::X_USER_PROFILE_SETTING_DATA::@043023330207035126171061172277334130165007315100::@151134163212016230170311217005205051130261302341 unicode
Move only function, const propagating pointer and scope guard.