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
00067 class NetworkAdapter {
00068 public:
00069 const std::string& getName() const { return mName; }
00070 const std::string& getIpAddress() const { return mIpAddress; }
00071
00072 NetworkAdapter( const std::string &name, const std::string &ip )
00073 : mName( name ), mIpAddress( ip ) {}
00074
00075 private:
00076 std::string mName, mIpAddress;
00077 };
00079 static std::vector<NetworkAdapter> getNetworkAdapters();
00081 static std::string getIpAddress();
00082
00083 private:
00084 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, TOTAL_CACHE_TYPES };
00085
00086 System();
00087 static std::shared_ptr<System> instance();
00088 static std::shared_ptr<System> sInstance;
00089
00090 bool mCachedValues[TOTAL_CACHE_TYPES];
00091 bool mHasSSE2, mHasSSE3, mHasSSE4_1, mHasSSE4_2, mHasX86_64;
00092 int mPhysicalCPUs, mLogicalCPUs;
00093 int32_t mOSMajorVersion, mOSMinorVersion, mOSBugFixVersion;
00094 bool mHasMultiTouch;
00095 uint32_t mMaxMultiTouchPoints;
00096 #if defined( CINDER_MSW )
00097 uint32_t mCPUID_EBX, mCPUID_ECX, mCPUID_EDX;
00098 #endif
00099 };
00100
00101 inline std::ostream& operator<<( std::ostream &outp, const System::NetworkAdapter &adapter )
00102 {
00103 outp << adapter.getName() << std::string(": IP: ") << adapter.getIpAddress();
00104 return outp;
00105 }
00106
00107 class SystemExc : public std::exception {
00108 };
00109
00110 class SystemExcFailedQuery : public SystemExc {
00111 };
00112
00113 }