Format memory warning in human-friendly way.

PiperOrigin-RevId: 486610408
Change-Id: I6beecb12059e69f4407e921d20efc54ce6b3f491
This commit is contained in:
Alessio Quaglino
2022-11-07 02:55:37 -08:00
committed by Copybara-Service
parent fc24097b92
commit fd4d47e4a5
11 changed files with 107 additions and 29 deletions
+1 -22
View File
@@ -830,28 +830,7 @@ void mjXWriter::Size(XMLElement* root) {
// write memory
if (model->memory != -1) {
const std::size_t memory = static_cast<std::size_t>(model->memory);
const std::vector<std::pair<int, char>> kSuffix = {
{60, 'E'}, {50, 'P'}, {40, 'T'}, {30, 'G'}, {20, 'M'}, {10, 'K'},
};
std::ostringstream strm;
// check for divisibility by each suffixed size
for (const auto& [multiplier_bit, suffix_char] : kSuffix) {
const std::size_t multiplier = static_cast<std::size_t>(1) << multiplier_bit;
if (memory >= multiplier && !(memory & (multiplier - 1))) {
strm << (memory >> multiplier_bit) << suffix_char;
break;
}
}
// doesn't match any suffix, just write the number out as-is
if (!strm.tellp()) {
strm << memory;
}
WriteAttrTxt(section, "memory", strm.str());
WriteAttrTxt(section, "memory", mju_writeNumBytes(model->memory));
}
// write sizes