00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #pragma once
00024
00025 #include "cinder/Cinder.h"
00026
00027 namespace cinder {
00028
00031 class System {
00032 public:
00034 static bool hasSse2();
00036 static bool hasSse3();
00038 static bool hasSse4_1();
00040 static bool hasSse4_2();
00042 static bool hasX86_64();
00044 static int getNumCpus();
00046 static int getNumCores();
00047 #if ! defined( CINDER_COCOA_TOUCH )
00048
00049
00050 static int getOsMajorVersion();
00053 static int getOsMinorVersion();
00056 static int getOsBugFixVersion();
00057 #endif //! defined( CINDER_COCOA_TOUCH )
00058 private:
00059 enum { HAS_SSE2, HAS_SSE3, HAS_SSE4_1, HAS_SSE4_2, HAS_X86_64, PHYSICAL_CPUS, LOGICAL_CPUS, OS_MAJOR, OS_MINOR, OS_BUGFIX, TOTAL_CACHE_TYPES };
00060
00061 System();
00062 static shared_ptr<System> instance();
00063 static shared_ptr<System> sInstance;
00064
00065 bool mCachedValues[TOTAL_CACHE_TYPES];
00066 bool mHasSSE2, mHasSSE3, mHasSSE4_1, mHasSSE4_2, mHasX86_64;
00067 int mPhysicalCPUs, mLogicalCPUs;
00068 int32_t mOSMajorVersion, mOSMinorVersion, mOSBugFixVersion;
00069 #if defined( CINDER_MSW )
00070 uint32_t mCPUID_EBX, mCPUID_ECX, mCPUID_EDX;
00071 #endif
00072 };
00073
00074 class SystemExc : public std::exception {
00075 };
00076
00077 class SystemExcFailedQuery : public SystemExc {
00078 };
00079
00080 }