/* ======== SourceMM ========
* Copyright (C) 2004-2005 Metamod:Source Development Team
* No warranties of any kind
*
* License: zlib/libpng
*
* Author(s): David "BAILOPAN" Anderson
* ============================
*/

#ifndef _INCLUDE_UTIL_H
#define _INCLUDE_UTIL_H

/**
 * @brief Utility functons
 * @file util.h
 */

const char *UTIL_GetExtension(const char *file);

#define META_INTERFACE_MACRO(type, final) \
	PluginIter i; \
	void *mret=NULL, *d; \
	META_RES mres, high=MRES_IGNORED; \
	g_SmmAPI.SetLastMetaReturn(MRES_IGNORED); \
	for (i=g_PluginMngr._begin(); i!=g_PluginMngr._end(); i++) \
	{ \
		if ( (*i) && (*i)->fac_list. type ) \
		{ \
			d = ((*i)->fac_list. type)(name, ret); \
			mres = g_SmmAPI.GetLastMetaReturn(); \
			if (mres > high) \
				high = mres; \
			if (mres >= MRES_OVERRIDE) \
				mret = d; \
		} \
	} \
	if (high == MRES_OVERRIDE) \
	{ \
		(final)(name, ret); \
		return mret; \
	} else if (high == MRES_SUPERCEDE) { \
		return mret; \
	} else { \
		return (final)(name, ret); \
	} 

#endif //_INCLUDE_UTIL_H