[XAM] Improvement rollup. Content, enumerators...
- [Kernel] Create guest object for XEnumerator. - [XAM] Split content data into host/guest variants. - [XAM] Correct message return type from RESULT to HRESULT. - [XAM] Add a new dummy content device for ODD. - [XAM] Implement XamContentAggregateCreateEnumerator. - [XAM] Implement XamGetPrivateEnumStructureFromHandle. - [XAM] Implement XMsgCompleteIORequest (sketchy). - [XAM] Implement XamGetOverlappedResult (sketchy). - [XAM] Implement XamTaskSchedule (sketchy).
This commit is contained in:
@@ -34,6 +34,11 @@
|
||||
namespace xe {
|
||||
namespace string_util {
|
||||
|
||||
enum class Safety {
|
||||
IDontKnowWhatIAmDoing,
|
||||
IKnowWhatIAmDoing,
|
||||
};
|
||||
|
||||
inline size_t copy_truncating(char* dest, const std::string_view source,
|
||||
size_t dest_buffer_count) {
|
||||
if (!dest_buffer_count) {
|
||||
@@ -68,6 +73,44 @@ inline size_t copy_and_swap_truncating(char16_t* dest,
|
||||
return chars_copied;
|
||||
}
|
||||
|
||||
template <Safety safety = Safety::IDontKnowWhatIAmDoing>
|
||||
inline size_t copy_maybe_truncating(char* dest, const std::string_view source,
|
||||
size_t dest_buffer_count) {
|
||||
static_assert(safety == Safety::IKnowWhatIAmDoing);
|
||||
if (!dest_buffer_count) {
|
||||
return 0;
|
||||
}
|
||||
size_t chars_copied = std::min(source.size(), dest_buffer_count);
|
||||
std::memcpy(dest, source.data(), chars_copied);
|
||||
return chars_copied;
|
||||
}
|
||||
|
||||
template <Safety safety = Safety::IDontKnowWhatIAmDoing>
|
||||
inline size_t copy_maybe_truncating(char16_t* dest,
|
||||
const std::u16string_view source,
|
||||
size_t dest_buffer_count) {
|
||||
static_assert(safety == Safety::IKnowWhatIAmDoing);
|
||||
if (!dest_buffer_count) {
|
||||
return 0;
|
||||
}
|
||||
size_t chars_copied = std::min(source.size(), dest_buffer_count);
|
||||
std::memcpy(dest, source.data(), chars_copied * sizeof(char16_t));
|
||||
return chars_copied;
|
||||
}
|
||||
|
||||
template <Safety safety = Safety::IDontKnowWhatIAmDoing>
|
||||
inline size_t copy_and_swap_maybe_truncating(char16_t* dest,
|
||||
const std::u16string_view source,
|
||||
size_t dest_buffer_count) {
|
||||
static_assert(safety == Safety::IKnowWhatIAmDoing);
|
||||
if (!dest_buffer_count) {
|
||||
return 0;
|
||||
}
|
||||
size_t chars_copied = std::min(source.size(), dest_buffer_count);
|
||||
xe::copy_and_swap(dest, source.data(), chars_copied);
|
||||
return chars_copied;
|
||||
}
|
||||
|
||||
inline std::string to_hex_string(uint32_t value) {
|
||||
return fmt::format("{:08X}", value);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user