KUDr@3900: /* $Id$ */ KUDr@3900: KUDr@3900: #ifndef YAPF_HPP KUDr@3900: #define YAPF_HPP KUDr@3900: KUDr@3900: KUDr@3900: KUDr@3900: #include "track_dir.hpp" KUDr@3900: KUDr@3900: EXTERN_C_BEGIN KUDr@3900: #include "../depot.h" KUDr@3900: #include "../road_map.h" KUDr@3900: #include "../tunnel_map.h" KUDr@3900: #include "../bridge_map.h" KUDr@3900: #include "../bridge.h" KUDr@3931: #include "../station.h" KUDr@3900: #include "../station_map.h" KUDr@3900: #include "../vehicle.h" rubidium@4261: #include "../date.h" KUDr@3900: #include "../functions.h" KUDr@3900: #include "yapf.h" KUDr@3900: #include "../pathfind.h" KUDr@3900: #include "../waypoint.h" KUDr@3900: #include "../debug.h" KUDr@3900: EXTERN_C_END KUDr@3900: KUDr@3900: EXTERN_C_BEGIN KUDr@3900: extern Patches _patches_newgame; KUDr@3900: extern uint64 _rdtsc(void); KUDr@3900: EXTERN_C_END KUDr@3900: KUDr@3900: #include KUDr@3904: #include KUDr@3900: KUDr@3900: #if defined(_WIN32) || defined(_WIN64) KUDr@3900: # include KUDr@3900: #else KUDr@3900: # include KUDr@3900: #endif KUDr@3900: KUDr@3900: struct CPerformanceTimer KUDr@3900: { KUDr@3900: int64 m_start; KUDr@3900: int64 m_acc; KUDr@3900: KUDr@3900: CPerformanceTimer() : m_start(0), m_acc(0) {} KUDr@3900: KUDr@3900: FORCEINLINE void Start() {m_start = QueryTime();} KUDr@3900: FORCEINLINE void Stop() {m_acc += QueryTime() - m_start;} KUDr@3900: FORCEINLINE int Get(int64 coef) {return (int)(m_acc * coef / QueryFrequency());} KUDr@3900: KUDr@3900: #if !defined(UNITTEST) && 1 KUDr@3900: FORCEINLINE int64 QueryTime() {return _rdtsc();} KUDr@3900: FORCEINLINE int64 QueryFrequency() {return ((int64)2200 * 1000000);} KUDr@3900: #elif defined(_WIN32) || defined(_WIN64) KUDr@3900: FORCEINLINE int64 QueryTime() {LARGE_INTEGER c; QueryPerformanceCounter(&c); return c.QuadPart;} KUDr@3900: FORCEINLINE int64 QueryFrequency() {LARGE_INTEGER f; QueryPerformanceFrequency(&f); return f.QuadPart;} KUDr@3900: #elif defined(CLOCK_THREAD_CPUTIME_ID) KUDr@3900: FORCEINLINE int64 QueryTime() KUDr@3900: { KUDr@3900: timespec ts; KUDr@3900: int ret = clock_gettime(CLOCK_THREAD_CPUTIME_ID, &ts); KUDr@3900: if (ret != 0) return 0; KUDr@3900: return (ts.tv_sec * 1000000000LL) + ts.tv_nsec; KUDr@3900: } KUDr@3900: FORCEINLINE int64 QueryFrequency() KUDr@3900: { KUDr@3900: return 1000000000; KUDr@3900: } KUDr@3900: #else KUDr@3900: int64 QueryTime() {return 0;} KUDr@3900: int64 QueryFrequency() {return 1;} KUDr@3900: #endif KUDr@3900: }; KUDr@3900: KUDr@3900: struct CPerfStartReal KUDr@3900: { KUDr@3900: CPerformanceTimer* m_pperf; KUDr@3900: KUDr@3900: FORCEINLINE CPerfStartReal(CPerformanceTimer& perf) : m_pperf(&perf) {if (m_pperf != NULL) m_pperf->Start();} KUDr@3900: FORCEINLINE ~CPerfStartReal() {Stop();} KUDr@3900: FORCEINLINE void Stop() {if (m_pperf != NULL) {m_pperf->Stop(); m_pperf = NULL;}} KUDr@3900: }; KUDr@3900: KUDr@3900: struct CPerfStartFake KUDr@3900: { KUDr@3900: FORCEINLINE CPerfStartFake(CPerformanceTimer& perf) {} KUDr@3900: FORCEINLINE ~CPerfStartFake() {} KUDr@3900: FORCEINLINE void Stop() {} KUDr@3900: }; KUDr@3900: KUDr@3900: typedef CPerfStartFake CPerfStart; KUDr@3900: KUDr@3900: KUDr@3900: //#undef FORCEINLINE KUDr@3900: //#define FORCEINLINE inline KUDr@3900: KUDr@3900: #include "crc32.hpp" KUDr@3900: #include "blob.hpp" KUDr@3900: #include "fixedsizearray.hpp" KUDr@3900: #include "array.hpp" KUDr@3900: #include "hashtable.hpp" KUDr@3900: #include "binaryheap.hpp" KUDr@3900: #include "nodelist.hpp" KUDr@3900: #include "yapf_base.hpp" KUDr@3900: #include "yapf_node.hpp" KUDr@3900: #include "yapf_common.hpp" KUDr@3900: #include "follow_track.hpp" KUDr@3900: #include "yapf_costbase.hpp" KUDr@3900: #include "yapf_costcache.hpp" KUDr@3900: KUDr@3900: KUDr@3900: #endif /* YAPF_HPP */