/* ============================================================================== This file is part of the JUCE library - "Jules' Utility Class Extensions" Copyright 2004-11 by Raw Material Software Ltd. ------------------------------------------------------------------------------ JUCE can be redistributed and/or modified under the terms of the GNU General Public License (Version 2), as published by the Free Software Foundation. A copy of the license is included in the JUCE distribution, or can be found online at www.gnu.org/licenses. JUCE is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ------------------------------------------------------------------------------ To release a closed-source product which uses JUCE, commercial licenses are available: visit www.rawmaterialsoftware.com/juce for more information. ============================================================================== */ #ifndef __JUCE_SYSTEMSTATS_JUCEHEADER__ #define __JUCE_SYSTEMSTATS_JUCEHEADER__ #include "../text/juce_StringArray.h" //============================================================================== /** Contains methods for finding out about the current hardware and OS configuration. */ class JUCE_API SystemStats { public: //============================================================================== /** Returns the current version of JUCE, See also the JUCE_VERSION, JUCE_MAJOR_VERSION and JUCE_MINOR_VERSION macros. */ static String getJUCEVersion(); //============================================================================== /** The set of possible results of the getOperatingSystemType() method. */ enum OperatingSystemType { UnknownOS = 0, MacOSX = 0x1000, Linux = 0x2000, Android = 0x3000, Win95 = 0x4001, Win98 = 0x4002, WinNT351 = 0x4103, WinNT40 = 0x4104, Win2000 = 0x4105, WinXP = 0x4106, WinVista = 0x4107, Windows7 = 0x4108, Windows = 0x4000, /**< To test whether any version of Windows is running, you can use the expression ((getOperatingSystemType() & Windows) != 0). */ WindowsNT = 0x0100, /**< To test whether the platform is Windows NT or later (i.e. not Win95 or 98), you can use the expression ((getOperatingSystemType() & WindowsNT) != 0). */ }; /** Returns the type of operating system we're running on. @returns one of the values from the OperatingSystemType enum. @see getOperatingSystemName */ static OperatingSystemType getOperatingSystemType(); /** Returns the name of the type of operating system we're running on. @returns a string describing the OS type. @see getOperatingSystemType */ static String getOperatingSystemName(); /** Returns true if the OS is 64-bit, or false for a 32-bit OS. */ static bool isOperatingSystem64Bit(); #if JUCE_MAC || DOXYGEN /** OSX ONLY - Returns the current OS version number. E.g. if it's running on 10.4, this will be 4, 10.5 will return 5, etc. */ static int getOSXMinorVersionNumber(); #endif //============================================================================== /** Returns the current user's name, if available. @see getFullUserName() */ static String getLogonName(); /** Returns the current user's full name, if available. On some OSes, this may just return the same value as getLogonName(). @see getLogonName() */ static String getFullUserName(); /** Returns the host-name of the computer. */ static String getComputerName(); /** Returns the user's language. The return value is a 2 or 3 letter language code (ISO 639-1 or ISO 639-2) */ static String getUserLanguage(); /** Returns the user's region. The return value is a 2 letter country code (ISO 3166-1 alpha-2). */ static String getUserRegion(); //============================================================================== // CPU and memory information.. /** Returns the number of CPUs. */ static int getNumCpus() noexcept { return getCPUFlags().numCpus; } /** Returns the approximate CPU speed. @returns the speed in megahertz, e.g. 1500, 2500, 32000 (depending on what year you're reading this...) */ static int getCpuSpeedInMegaherz(); /** Returns a string to indicate the CPU vendor. Might not be known on some systems. */ static String getCpuVendor(); /** Checks whether Intel MMX instructions are available. */ static bool hasMMX() noexcept { return getCPUFlags().hasMMX; } /** Checks whether Intel SSE instructions are available. */ static bool hasSSE() noexcept { return getCPUFlags().hasSSE; } /** Checks whether Intel SSE2 instructions are available. */ static bool hasSSE2() noexcept { return getCPUFlags().hasSSE2; } /** Checks whether AMD 3DNOW instructions are available. */ static bool has3DNow() noexcept { return getCPUFlags().has3DNow; } //============================================================================== /** Finds out how much RAM is in the machine. @returns the approximate number of megabytes of memory, or zero if something goes wrong when finding out. */ static int getMemorySizeInMegabytes(); /** Returns the system page-size. This is only used by programmers with beards. */ static int getPageSize(); private: //============================================================================== struct CPUFlags { CPUFlags(); int numCpus; bool hasMMX : 1; bool hasSSE : 1; bool hasSSE2 : 1; bool has3DNow : 1; }; SystemStats(); static const CPUFlags& getCPUFlags(); JUCE_DECLARE_NON_COPYABLE (SystemStats); }; #endif // __JUCE_SYSTEMSTATS_JUCEHEADER__