X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fskins2%2Fparser%2Fbuilder.cpp;h=b3f6ff4827e7a85c0fc8255594cdd96cd27e9412;hb=0fb4941ed0764730d43d3078e05ae883d6c09fe0;hp=3606f2a86d495c1168850c3dc7a05a38a8c8987a;hpb=f500f79609d544d6af06e3aa2250552754f97fb2;p=vlc diff --git a/modules/gui/skins2/parser/builder.cpp b/modules/gui/skins2/parser/builder.cpp index 3606f2a86d..b3f6ff4827 100644 --- a/modules/gui/skins2/parser/builder.cpp +++ b/modules/gui/skins2/parser/builder.cpp @@ -75,24 +75,23 @@ CmdGeneric *Builder::parseAction( const string &rAction ) return Interpreter::instance( getIntf() )->parseAction( rAction, m_pTheme ); } - -// Useful macro -#define ADD_OBJECTS( type ) \ - list::const_iterator it##type; \ - for( it##type = m_rData.m_list##type.begin(); \ - it##type != m_rData.m_list##type.end(); it##type++ ) \ - { \ - add##type( *it##type ); \ - } - +template inline +void Builder::add_objects(const std::list &list, + void (Builder::*addfn)(const T &)) +{ + typename std::list::const_iterator i; + for( i = list.begin(); i != list.end(); ++i ) + (this->*addfn)( *i ); +} Theme *Builder::build() { - m_pTheme = new Theme( getIntf() ); +#define ADD_OBJECTS( type ) \ + add_objects(m_rData.m_list##type,&Builder::add##type) + + m_pTheme = new (std::nothrow) Theme( getIntf() ); if( m_pTheme == NULL ) - { return NULL; - } // Create everything from the data in the XML ADD_OBJECTS( Theme ); @@ -123,6 +122,8 @@ Theme *Builder::build() ADD_OBJECTS( MenuSeparator ); return m_pTheme; + +#undef ADD_OBJECTS }