Go to the documentation of this file.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 #include <vector>
00028 #include <string>
00029 #include <iostream>
00030
00031 namespace cinder {
00032
00035 class System {
00036 public:
00038 static bool hasSse2();
00040 static bool hasSse3();
00042 static bool hasSse4_1();
00044 static bool hasSse4_2();
00046 static bool hasX86_64();
00048 static int getNumCpus();
00050 static int getNumCores();
00053 static int getOsMajorVersion();
00056 static int getOsMinorVersion();
00059 static int getOsBugFixVersion();
00060
00062 static bool hasMultiTouch();
00064 static int32_t getMaxMultiTouchPoints();
00065
00066 #if defined( CINDER_COCOA_TOUCH )
00067 static bool isDeviceIphone();
00068 static bool isDeviceIpad();
00069 #endif
00070
00072 class NetworkAdapter {
00073 public:
00074 const std::string& getName() const { return mName; }
00075 const std::string& getIpAddress() const { return mIpAddress; }
00076
00077 NetworkAdapter( const std::string &name, const std::string &ip )
00078 : mName( name ), mIpAddress( ip ) {}
00079
00080 private:
00081 std::string mName, mIpAddress;
00082 };
00084 static std::vector<NetworkAdapter> getNetworkAdapters();
00086 static std::string getIpAddress();
00087
00088 private:
00089 enum { HAS_SSE2, HAS_SSE3, HAS_SSE4_1, HAS_SSE4_2, HAS_X86_64, PHYSICAL_CPUS, LOGICAL_CPUS, OS_MAJOR, OS_MINOR, OS_BUGFIX, MULTI_TOUCH, MAX_MULTI_TOUCH_POINTS,
00090 #if defined( CINDER_COCOA_TOUCH)
00091 IS_IPHONE, IS_IPAD,
00092 #endif
00093 TOTAL_CACHE_TYPES };
00094
00095 System();
00096 static std::shared_ptr<System> instance();
00097 static std::shared_ptr<System> sInstance;
00098
00099 bool mCachedValues[TOTAL_CACHE_TYPES];
00100 bool mHasSSE2, mHasSSE3, mHasSSE4_1, mHasSSE4_2, mHasX86_64;
00101 int mPhysicalCPUs, mLogicalCPUs;
00102 int32_t mOSMajorVersion, mOSMinorVersion, mOSBugFixVersion;
00103 bool mHasMultiTouch;
00104 uint32_t mMaxMultiTouchPoints;
00105 #if defined( CINDER_MSW )
00106 uint32_t mCPUID_EBX, mCPUID_ECX, mCPUID_EDX;
00107 #endif
00108 };
00109
00110 inline std::ostream& operator<<( std::ostream &outp, const System::NetworkAdapter &adapter )
00111 {
00112 outp << adapter.getName() << std::string(": IP: ") << adapter.getIpAddress();
00113 return outp;
00114 }
00115
00116 class SystemExc : public std::exception {
00117 };
00118
00119 class SystemExcFailedQuery : public SystemExc {
00120 };
00121
00122 }