| 
							- /*
 -   ==============================================================================
 - 
 -    This file is part of the JUCE library.
 -    Copyright (c) 2022 - Raw Material Software Limited
 - 
 -    JUCE is an open source library subject to commercial or open-source
 -    licensing.
 - 
 -    The code included in this file is provided under the terms of the ISC license
 -    http://www.isc.org/downloads/software-support-policy/isc-license. Permission
 -    To use, copy, modify, and/or distribute this software for any purpose with or
 -    without fee is hereby granted provided that the above copyright notice and
 -    this permission notice appear in all copies.
 - 
 -    JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
 -    EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
 -    DISCLAIMED.
 - 
 -   ==============================================================================
 - */
 - 
 - namespace juce
 - {
 - 
 - //==============================================================================
 - /**
 -     Contains methods for finding out about the current hardware and OS configuration.
 - 
 -     @tags{Core}
 - */
 - class JUCE_API  SystemStats  final
 - {
 - 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          = 0x0100,   /**< To test whether any version of OSX is running,
 -                                          you can use the expression ((getOperatingSystemType() & MacOSX) != 0). */
 -         Windows         = 0x0200,   /**< To test whether any version of Windows is running,
 -                                          you can use the expression ((getOperatingSystemType() & Windows) != 0). */
 -         Linux           = 0x0400,
 -         Android         = 0x0800,
 -         iOS             = 0x1000,
 -         WASM            = 0x2000,
 - 
 -         MacOSX_10_7     = MacOSX | 7,
 -         MacOSX_10_8     = MacOSX | 8,
 -         MacOSX_10_9     = MacOSX | 9,
 -         MacOSX_10_10    = MacOSX | 10,
 -         MacOSX_10_11    = MacOSX | 11,
 -         MacOSX_10_12    = MacOSX | 12,
 -         MacOSX_10_13    = MacOSX | 13,
 -         MacOSX_10_14    = MacOSX | 14,
 -         MacOSX_10_15    = MacOSX | 15,
 -         MacOS_11        = MacOSX | 16,
 -         MacOS_12        = MacOSX | 17,
 -         MacOS_13        = MacOSX | 18,
 -         MacOS_14        = MacOSX | 19,
 - 
 -         Win2000         = Windows | 1,
 -         WinXP           = Windows | 2,
 -         WinVista        = Windows | 3,
 -         Windows7        = Windows | 4,
 -         Windows8_0      = Windows | 5,
 -         Windows8_1      = Windows | 6,
 -         Windows10       = Windows | 7,
 -         Windows11       = Windows | 8
 -     };
 - 
 -     /** 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();
 - 
 -     /** Returns an environment variable.
 -         If the named value isn't set, this will return the defaultValue string instead.
 -     */
 -     static String getEnvironmentVariable (const String& name, const String& defaultValue);
 - 
 -     //==============================================================================
 -     /** 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 language of the user's locale.
 -         The return value is a 2 or 3 letter language code (ISO 639-1 or ISO 639-2)
 -     */
 -     static String getUserLanguage();
 - 
 -     /** Returns the region of the user's locale.
 -         The return value is a 2 letter country code (ISO 3166-1 alpha-2).
 -     */
 -     static String getUserRegion();
 - 
 -     /** Returns the user's display language.
 -         The return value is a 2 or 3 letter language code (ISO 639-1 or ISO 639-2).
 -         Note that depending on the OS and region, this may also be followed by a dash
 -         and a sub-region code, e.g "en-GB"
 -     */
 -     static String getDisplayLanguage();
 - 
 -     /** This will attempt to return some kind of string describing the device.
 -         If no description is available, it'll just return an empty string. You may
 -         want to use this for things like determining the type of phone/iPad, etc.
 -     */
 -     static String getDeviceDescription();
 - 
 -     /** This will attempt to return the manufacturer of the device.
 -         If no description is available, it'll just return an empty string.
 -     */
 -     static String getDeviceManufacturer();
 - 
 -     /** This method calculates some IDs to uniquely identify the device.
 - 
 -         The first choice for an ID is a filesystem ID for the user's home folder or
 -         windows directory. If that fails then this function returns the MAC addresses.
 -     */
 -     [[deprecated ("The identifiers produced by this function are not reliable. Use getUniqueDeviceID() instead.")]]
 -     static StringArray getDeviceIdentifiers();
 - 
 -     /** This method returns a machine unique ID unaffected by storage or peripheral
 -         changes.
 - 
 -         This ID will be invalidated by changes to the motherboard and CPU on non-mobile
 -         platforms, or performing a system restore on an Android device.
 - 
 -         There are some extra caveats on iOS: The returned ID is unique to the vendor part of
 -         your  'Bundle Identifier' and is stable for all associated apps. The key is invalidated
 -         once all associated apps are uninstalled. This function can return an empty string
 -         under certain conditions, for example, If the device has not been unlocked since a
 -         restart.
 -     */
 -     static String getUniqueDeviceID();
 - 
 -     /** Kinds of identifier that are passed to getMachineIdentifiers(). */
 -     enum class MachineIdFlags
 -     {
 -         macAddresses    = 1 << 0, ///< All Mac addresses of the machine.
 -         fileSystemId    = 1 << 1, ///< The filesystem id of the user's home directory (or system directory on Windows).
 -         legacyUniqueId  = 1 << 2, ///< Only implemented on Windows. A hash of the full smbios table, may be unstable on certain machines.
 -         uniqueId        = 1 << 3, ///< The most stable kind of machine identifier. A good default to use.
 -     };
 - 
 -     /** Returns a list of strings that can be used to uniquely identify a machine.
 - 
 -         To get multiple kinds of identifier at once, you can combine flags using
 -         bitwise-or, e.g. `uniqueId | legacyUniqueId`.
 - 
 -         If a particular kind of identifier isn't available, it will be omitted from
 -         the StringArray of results, so passing `uniqueId | legacyUniqueId`
 -         may return 0, 1, or 2 results, depending on the platform and whether any
 -         errors are encountered.
 - 
 -         If you've previously generated a machine ID and just want to check it against
 -         all possible identifiers, you can enable all of the flags and check whether
 -         the stored identifier matches any of the results.
 -     */
 -     static StringArray getMachineIdentifiers (MachineIdFlags flags);
 - 
 -     //==============================================================================
 -     // CPU and memory information..
 - 
 -     /** Returns the number of logical CPU cores. */
 -     static int getNumCpus() noexcept;
 - 
 -     /** Returns the number of physical CPU cores. */
 -     static int getNumPhysicalCpus() noexcept;
 - 
 -     /** 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 getCpuSpeedInMegahertz();
 - 
 -     /** Returns a string to indicate the CPU vendor.
 -         Might not be known on some systems.
 -     */
 -     static String getCpuVendor();
 - 
 -     /** Attempts to return a string describing the CPU model.
 -         May not be available on some systems.
 -     */
 -     static String getCpuModel();
 - 
 -     static bool hasMMX() noexcept;             /**< Returns true if Intel MMX instructions are available. */
 -     static bool has3DNow() noexcept;           /**< Returns true if AMD 3DNOW instructions are available. */
 -     static bool hasFMA3() noexcept;            /**< Returns true if AMD FMA3 instructions are available. */
 -     static bool hasFMA4() noexcept;            /**< Returns true if AMD FMA4 instructions are available. */
 -     static bool hasSSE() noexcept;             /**< Returns true if Intel SSE instructions are available. */
 -     static bool hasSSE2() noexcept;            /**< Returns true if Intel SSE2 instructions are available. */
 -     static bool hasSSE3() noexcept;            /**< Returns true if Intel SSE3 instructions are available. */
 -     static bool hasSSSE3() noexcept;           /**< Returns true if Intel SSSE3 instructions are available. */
 -     static bool hasSSE41() noexcept;           /**< Returns true if Intel SSE4.1 instructions are available. */
 -     static bool hasSSE42() noexcept;           /**< Returns true if Intel SSE4.2 instructions are available. */
 -     static bool hasAVX() noexcept;             /**< Returns true if Intel AVX instructions are available. */
 -     static bool hasAVX2() noexcept;            /**< Returns true if Intel AVX2 instructions are available. */
 -     static bool hasAVX512F() noexcept;         /**< Returns true if Intel AVX-512 Foundation instructions are available. */
 -     static bool hasAVX512BW() noexcept;        /**< Returns true if Intel AVX-512 Byte and Word instructions are available. */
 -     static bool hasAVX512CD() noexcept;        /**< Returns true if Intel AVX-512 Conflict Detection instructions are available. */
 -     static bool hasAVX512DQ() noexcept;        /**< Returns true if Intel AVX-512 Doubleword and Quadword instructions are available. */
 -     static bool hasAVX512ER() noexcept;        /**< Returns true if Intel AVX-512 Exponential and Reciprocal instructions are available. */
 -     static bool hasAVX512IFMA() noexcept;      /**< Returns true if Intel AVX-512 Integer Fused Multiply-Add instructions are available. */
 -     static bool hasAVX512PF() noexcept;        /**< Returns true if Intel AVX-512 Prefetch instructions are available. */
 -     static bool hasAVX512VBMI() noexcept;      /**< Returns true if Intel AVX-512 Vector Bit Manipulation instructions are available. */
 -     static bool hasAVX512VL() noexcept;        /**< Returns true if Intel AVX-512 Vector Length instructions are available. */
 -     static bool hasAVX512VPOPCNTDQ() noexcept; /**< Returns true if Intel AVX-512 Vector Population Count Double and Quad-word instructions are available. */
 -     static bool hasNeon() noexcept;            /**< Returns true if ARM NEON instructions are available. */
 - 
 -     //==============================================================================
 -     /** 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();
 - 
 -     //==============================================================================
 -     /** Returns a backtrace of the current call-stack.
 -         The usefulness of the result will depend on the level of debug symbols
 -         that are available in the executable.
 -     */
 -     static String getStackBacktrace();
 - 
 -     /** A function type for use in setApplicationCrashHandler().
 -         When called, its void* argument will contain platform-specific data about the crash.
 -     */
 -     using CrashHandlerFunction = void (*) (void*);
 - 
 -     /** Sets up a global callback function that will be called if the application
 -         executes some kind of illegal instruction.
 - 
 -         You may want to call getStackBacktrace() in your handler function, to find out
 -         where the problem happened and log it, etc.
 -     */
 -     static void setApplicationCrashHandler (CrashHandlerFunction);
 - 
 -     /** Returns true if this code is running inside an app extension sandbox.
 -         This function will always return false on windows, linux and android.
 -     */
 -     static bool isRunningInAppExtensionSandbox() noexcept;
 - 
 -    #if JUCE_MAC
 -     static bool isAppSandboxEnabled();
 -    #endif
 - 
 -     //==============================================================================
 -    #ifndef DOXYGEN
 -     [[deprecated ("This method was spelt wrong! Please change your code to use getCpuSpeedInMegahertz instead.")]]
 -     static int getCpuSpeedInMegaherz() { return getCpuSpeedInMegahertz(); }
 -    #endif
 - 
 - private:
 -     SystemStats() = delete; // uses only static methods
 -     JUCE_DECLARE_NON_COPYABLE (SystemStats)
 - };
 - 
 - JUCE_DECLARE_SCOPED_ENUM_BITWISE_OPERATORS (SystemStats::MachineIdFlags)
 - 
 - } // namespace juce
 
 
  |