iw4x-client/src/Utils/Json.cpp

64 lines
1.5 KiB
C++
Raw Normal View History

2022-06-12 23:07:53 +02:00
#include <STDInclude.hpp>
2022-12-14 09:40:15 +01:00
#include <bitset>
2022-06-12 23:07:53 +02:00
namespace Utils::Json
{
std::string TypeToString(const nlohmann::json::value_t type)
2022-06-12 23:07:53 +02:00
{
switch (type)
{
case nlohmann::json::value_t::null:
return "null";
case nlohmann::json::value_t::number_integer:
return "number_integer";
case nlohmann::json::value_t::number_unsigned:
return "number_unsigned";
case nlohmann::json::value_t::number_float:
return "number_float";
case nlohmann::json::value_t::boolean:
return "boolean";
case nlohmann::json::value_t::string:
return "string";
case nlohmann::json::value_t::array:
return "array";
case nlohmann::json::value_t::object:
return "object";
2022-08-02 23:04:02 +02:00
case nlohmann::json::value_t::binary:
return "binary";
case nlohmann::json::value_t::discarded:
return "discarded";
2022-06-12 23:07:53 +02:00
default:
AssertUnreachable;
2022-08-03 18:27:07 +02:00
return "null";
2022-06-12 23:07:53 +02:00
}
}
2022-12-14 09:40:15 +01:00
unsigned long ReadFlags(const std::string binaryFlags, size_t size)
{
std::bitset<64> input;
const auto binarySize = size * 8;
if (binaryFlags.size() > binarySize)
{
Components::Logger::Print("Flag {} might not be properly translated, it seems to contain an error (invalid length)\n", binaryFlags);
return 0;
}
auto i = binarySize - 1;
for (char bit : binaryFlags)
{
if (i < 0)
{
Components::Logger::Print("Flag {} might not be properly translated, it seems to contain an error (invalid length)\n", binaryFlags);
break;
}
bool isOne = bit == '1';
input.set(i--, isOne);
}
return input.to_ulong();
}
2022-06-12 23:07:53 +02:00
}