⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 profiler.h

📁 在Linux下做的QuadTree的程序
💻 H
字号:
/********************************************************************** * $Id: profiler.h 2021 2007-09-11 02:02:44Z csavage $ * * GEOS - Geometry Engine Open Source * http://geos.refractions.net * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation.  * See the COPYING file for more information. * **********************************************************************/#ifndef GEOS_PROFILER_H#define GEOS_PROFILER_H/* For MingW builds with __STRICT_ANSI__ (-ansi) */#if defined(__MINGW32__)/* Allow us to check for presence of gettimeofday in MingW */ #include <config.h>#include <sys/time.h>extern "C" {  extern _CRTIMP void __cdecl	_tzset (void);  __MINGW_IMPORT int	_daylight;  __MINGW_IMPORT long	_timezone;  __MINGW_IMPORT char 	*_tzname[2];}#endif #if defined(_MSC_VER) || defined(__MINGW32__) && !defined(HAVE_GETTIMEOFDAY)#include <geos/timeval.h>#else#include <sys/time.h>#endif#include <map>#include <memory>#include <iostream>#include <string>#include <vector>#ifndef PROFILE#define PROFILE 0#endifnamespace geos {namespace util {/* * \class Profile utils.h geos.h * * \brief Profile statistics */class Profile {public:	/** \brief Create a named profile */	Profile(std::string name);	/** \brief Destructor */	~Profile();	/** \brief start a new timer */	void start() {		gettimeofday(&starttime, NULL);	}	/** \brief stop current timer */	void stop()	{		gettimeofday(&stoptime, NULL);		double elapsed = 1000000*(stoptime.tv_sec-starttime.tv_sec)+			(stoptime.tv_usec-starttime.tv_usec);		timings.push_back(elapsed);		totaltime += elapsed;		if ( timings.size() == 1 ) max = min = elapsed;		else		{			if ( elapsed > max ) max = elapsed;			if ( elapsed < min ) min = elapsed;		}		avg = totaltime / timings.size();	}	/** \brief Return Max stored timing */	double getMax() const;	/** \brief Return Min stored timing */	double getMin() const;	/** \brief Return total timing */	double getTot() const;	/** \brief Return average timing */	double getAvg() const;	/** \brief Return number of timings */	size_t getNumTimings() const;	/** \brief Profile name */	std::string name;private:	/* \brief current start and stop times */	struct timeval starttime, stoptime;	/* \brief actual times */	std::vector<double> timings;	/* \brief total time */	double totaltime;	/* \brief max time */	double max;	/* \brief max time */	double min;	/* \brief max time */	double avg;};/* * \class Profiler utils.h geos.h * * \brief Profiling class * */class Profiler {public:	Profiler();	~Profiler();	/**	 * \brief	 * Return the singleton instance of the	 * profiler.	 */	static Profiler *instance(void);	/**	 * \brief	 * Start timer for named task. The task is	 * created if does not exist.	 */	void start(std::string name);	/**	 * \brief	 * Stop timer for named task. 	 * Elapsed time is registered in the given task.	 */	void stop(std::string name);	/** \brief get Profile of named task */	Profile *get(std::string name);	std::map<std::string, Profile *> profs;};/** \brief Return a string representing the Profile */std::ostream& operator<< (std::ostream& os, const Profile&);/** \brief Return a string representing the Profiler */std::ostream& operator<< (std::ostream& os, const Profiler&);} // namespace geos::util} // namespace geos#endif // ndef GEOS_PROFILER_H/********************************************************************** * $Log$ * Revision 1.8  2006/06/12 11:29:23  strk * unsigned int => size_t * * Revision 1.7  2006/03/06 19:40:47  strk * geos::util namespace. New GeometryCollection::iterator interface, many cleanups. * * Revision 1.6  2006/03/03 10:46:21  strk * Removed 'using namespace' from headers, added missing headers in .cpp files, removed useless includes in headers (bug#46) * * Revision 1.5  2005/02/01 14:18:04  strk * Made profiler start/stop inline * * Revision 1.4  2004/12/03 16:21:07  frank * dont try for sys/time.h with MSVC * * Revision 1.3  2004/11/30 16:44:16  strk * Added gettimeofday implementation for win32, curtesy of Wu Yongwei. * * Revision 1.2  2004/11/04 08:49:13  strk * Unlinked new documentation. * * Revision 1.1  2004/11/01 16:43:04  strk * Added Profiler code. * Temporarly patched a bug in DoubleBits (must check drawbacks). * Various cleanups and speedups. * **********************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -