ObjFW
OFSystemInfo.h
1 /*
2  * Copyright (c) 2008-2024 Jonathan Schleifer <js@nil.im>
3  *
4  * All rights reserved.
5  *
6  * This program is free software: you can redistribute it and/or modify it
7  * under the terms of the GNU Lesser General Public License version 3.0 only,
8  * as published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
13  * version 3.0 for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public License
16  * version 3.0 along with this program. If not, see
17  * <https://www.gnu.org/licenses/>.
18  */
19 
20 #import "OFObject.h"
21 #import "OFString.h"
22 
23 OF_ASSUME_NONNULL_BEGIN
24 
25 @class OFDictionary OF_GENERIC(KeyType, ObjectType);
26 @class OFIRI;
27 
33 OF_SUBCLASSING_RESTRICTED
35 #ifdef OF_HAVE_CLASS_PROPERTIES
36 @property (class, readonly, nonatomic) size_t pageSize;
37 @property (class, readonly, nonatomic) size_t numberOfCPUs;
38 @property (class, readonly, nonatomic) OFString *ObjFWVersion;
39 @property (class, readonly, nonatomic) unsigned short ObjFWVersionMajor;
40 @property (class, readonly, nonatomic) unsigned short ObjFWVersionMinor;
41 @property (class, readonly, nullable, nonatomic) OFString *operatingSystemName;
42 @property (class, readonly, nullable, nonatomic)
44 #if defined(OF_WINDOWS) || defined(DOXYGEN)
45 @property (class, readonly, nullable, nonatomic) OFString *wineVersion;
46 #endif
47 @property (class, readonly, nullable, nonatomic) OFIRI *userDataIRI;
48 @property (class, readonly, nullable, nonatomic) OFIRI *userConfigIRI;
49 @property (class, readonly, nullable, nonatomic) OFIRI *temporaryDirectoryIRI;
50 @property (class, readonly, nullable, nonatomic) OFString *CPUVendor;
51 @property (class, readonly, nullable, nonatomic) OFString *CPUModel;
52 # if defined(OF_AMD64) || defined(OF_X86) || defined(DOXYGEN)
53 @property (class, readonly, nonatomic) bool supportsMMX;
54 @property (class, readonly, nonatomic) bool supports3DNow;
55 @property (class, readonly, nonatomic) bool supportsEnhanced3DNow;
56 @property (class, readonly, nonatomic) bool supportsSSE;
57 @property (class, readonly, nonatomic) bool supportsSSE2;
58 @property (class, readonly, nonatomic) bool supportsSSE3;
59 @property (class, readonly, nonatomic) bool supportsSSSE3;
60 @property (class, readonly, nonatomic) bool supportsSSE41;
61 @property (class, readonly, nonatomic) bool supportsSSE42;
62 @property (class, readonly, nonatomic) bool supportsAVX;
63 @property (class, readonly, nonatomic) bool supportsAVX2;
64 @property (class, readonly, nonatomic) bool supportsAESNI;
65 @property (class, readonly, nonatomic) bool supportsSHAExtensions;
66 @property (class, readonly, nonatomic) bool supportsFusedMultiplyAdd;
67 @property (class, readonly, nonatomic) bool supportsF16C;
68 @property (class, readonly, nonatomic) bool supportsAVX512Foundation;
69 @property (class, readonly, nonatomic)
71 @property (class, readonly, nonatomic)
73 @property (class, readonly, nonatomic) bool supportsAVX512PrefetchInstructions;
74 @property (class, readonly, nonatomic)
76 @property (class, readonly, nonatomic)
78 @property (class, readonly, nonatomic)
80 @property (class, readonly, nonatomic)
82 @property (class, readonly, nonatomic)
84 @property (class, readonly, nonatomic)
86 @property (class, readonly, nonatomic)
88 @property (class, readonly, nonatomic)
90 @property (class, readonly, nonatomic) bool supportsAVX512BitAlgorithms;
91 @property (class, readonly, nonatomic) bool supportsAVX512Float16Instructions;
92 @property (class, readonly, nonatomic) bool supportsAVX512BFloat16Instructions;
93 # endif
94 # if defined(OF_POWERPC) || defined(OF_POWERPC64) || defined(DOXYGEN)
95 @property (class, readonly, nonatomic) bool supportsAltiVec;
96 # endif
97 # if defined(OF_WINDOWS) || defined(DOXYGEN)
98 @property (class, readonly, nonatomic, getter=isWindowsNT) bool windowsNT;
99 # endif
100 #endif
101 
107 + (size_t)pageSize;
108 
118 + (size_t)numberOfCPUs;
119 
126 
132 + (unsigned short)ObjFWVersionMajor;
133 
139 + (unsigned short)ObjFWVersionMinor;
140 
147 + (nullable OFString *)operatingSystemName;
148 
155 + (nullable OFString *)operatingSystemVersion;
156 
157 #if defined(OF_WINDOWS) || defined(DOXYGEN)
158 
167 + (nullable OFString *)wineVersion;
168 #endif
169 
181 + (nullable OFIRI *)userDataIRI;
182 
196 + (nullable OFIRI *)userConfigIRI;
197 
214 + (nullable OFIRI *)temporaryDirectoryIRI;
215 
223 + (nullable OFString *)CPUVendor;
224 
232 + (nullable OFString *)CPUModel;
233 
234 #if defined(OF_AMD64) || defined(OF_X86) || defined(DOXYGEN)
235 
242 + (bool)supportsMMX;
243 
251 + (bool)supports3DNow;
252 
260 + (bool)supportsEnhanced3DNow;
261 
269 + (bool)supportsSSE;
270 
278 + (bool)supportsSSE2;
279 
287 + (bool)supportsSSE3;
288 
296 + (bool)supportsSSSE3;
297 
305 + (bool)supportsSSE41;
306 
314 + (bool)supportsSSE42;
315 
323 + (bool)supportsAVX;
324 
332 + (bool)supportsAVX2;
333 
341 + (bool)supportsAESNI;
342 
350 + (bool)supportsSHAExtensions;
351 
360 
368 + (bool)supportsF16C;
369 
378 
389 
400 
409 
419 
430 
440 
450 
461 
472 
483 
494 
503 
512 
521 #endif
522 
523 #if defined(OF_POWERPC) || defined(OF_POWERPC64) || defined(DOXYGEN)
524 
531 + (bool)supportsAltiVec;
532 #endif
533 
534 #if defined(OF_WINDOWS) || defined(DOXYGEN)
535 
542 + (bool)isWindowsNT;
543 #endif
544 
545 + (instancetype)alloc OF_UNAVAILABLE;
546 - (instancetype)init OF_UNAVAILABLE;
547 @end
548 
549 OF_ASSUME_NONNULL_END
550 
551 #ifdef OF_HAVE_SOCKETS
552 # import "OFSystemInfo+NetworkInterfaces.h"
553 #endif
bool supportsAVX512Float16Instructions()
Returns whether the CPU and OS support AVX-512 Float16 Instructions.
bool supportsAESNI()
Returns whether the CPU supports AES-NI.
bool supportsMMX()
Returns whether the CPU supports MMX.
A class for querying information about the system.
Definition: OFSystemInfo.h:34
size_t pageSize()
Returns the size of a page.
Definition: OFSystemInfo.m:433
bool supportsAVX512PrefetchInstructions()
Returns whether the CPU and OS support AVX-512 Prefetch Instructions.
bool supportsSSE41()
Returns whether the CPU supports SSE4.1.
bool supportsAVX512VectorByteManipulationInstructions2()
Returns whether the CPU and OS support AVX-512 Vector Byte Manipulation Instructions 2...
bool supportsSSE42()
Returns whether the CPU supports SSE4.2.
nullable OFIRI * userDataIRI()
Returns the path where user data for the application can be stored.
Definition: OFSystemInfo.m:485
The root class for all other classes inside ObjFW.
Definition: OFObject.h:690
bool supportsAVX512VectorNeuralNetworkInstructions()
Returns whether the CPU and OS support AVX-512 Vector Neural Network Instructions.
bool supportsSSSE3()
Returns whether the CPU supports SSSE3.
bool supportsAVX2()
Returns whether the CPU and OS support AVX2.
bool supportsSHAExtensions()
Returns whether the CPU supports Intel SHA Extensions.
A class for handling strings.
Definition: OFString.h:138
bool supportsSSE2()
Returns whether the CPU supports SSE2.
An abstract class for storing objects in a dictionary.
Definition: OFDictionary.h:82
OFString * ObjFWVersion()
The version of ObjFW.
Definition: OFSystemInfo.m:443
bool supportsAVX512ByteAndWordInstructions()
Returns whether the CPU and OS support AVX-512 Byte and Word Instructions.
bool supportsF16C()
Returns whether the CPU supports F16C.
bool supportsAVX512VectorPopulationCountInstruction()
Returns whether the CPU and OS support the AVX-512 Vector Population Count Instruction.
nullable OFIRI * temporaryDirectoryIRI()
Returns a path where temporary files for can be stored.
Definition: OFSystemInfo.m:661
instancetype init()
Initializes an already allocated object.
Definition: OFObject.m:696
bool supportsAVX512BitAlgorithms()
Returns whether the CPU and OS support AVX-512 Bit Algorithms.
unsigned short ObjFWVersionMajor()
The major version of ObjFW.
Definition: OFSystemInfo.m:448
bool supportsAVX512VectorByteManipulationInstructions()
Returns whether the CPU and OS support AVX-512 Vector Byte Manipulation Instructions.
bool supportsFusedMultiplyAdd()
Returns whether the CPU supports fused multiply-add.
instancetype alloc()
Allocates memory for an instance of the class and sets up the memory pool for the object...
Definition: OFObject.m:548
bool supportsAVX512BFloat16Instructions()
Returns whether the CPU and OS support AVX-512 BFloat16 Instructions.
bool supportsAVX512IntegerFusedMultiplyAdd()
Returns whether the CPU and OS support AVX-512 Integer Fused Multiply-Add.
bool supportsAVX()
Returns whether the CPU and OS support AVX.
bool supportsEnhanced3DNow()
Returns whether the CPU supports enhanced 3DNow!.
A class for representing IRIs, URIs, URLs and URNs, for parsing them as well as accessing parts of th...
Definition: OFIRI.h:39
bool isWindowsNT()
Returns whether the application is running on Windows NT.
nullable OFString * operatingSystemName()
Returns the name of the operating system the application is running on.
Definition: OFSystemInfo.m:458
nullable OFString * CPUModel()
Returns the model of the CPU.
Definition: OFSystemInfo.m:766
size_t numberOfCPUs()
Returns the number of CPUs installed in the system.
Definition: OFSystemInfo.m:438
bool supportsAVX512ConflictDetectionInstructions()
Returns whether the CPU and OS support AVX-512 Conflict Detection Instructions.
nullable OFString * CPUVendor()
Returns the vendor of the CPU.
Definition: OFSystemInfo.m:743
bool supportsSSE()
Returns whether the CPU supports SSE.
nullable OFString * operatingSystemVersion()
Returns the version of the operating system the application is running on.
Definition: OFSystemInfo.m:466
bool supportsAVX512Foundation()
Returns whether the CPU and OS support AVX-512 Foundation.
nullable OFIRI * userConfigIRI()
Returns the path where user configuration for the application can be stored.
Definition: OFSystemInfo.m:577
bool supportsAVX512VectorLengthExtensions()
Returns whether the CPU and OS support AVX-512 Vector Length Extensions.
bool supportsSSE3()
Returns whether the CPU supports SSE3.
unsigned short ObjFWVersionMinor()
The minor version of ObjFW.
Definition: OFSystemInfo.m:453
bool supports3DNow()
Returns whether the CPU supports 3DNow!.
bool supportsAVX512DoublewordAndQuadwordInstructions()
Returns whether the CPU and OS support AVX-512 Doubleword and Quadword Instructions.
bool supportsAltiVec()
Returns whether the CPU and OS support AltiVec.
bool supportsAVX512ExponentialAndReciprocalInstructions()
Returns whether the CPU and OS support AVX-512 Exponential and Reciprocal Instructions.
nullable OFString * wineVersion()
Returns the version of Wine the application is running on, or nil if not running on Wine (e...