ObjFW
Loading...
Searching...
No Matches
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
23OF_ASSUME_NONNULL_BEGIN
24
25@class OFDictionary OF_GENERIC(KeyType, ObjectType);
26@class OFIRI;
27
33OF_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_LOONGARCH64) || defined(DOXYGEN)
98@property (class, readonly, nonatomic) bool supportsLSX;
99@property (class, readonly, nonatomic) bool supportsLASX;
100# endif
101# if defined(OF_WINDOWS) || defined(DOXYGEN)
102@property (class, readonly, nonatomic, getter=isWindowsNT) bool windowsNT;
103# endif
104#endif
105
111+ (size_t)pageSize;
112
122+ (size_t)numberOfCPUs;
123
130
136+ (unsigned short)ObjFWVersionMajor;
137
143+ (unsigned short)ObjFWVersionMinor;
144
151+ (nullable OFString *)operatingSystemName;
152
159+ (nullable OFString *)operatingSystemVersion;
160
161#if defined(OF_WINDOWS) || defined(DOXYGEN)
171+ (nullable OFString *)wineVersion;
172#endif
173
185+ (nullable OFIRI *)userDataIRI;
186
200+ (nullable OFIRI *)userConfigIRI;
201
218+ (nullable OFIRI *)temporaryDirectoryIRI;
219
227+ (nullable OFString *)CPUVendor;
228
236+ (nullable OFString *)CPUModel;
237
238#if defined(OF_AMD64) || defined(OF_X86) || defined(DOXYGEN)
246+ (bool)supportsMMX;
247
255+ (bool)supports3DNow;
256
265
273+ (bool)supportsSSE;
274
282+ (bool)supportsSSE2;
283
291+ (bool)supportsSSE3;
292
300+ (bool)supportsSSSE3;
301
309+ (bool)supportsSSE41;
310
318+ (bool)supportsSSE42;
319
327+ (bool)supportsAVX;
328
336+ (bool)supportsAVX2;
337
345+ (bool)supportsAESNI;
346
355
364
372+ (bool)supportsF16C;
373
382
393
404
413
423
434
444
454
465
476
487
498
507
516
525#endif
526
527#if defined(OF_POWERPC) || defined(OF_POWERPC64) || defined(DOXYGEN)
535+ (bool)supportsAltiVec;
536#endif
537
538#if defined(OF_LOONGARCH64) || defined(DOXYGEN)
546+ (bool)supportsLSX;
547
555+ (bool)supportsLASX;
556#endif
557
558#if defined(OF_WINDOWS) || defined(DOXYGEN)
566+ (bool)isWindowsNT;
567#endif
568
569+ (instancetype)alloc OF_UNAVAILABLE;
570- (instancetype)init OF_UNAVAILABLE;
571@end
572
573OF_ASSUME_NONNULL_END
574
575#ifdef OF_HAVE_SOCKETS
576# import "OFSystemInfo+NetworkInterfaces.h"
577#endif
An abstract class for storing objects in a dictionary.
Definition OFDictionary.h:84
A class for representing IRIs, URIs, URLs and URNs, for parsing them as well as accessing parts of th...
Definition OFIRI.h:41
The root class for all other classes inside ObjFW.
Definition OFObject.h:692
instancetype init()
Initializes an already allocated object.
Definition OFObject.m:696
instancetype alloc()
Allocates memory for an instance of the class and sets up the memory pool for the object.
Definition OFObject.m:548
A class for handling strings.
Definition OFString.h:143
A class for querying information about the system.
Definition OFSystemInfo.h:35
nullable OFString * CPUVendor()
Returns the vendor of the CPU.
Definition OFSystemInfo.m:759
bool supportsAVX512Float16Instructions()
Returns whether the CPU and OS support AVX-512 Float16 Instructions.
bool supportsAVX()
Returns whether the CPU and OS support AVX.
size_t pageSize()
Returns the size of a page.
Definition OFSystemInfo.m:449
bool supportsAVX512VectorNeuralNetworkInstructions()
Returns whether the CPU and OS support AVX-512 Vector Neural Network Instructions.
bool supportsAVX512PrefetchInstructions()
Returns whether the CPU and OS support AVX-512 Prefetch Instructions.
bool supportsSSE3()
Returns whether the CPU supports SSE3.
bool supportsAVX512VectorByteManipulationInstructions()
Returns whether the CPU and OS support AVX-512 Vector Byte Manipulation Instructions.
bool supports3DNow()
Returns whether the CPU supports 3DNow!.
bool supportsAVX512VectorPopulationCountInstruction()
Returns whether the CPU and OS support the AVX-512 Vector Population Count Instruction.
bool supportsAltiVec()
Returns whether the CPU and OS support AltiVec.
bool supportsAVX512Foundation()
Returns whether the CPU and OS support AVX-512 Foundation.
bool supportsLSX()
Returns whether the CPU and OS support LSX.
bool supportsEnhanced3DNow()
Returns whether the CPU supports enhanced 3DNow!.
bool supportsAVX512ExponentialAndReciprocalInstructions()
Returns whether the CPU and OS support AVX-512 Exponential and Reciprocal Instructions.
nullable OFIRI * userDataIRI()
Returns the path where user data for the application can be stored.
Definition OFSystemInfo.m:501
nullable OFIRI * temporaryDirectoryIRI()
Returns a path where temporary files for can be stored.
Definition OFSystemInfo.m:677
bool supportsAVX512IntegerFusedMultiplyAdd()
Returns whether the CPU and OS support AVX-512 Integer Fused Multiply-Add.
bool supportsFusedMultiplyAdd()
Returns whether the CPU supports fused multiply-add.
bool supportsAVX512DoublewordAndQuadwordInstructions()
Returns whether the CPU and OS support AVX-512 Doubleword and Quadword Instructions.
bool supportsAVX512BFloat16Instructions()
Returns whether the CPU and OS support AVX-512 BFloat16 Instructions.
bool supportsF16C()
Returns whether the CPU supports F16C.
bool supportsAVX512ByteAndWordInstructions()
Returns whether the CPU and OS support AVX-512 Byte and Word Instructions.
nullable OFString * operatingSystemName()
Returns the name of the operating system the application is running on.
Definition OFSystemInfo.m:474
OFString * ObjFWVersion()
The version of ObjFW.
Definition OFSystemInfo.m:459
bool supportsAVX512ConflictDetectionInstructions()
Returns whether the CPU and OS support AVX-512 Conflict Detection Instructions.
nullable OFString * operatingSystemVersion()
Returns the version of the operating system the application is running on.
Definition OFSystemInfo.m:482
size_t numberOfCPUs()
Returns the number of CPUs installed in the system.
Definition OFSystemInfo.m:454
nullable OFString * wineVersion()
Returns the version of Wine the application is running on, or nil if not running on Wine (e....
bool supportsAVX512VectorByteManipulationInstructions2()
Returns whether the CPU and OS support AVX-512 Vector Byte Manipulation Instructions 2.
nullable OFString * CPUModel()
Returns the model of the CPU.
Definition OFSystemInfo.m:782
bool supportsSSE41()
Returns whether the CPU supports SSE4.1.
bool supportsSSSE3()
Returns whether the CPU supports SSSE3.
bool isWindowsNT()
Returns whether the application is running on Windows NT.
bool supportsLASX()
Returns whether the CPU and OS support LASX.
nullable OFIRI * userConfigIRI()
Returns the path where user configuration for the application can be stored.
Definition OFSystemInfo.m:593
bool supportsSSE42()
Returns whether the CPU supports SSE4.2.
unsigned short ObjFWVersionMinor()
The minor version of ObjFW.
Definition OFSystemInfo.m:469
bool supportsAVX512VectorLengthExtensions()
Returns whether the CPU and OS support AVX-512 Vector Length Extensions.
bool supportsAVX512BitAlgorithms()
Returns whether the CPU and OS support AVX-512 Bit Algorithms.
bool supportsAVX2()
Returns whether the CPU and OS support AVX2.
bool supportsAESNI()
Returns whether the CPU supports AES-NI.
bool supportsSSE()
Returns whether the CPU supports SSE.
bool supportsSHAExtensions()
Returns whether the CPU supports Intel SHA Extensions.
unsigned short ObjFWVersionMajor()
The major version of ObjFW.
Definition OFSystemInfo.m:464
bool supportsSSE2()
Returns whether the CPU supports SSE2.
bool supportsMMX()
Returns whether the CPU supports MMX.