MCPcopy Create free account
hub / github.com/Xtra-Computing/thundersvm / parseFromFormat

Method parseFromFormat

src/thundersvm/util/log.cpp:1408–1456  ·  view source on GitHub ↗

@brief Updates format to be used while logging. @param userFormat User provided format

Source from the content-addressed store, hash-verified

1406/// @brief Updates format to be used while logging.
1407/// @param userFormat User provided format
1408 void LogFormat::parseFromFormat(const base::type::string_t& userFormat) {
1409 // We make copy because we will be changing the format
1410 // i.e, removing user provided date format from original format
1411 // and then storing it.
1412 base::type::string_t formatCopy = userFormat;
1413 m_flags = 0x0;
1414 auto conditionalAddFlag = [&](const base::type::char_t* specifier, base::FormatFlags flag) {
1415 std::size_t foundAt = base::type::string_t::npos;
1416 while ((foundAt = formatCopy.find(specifier, foundAt + 1)) != base::type::string_t::npos) {
1417 if (foundAt > 0 && formatCopy[foundAt - 1] == base::consts::kFormatSpecifierChar) {
1418 if (hasFlag(flag)) {
1419 // If we already have flag we remove the escape chars so that '%%' is turned to '%'
1420 // even after specifier resolution - this is because we only replaceFirst specifier
1421 formatCopy.erase(foundAt > 0 ? foundAt - 1 : 0, 1);
1422 ++foundAt;
1423 }
1424 } else {
1425 if (!hasFlag(flag)) addFlag(flag);
1426 }
1427 }
1428 };
1429 conditionalAddFlag(base::consts::kAppNameFormatSpecifier, base::FormatFlags::AppName);
1430 conditionalAddFlag(base::consts::kSeverityLevelFormatSpecifier, base::FormatFlags::Level);
1431 conditionalAddFlag(base::consts::kSeverityLevelShortFormatSpecifier, base::FormatFlags::LevelShort);
1432 conditionalAddFlag(base::consts::kLoggerIdFormatSpecifier, base::FormatFlags::LoggerId);
1433 conditionalAddFlag(base::consts::kThreadIdFormatSpecifier, base::FormatFlags::ThreadId);
1434 conditionalAddFlag(base::consts::kLogFileFormatSpecifier, base::FormatFlags::File);
1435 conditionalAddFlag(base::consts::kLogFileBaseFormatSpecifier, base::FormatFlags::FileBase);
1436 conditionalAddFlag(base::consts::kLogLineFormatSpecifier, base::FormatFlags::Line);
1437 conditionalAddFlag(base::consts::kLogLocationFormatSpecifier, base::FormatFlags::Location);
1438 conditionalAddFlag(base::consts::kLogFunctionFormatSpecifier, base::FormatFlags::Function);
1439 conditionalAddFlag(base::consts::kCurrentUserFormatSpecifier, base::FormatFlags::User);
1440 conditionalAddFlag(base::consts::kCurrentHostFormatSpecifier, base::FormatFlags::Host);
1441 conditionalAddFlag(base::consts::kMessageFormatSpecifier, base::FormatFlags::LogMessage);
1442 conditionalAddFlag(base::consts::kVerboseLevelFormatSpecifier, base::FormatFlags::VerboseLevel);
1443 // For date/time we need to extract user's date format first
1444 std::size_t dateIndex = std::string::npos;
1445 if ((dateIndex = formatCopy.find(base::consts::kDateTimeFormatSpecifier)) != std::string::npos) {
1446 while (dateIndex > 0 && formatCopy[dateIndex - 1] == base::consts::kFormatSpecifierChar) {
1447 dateIndex = formatCopy.find(base::consts::kDateTimeFormatSpecifier, dateIndex + 1);
1448 }
1449 if (dateIndex != std::string::npos) {
1450 addFlag(base::FormatFlags::DateTime);
1451 updateDateFormat(dateIndex, formatCopy);
1452 }
1453 }
1454 m_format = formatCopy;
1455 updateFormatSpec();
1456 }
1457
1458 void LogFormat::updateDateFormat(std::size_t index, base::type::string_t& currFormat) {
1459 if (hasFlag(base::FormatFlags::DateTime)) {

Callers

nothing calls this directly

Calls 2

hasFlagFunction · 0.85
addFlagFunction · 0.85

Tested by

no test coverage detected