/* ** Reads and binds secondary measures (MeasureName2 - MeasureNameN). ** */ void CMeter::BindSecondaryMeasures(CConfigParser& parser, const WCHAR* section) { if (!m_Measures.empty()) { WCHAR tmpName[64]; int i = 2; do { _snwprintf_s(tmpName, _TRUNCATE, L"MeasureName%i", i); const std::wstring& measureName = parser.ReadString(section, tmpName, L""); CMeasure* measure = parser.GetMeasure(measureName); if (measure) { m_Measures.push_back(measure); } else { if (!measureName.empty()) { LogWithArgs(LOG_ERROR, L"MeasureName%i=%s is not valid in [%s]", i, measureName.c_str(), section); } break; } ++i; } while (true); } }
/* ** Overwritten method to handle the secondary measure binding. ** */ void CMeterHistogram::BindMeasures(CConfigParser& parser, const WCHAR* section) { if (BindPrimaryMeasure(parser, section, false)) { const std::wstring* secondaryMeasure = &parser.ReadString(section, L"MeasureName2", L""); if (secondaryMeasure->empty()) { // For backwards compatibility. secondaryMeasure = &parser.ReadString(section, L"SecondaryMeasureName", L""); } CMeasure* measure = parser.GetMeasure(*secondaryMeasure); if (measure) { m_Measures.push_back(measure); } } }
/* ** Reads and binds the primary MeasureName. This must always be called in overridden ** BindMeasures() implementations. ** */ bool CMeter::BindPrimaryMeasure(CConfigParser& parser, const WCHAR* section, bool optional) { m_Measures.clear(); const std::wstring& measureName = parser.ReadString(section, L"MeasureName", L""); CMeasure* measure = parser.GetMeasure(measureName); if (measure) { m_Measures.push_back(measure); return true; } else if (!optional) { LogWithArgs(LOG_ERROR, L"MeasureName=%s is not valid in [%s]", measureName.c_str(), section); } return false; }