From 5f68c5977ab2256986a1112d528c76ffd0110a53 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Thu, 17 Mar 2005 09:29:46 +0000 Subject: [PATCH] add ThemeMetricMap - a ThemeMetric collection that maps from a CString to ThemeMetric --- stepmania/src/ThemeMetric.h | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/stepmania/src/ThemeMetric.h b/stepmania/src/ThemeMetric.h index 1d984ba15b..575ef36901 100644 --- a/stepmania/src/ThemeMetric.h +++ b/stepmania/src/ThemeMetric.h @@ -4,6 +4,8 @@ #define THEME_METRIC_H #include "ThemeManager.h" +#include "Foreach.h" +#include class IThemeMetric { @@ -151,6 +153,37 @@ public: } }; +typedef CString (*MetricNameMap)(CString s); + +template +class ThemeMetricMap : public IThemeMetric +{ + typedef ThemeMetric ThemeMetricT; + map m_metric; + +public: + ThemeMetricMap( const CString& sGroup = "", MetricNameMap pfn = NULL, const vector vsValueNames = vector() ) + { + Load( sGroup, pfn, vsValueNames ); + } + void Load( const CString& sGroup, MetricNameMap pfn, const vector vsValueNames ) + { + m_metric.clear(); + FOREACH_CONST( CString, vsValueNames, s ) + m_metric[*s].Load( sGroup, pfn(*s) ); + } + void Read() + { + FOREACHM( CString, ThemeMetricT, m_metric, m ) + m->second.Read(); + } + const T& GetValue( CString s ) const + { + map::const_iterator iter = m_metric.find(s); + ASSERT( iter != m_metric.end() ); + return iter->second.GetValue(); + } +}; #endif