mirror of
https://github.com/WerWolv/ImHex
synced 2024-10-22 18:54:46 +00:00
Allow printing of 128 bit values
This commit is contained in:
parent
046a5866bf
commit
9c055ea1fd
|
@ -76,6 +76,38 @@ namespace hex {
|
|||
|
||||
namespace hex {
|
||||
|
||||
std::string to_string(u128 value) {
|
||||
char data[45] = { 0 };
|
||||
|
||||
u8 index = sizeof(data) - 2;
|
||||
while (value != 0 && index != 0) {
|
||||
data[index] = '0' + value % 10;
|
||||
value /= 10;
|
||||
index--;
|
||||
}
|
||||
|
||||
return std::string(data + index + 1);
|
||||
}
|
||||
|
||||
std::string to_string(s128 value) {
|
||||
char data[45] = { 0 };
|
||||
|
||||
u128 unsignedValue = value < 0 ? -value : value;
|
||||
|
||||
u8 index = sizeof(data) - 2;
|
||||
while (unsignedValue != 0 && index != 0) {
|
||||
data[index] = '0' + unsignedValue % 10;
|
||||
unsignedValue /= 10;
|
||||
index--;
|
||||
}
|
||||
|
||||
if (value < 0) {
|
||||
data[index] = '-';
|
||||
return std::string(data + index);
|
||||
} else
|
||||
return std::string(data + index + 1);
|
||||
}
|
||||
|
||||
template<typename ... Args>
|
||||
inline std::string format(const char *format, Args ... args) {
|
||||
ssize_t size = snprintf( nullptr, 0, format, args ... );
|
||||
|
|
|
@ -122,8 +122,8 @@ namespace hex::lang {
|
|||
case Token::ValueType::Signed32Bit: message += std::to_string(std::get<s32>(integerLiteral->getValue())); break;
|
||||
case Token::ValueType::Unsigned64Bit: message += std::to_string(std::get<u64>(integerLiteral->getValue())); break;
|
||||
case Token::ValueType::Signed64Bit: message += std::to_string(std::get<s64>(integerLiteral->getValue())); break;
|
||||
case Token::ValueType::Unsigned128Bit: message += "A lot"; break; // TODO: Implement u128 to_string
|
||||
case Token::ValueType::Signed128Bit: message += "A lot"; break; // TODO: Implement s128 to_string
|
||||
case Token::ValueType::Unsigned128Bit: message += hex::to_string(std::get<u128>(integerLiteral->getValue())); break;
|
||||
case Token::ValueType::Signed128Bit: message += hex::to_string(std::get<s128>(integerLiteral->getValue())); break;
|
||||
case Token::ValueType::Float: message += std::to_string(std::get<float>(integerLiteral->getValue())); break;
|
||||
case Token::ValueType::Double: message += std::to_string(std::get<double>(integerLiteral->getValue())); break;
|
||||
case Token::ValueType::Boolean: message += std::get<s32>(integerLiteral->getValue()) ? "true" : "false"; break;
|
||||
|
|
Loading…
Reference in a new issue