20#include "objfw-defs.h"
22#ifndef __STDC_LIMIT_MACROS
23# define __STDC_LIMIT_MACROS
25#ifndef __STDC_CONSTANT_MACROS
26# define __STDC_CONSTANT_MACROS
46# ifdef __MINGW64_VERSION_MAJOR
52OF_ASSUME_NONNULL_BEGIN
82 id _Nonnull right,
void *_Nullable context);
130static OF_INLINE
OFRange OF_CONST_FUNC
133 OFRange range = { start, length };
163static OF_INLINE
size_t
167 extern void OF_NO_RETURN_FUNC _OFThrowOutOfRangeException(
void);
168 _OFThrowOutOfRangeException();
184 return (location >= range.
location &&
265static OF_INLINE
OFPoint OF_CONST_FUNC
283 if (point1.
x != point2.
x)
286 if (point1.
y != point2.
y)
311static OF_INLINE
OFSize OF_CONST_FUNC
314 OFSize size = { width, height };
359static OF_INLINE
OFRect OF_CONST_FUNC
463 if (vector1.
x != vector2.
x)
466 if (vector1.
y != vector2.
y)
469 if (vector1.
z != vector2.
z)
486 vector1.
z + vector2.
z);
500 vector1.
z - vector2.
z);
524static OF_INLINE
float
527 return vector1.
x * vector2.
x + vector1.
y * vector2.
y +
528 vector1.
z * vector2.
z;
538static OF_INLINE
float
589 if (vector1.
x != vector2.
x)
592 if (vector1.
y != vector2.
y)
595 if (vector1.
z != vector2.
z)
598 if (vector1.
w != vector2.
w)
615 vector1.
z + vector2.
z, vector1.
w + vector2.
w);
629 vector1.
z - vector2.
z, vector1.
w - vector2.
w);
643 vector.
z * scalar, vector.
w * scalar);
653static OF_INLINE
float
656 return vector1.
x * vector2.
x + vector1.
y * vector2.
y +
657 vector1.
z * vector2.
z + vector1.
w * vector2.
w;
667static OF_INLINE
float
684 uint32_t tmp = (uint32_t)*hash;
716 uint32_t tmp = (uint32_t)*hash;
783- (bool)isKindOfClass: (Class)class_;
792- (bool)isMemberOfClass: (Class)class_;
801- (bool)respondsToSelector: (
SEL)selector;
809- (bool)conformsToProtocol: (Protocol *)protocol;
817- (nullable
IMP)methodForSelector: (
SEL)selector;
825- (nullable id)performSelector: (
SEL)selector;
835- (nullable id)performSelector: (
SEL)selector withObject: (nullable
id)object;
847- (nullable id)performSelector: (
SEL)selector
848 withObject: (nullable
id)object1
849 withObject: (nullable
id)object2;
863- (nullable id)performSelector: (
SEL)selector
864 withObject: (nullable
id)object1
865 withObject: (nullable
id)object2
866 withObject: (nullable
id)object3;
882- (nullable id)performSelector: (
SEL)selector
883 withObject: (nullable
id)object1
884 withObject: (nullable
id)object2
885 withObject: (nullable
id)object3
886 withObject: (nullable
id)object4;
900- (bool)isEqual: (nullable
id)object;
957#ifndef __clang_analyzer__
960 Class _isa __attribute__((__unused__));
964#ifdef OF_HAVE_CLASS_PROPERTIES
966@property (
class, readonly, nonatomic) Class
class;
968@property (
class, readonly, nonatomic, getter=
class) Class class_;
971@property (
class, readonly, nullable, nonatomic) Class superclass;
976@property (readonly, nonatomic) Class
class;
978@property (readonly, nonatomic, getter=
class) Class class_;
980@property OF_NULLABLE_PROPERTY (readonly, nonatomic) Class superclass;
981@property (readonly, nonatomic)
unsigned long hash;
982@property (readonly, nonatomic)
unsigned int retainCount;
983@property (readonly, nonatomic)
bool isProxy;
984@property (readonly, nonatomic)
bool allowsWeakReference;
1047+ (instancetype)
alloc;
1070+ (bool)isSubclassOfClass: (Class)class_;
1077+ (nullable Class)superclass;
1086+ (bool)instancesRespondToSelector: (
SEL)selector;
1094+ (bool)conformsToProtocol: (Protocol *)protocol;
1104+ (nullable
IMP)instanceMethodForSelector: (
SEL)selector;
1116 instanceMethodSignatureForSelector: (
SEL)selector;
1134+ (nullable
IMP)replaceClassMethod: (
SEL)selector
1135 withMethodFromClass: (Class)class_;
1145+ (nullable
IMP)replaceInstanceMethod: (
SEL)selector
1146 withMethodFromClass: (Class)class_;
1166+ (void)inheritMethodsFromClass: (Class)class_;
1176+ (bool)resolveClassMethod: (
SEL)selector;
1186+ (bool)resolveInstanceMethod: (
SEL)selector;
1229- (instancetype)
init;
1255- (void)performSelector: (
SEL)selector afterDelay: (
OFTimeInterval)delay;
1266- (void)performSelector: (
SEL)selector
1267 withObject: (nullable
id)object
1281- (void)performSelector: (
SEL)selector
1282 withObject: (nullable
id)object1
1283 withObject: (nullable
id)object2
1299- (void)performSelector: (
SEL)selector
1300 withObject: (nullable
id)object1
1301 withObject: (nullable
id)object2
1302 withObject: (nullable
id)object3
1320- (void)performSelector: (
SEL)selector
1321 withObject: (nullable
id)object1
1322 withObject: (nullable
id)object2
1323 withObject: (nullable
id)object3
1324 withObject: (nullable
id)object4
1327#ifdef OF_HAVE_THREADS
1335- (void)performSelector: (
SEL)selector
1337 waitUntilDone: (
bool)waitUntilDone;
1349- (void)performSelector: (
SEL)selector
1351 withObject: (nullable
id)object
1352 waitUntilDone: (
bool)waitUntilDone;
1366- (void)performSelector: (
SEL)selector
1368 withObject: (nullable
id)object1
1369 withObject: (nullable
id)object2
1370 waitUntilDone: (
bool)waitUntilDone;
1386- (void)performSelector: (
SEL)selector
1388 withObject: (nullable
id)object1
1389 withObject: (nullable
id)object2
1390 withObject: (nullable
id)object3
1391 waitUntilDone: (
bool)waitUntilDone;
1409- (void)performSelector: (
SEL)selector
1411 withObject: (nullable
id)object1
1412 withObject: (nullable
id)object2
1413 withObject: (nullable
id)object3
1414 withObject: (nullable
id)object4
1415 waitUntilDone: (
bool)waitUntilDone;
1423- (void)performSelectorOnMainThread: (
SEL)selector
1424 waitUntilDone: (
bool)waitUntilDone;
1435- (void)performSelectorOnMainThread: (
SEL)selector
1436 withObject: (nullable
id)object
1437 waitUntilDone: (
bool)waitUntilDone;
1450- (void)performSelectorOnMainThread: (
SEL)selector
1451 withObject: (nullable
id)object1
1452 withObject: (nullable
id)object2
1453 waitUntilDone: (
bool)waitUntilDone;
1468- (void)performSelectorOnMainThread: (
SEL)selector
1469 withObject: (nullable
id)object1
1470 withObject: (nullable
id)object2
1471 withObject: (nullable
id)object3
1472 waitUntilDone: (
bool)waitUntilDone;
1489- (void)performSelectorOnMainThread: (
SEL)selector
1490 withObject: (nullable
id)object1
1491 withObject: (nullable
id)object2
1492 withObject: (nullable
id)object3
1493 withObject: (nullable
id)object4
1494 waitUntilDone: (
bool)waitUntilDone;
1504- (void)performSelector: (
SEL)selector
1518- (void)performSelector: (
SEL)selector
1520 withObject: (nullable
id)object
1535- (void)performSelector: (
SEL)selector
1537 withObject: (nullable
id)object1
1538 withObject: (nullable
id)object2
1555- (void)performSelector: (
SEL)selector
1557 withObject: (nullable
id)object1
1558 withObject: (nullable
id)object2
1559 withObject: (nullable
id)object3
1578- (void)performSelector: (
SEL)selector
1580 withObject: (nullable
id)object1
1581 withObject: (nullable
id)object2
1582 withObject: (nullable
id)object3
1583 withObject: (nullable
id)object4
1598- (nullable id)forwardingTargetForSelector: (
SEL)selector;
1609- (void)doesNotRecognizeSelector: (
SEL)selector OF_NO_RETURN;
1638@protocol OFMutableCopying
1655@protocol OFComparing
1682extern void *_Nullable
OFAllocMemory(
size_t count,
size_t size)
1683 OF_MALLOC_FUNC OF_WARN_UNUSED_RESULT;
1700 OF_MALLOC_FUNC OF_WARN_UNUSED_RESULT;
1719extern void *_Nullable
OFResizeMemory(
void *_Nullable pointer,
size_t count,
1720 size_t size) OF_WARN_UNUSED_RESULT;
1731#ifdef OF_APPLE_RUNTIME
1732extern void *_Null_unspecified objc_autoreleasePoolPush(
void);
1733extern void objc_autoreleasePoolPop(
void *_Null_unspecified pool);
1734extern id _Nullable objc_retain(
id _Nullable
object);
1735extern id _Nullable objc_retainBlock(
id _Nullable block);
1736extern id _Nullable objc_retainAutorelease(
id _Nullable
object);
1737extern void objc_release(
id _Nullable
object);
1738extern id _Nullable objc_autorelease(
id _Nullable
object);
1739extern id _Nullable objc_autoreleaseReturnValue(
id _Nullable
object);
1740extern id _Nullable objc_retainAutoreleaseReturnValue(
id _Nullable
object);
1741extern id _Nullable objc_retainAutoreleasedReturnValue(
id _Nullable
object);
1742extern id _Nullable objc_storeStrong(
id _Nullable *_Nonnull
object,
1743 id _Nullable value);
1744extern id _Nullable objc_storeWeak(
id _Nullable *_Nonnull
object,
1745 id _Nullable value);
1746extern id _Nullable objc_loadWeakRetained(
id _Nullable *_Nonnull
object);
1747extern _Nullable
id objc_initWeak(
id _Nullable *_Nonnull
object,
1748 id _Nullable value);
1749extern void objc_destroyWeak(
id _Nullable *_Nonnull
object);
1750extern id _Nullable objc_loadWeak(
id _Nullable *_Nonnull
object);
1751extern void objc_copyWeak(
id _Nullable *_Nonnull dest,
1752 id _Nullable *_Nonnull src);
1753extern void objc_moveWeak(
id _Nullable *_Nonnull dest,
1754 id _Nullable *_Nonnull src);
1755# ifdef OF_DECLARE_CONSTRUCT_INSTANCE
1756extern id _Nullable objc_constructInstance(Class _Nullable class_,
1757 void *_Nullable bytes);
1758extern void *_Nullable objc_destructInstance(
id _Nullable
object);
1760# ifdef OF_DECLARE_SET_ASSOCIATED_OBJECT
1768extern void objc_setAssociatedObject(
id _Nonnull
object,
1769 const void *_Nonnull key,
id _Nullable value,
1771extern id _Nullable objc_getAssociatedObject(
id _Nonnull
object,
1772 const void *_Nonnull key);
1773extern void objc_removeAssociatedObjects(
id _Nonnull
object);
1789extern id OFAllocObject(Class class_,
size_t extraSize,
size_t extraAlignment,
1790 void *_Nullable *_Nullable extra);
1821extern void OFHashInit(
unsigned long *_Nonnull hash);
1847OF_ASSUME_NONNULL_END
1850#import "OFObject+KeyValueCoding.h"
static OF_INLINE OFRect OF_CONST_FUNC OFMakeRect(float x, float y, float width, float height)
Creates a new OFRect.
Definition OFObject.h:360
void * OFResizeMemory(void *pointer, size_t count, size_t size)
Resizes memory to the specified number of items of the specified size.
Definition OFObject.m:138
static OF_INLINE void OFHashFinalize(unsigned long *hash)
Finalizes the specified hash.
Definition OFObject.h:714
static OF_INLINE void OFHashAddByte(unsigned long *hash, unsigned char byte)
Adds the specified byte to the hash.
Definition OFObject.h:682
static OF_INLINE OFVector4D OFMultiplyVector4D(OFVector4D vector, float scalar)
Multiplies the specified vector with a scalar.
Definition OFObject.h:640
static OF_INLINE OFVector4D OFAddVectors4D(OFVector4D vector1, OFVector4D vector2)
Adds the two specified vectors.
Definition OFObject.h:612
OFComparisonResult
A result of a comparison.
Definition OFObject.h:64
@ OFOrderedAscending
Definition OFObject.h:66
@ OFOrderedDescending
Definition OFObject.h:70
@ OFOrderedSame
Definition OFObject.h:68
static OF_INLINE OFRange OFUnionRange(OFRange range1, OFRange range2)
Returns the union of the two ranges if they are overlapping or adjacent, otherwise returns a range wi...
Definition OFObject.h:224
void OFHashInit(unsigned long *hash)
Initializes the specified hash.
Definition OFObject.m:276
static OF_INLINE size_t OFEndOfRange(OFRange range)
Returns the end of the range, which is its location + its length.
Definition OFObject.h:164
static OF_INLINE OFVector3D OFAddVectors3D(OFVector3D vector1, OFVector3D vector2)
Adds the two specified vectors.
Definition OFObject.h:483
static OF_INLINE bool OFEqualVectors4D(OFVector4D vector1, OFVector4D vector2)
Returns whether the two vectors are equal.
Definition OFObject.h:587
OFComparisonResult(^ OFComparator)(id left, id right)
A comparator to compare two objects.
Definition OFObject.h:92
static OF_INLINE float OFDotProductOfVectors4D(OFVector4D vector1, OFVector4D vector2)
Calculates the dot product of the two specified vectors.
Definition OFObject.h:654
static OF_INLINE bool OFEqualRanges(OFRange range1, OFRange range2)
Returns whether the two ranges are equal.
Definition OFObject.h:146
void * OFAllocZeroedMemory(size_t count, size_t size) OF_MALLOC_FUNC
Allocates memory for the specified number of items of the specified size and initializes it with zero...
Definition OFObject.m:119
static OF_INLINE void OFHashAddHash(unsigned long *hash, unsigned long otherHash)
Adds the specified hash to the hash.
Definition OFObject.h:700
static OF_INLINE bool OFEqualSizes(OFSize size1, OFSize size2)
Returns whether the two sizes are equal.
Definition OFObject.h:327
static OF_INLINE OFSize OF_CONST_FUNC OFMakeSize(float width, float height)
Creates a new OFSize.
Definition OFObject.h:312
uint32_t OFRandom32(void)
Returns 32 bit or non-cryptographical randomness.
Definition OFObject.m:220
void OFFreeMemory(void *pointer)
Frees memory allocated by OFAllocMemory, OFAllocZeroedMemory or OFResizeMemory.
Definition OFObject.m:156
double OFTimeInterval
A time interval in seconds.
Definition OFObject.h:244
static OF_INLINE OFRect OFIntersectionRect(OFRect rect1, OFRect rect2)
Returns the intersection of the two rectangles or a rectangle with x, y, width and height set to 0 if...
Definition OFObject.h:398
static OF_INLINE OFVector3D OFMultiplyVector3D(OFVector3D vector, float scalar)
Multiplies the specified vector with a scalar.
Definition OFObject.h:511
static OF_INLINE OFVector4D OFSubtractVectors4D(OFVector4D vector1, OFVector4D vector2)
Subtracts the second vector from the first vector.
Definition OFObject.h:626
static OF_INLINE float OFDotProductOfVectors3D(OFVector3D vector1, OFVector3D vector2)
Calculates the dot product of the two specified vectors.
Definition OFObject.h:525
static OF_INLINE bool OFLocationInRange(size_t location, OFRange range)
Returns whether the specified location is in the specified range.
Definition OFObject.h:182
static OF_INLINE float OFDistanceOfVectors4D(OFVector4D vector1, OFVector4D vector2)
Calculates the distance between two vectors.
Definition OFObject.h:668
uint64_t OFRandom64(void)
Returns 64 bit or non-cryptographical randomness.
Definition OFObject.m:246
static const size_t OFNotFound
A special not found index.
Definition OFObject.h:59
OFByteOrder
An enum for representing endianness.
Definition OFObject.h:98
@ OFByteOrderBigEndian
Definition OFObject.h:100
@ OFByteOrderLittleEndian
Definition OFObject.h:102
@ OFByteOrderNative
Definition OFObject.h:107
static OF_INLINE bool OFEqualVectors3D(OFVector3D vector1, OFVector3D vector2)
Returns whether the two vectors are equal.
Definition OFObject.h:461
static OF_INLINE OFRange OFIntersectionRange(OFRange range1, OFRange range2)
Returns the intersection of the two ranges or OFNotFound and length 0 if they don't intersect.
Definition OFObject.h:197
static OF_INLINE OFVector3D OFSubtractVectors3D(OFVector3D vector1, OFVector3D vector2)
Subtracts the second vector from the first vector.
Definition OFObject.h:497
id OFAllocObject(Class class_, size_t extraSize, size_t extraAlignment, void **extra)
Allocates a new object.
Definition OFObject.m:432
uint16_t OFRandom16(void)
Returns 16 bit or non-cryptographical randomness.
Definition OFObject.m:190
static OF_INLINE bool OFEqualPoints(OFPoint point1, OFPoint point2)
Returns whether the two points are equal.
Definition OFObject.h:281
static OF_INLINE bool OFEqualRects(OFRect rect1, OFRect rect2)
Returns whether the two rectangles are equal.
Definition OFObject.h:378
static OF_INLINE float OFDistanceOfVectors3D(OFVector3D vector1, OFVector3D vector2)
Calculates the distance between two vectors.
Definition OFObject.h:539
void * OFAllocMemory(size_t count, size_t size) OF_MALLOC_FUNC
Allocates memory for the specified number of items of the specified size.
Definition OFObject.m:101
OFComparisonResult(* OFCompareFunction)(id left, id right, void *context)
A function to compare two objects.
Definition OFObject.h:81
static OF_INLINE OFVector4D OF_CONST_FUNC OFMakeVector4D(float x, float y, float z, float w)
Creates a new OFVector4D.
Definition OFObject.h:572
void OFMethodNotFound(id self, SEL _cmd)
This function is called when a method is not found.
Definition OFObject.m:412
static OF_INLINE OFPoint OF_CONST_FUNC OFMakePoint(float x, float y)
Creates a new OFPoint.
Definition OFObject.h:266
static OF_INLINE OFRange OF_CONST_FUNC OFMakeRange(size_t start, size_t length)
Creates a new OFRange.
Definition OFObject.h:131
static OF_INLINE OFVector3D OF_CONST_FUNC OFMakeVector3D(float x, float y, float z)
Creates a new OFVector3D.
Definition OFObject.h:446
id(* IMP)(id object, SEL selector,...)
A method implementation.
Definition ObjFWRT.h:146
objc_associationPolicy
A policy for object association, see objc_setAssociatedObject.
Definition ObjFWRT.h:183
@ OBJC_ASSOCIATION_RETAIN_NONATOMIC
Associate the object like a retained, nonatomic property.
Definition ObjFWRT.h:187
@ OBJC_ASSOCIATION_COPY
Associate the object like a copied property.
Definition ObjFWRT.h:193
@ OBJC_ASSOCIATION_RETAIN
Associate the object like a retained property.
Definition ObjFWRT.h:189
@ OBJC_ASSOCIATION_ASSIGN
Associate the object like an assigned property.
Definition ObjFWRT.h:185
@ OBJC_ASSOCIATION_COPY_NONATOMIC
Associate the object like a copied, nonatomic property.
Definition ObjFWRT.h:191
A class for parsing type encodings and accessing them.
Definition OFMethodSignature.h:33
The root class for all other classes inside ObjFW.
Definition OFObject.h:956
OFString * description
A description for the object.
Definition OFObject.m:1206
OFString * className
The name of the object's class.
Definition OFObject.m:686
instancetype init()
Initializes an already allocated object.
Definition OFObject.m:671
void dealloc()
Deallocates the object.
Definition OFObject.m:1321
id copy()
Returns the class.
Definition OFObject.m:1326
void unload()
A method which is called when the class is unloaded from the runtime.
Definition OFObject.m:507
instancetype alloc()
Allocates memory for an instance of the class and sets up the memory pool for the object.
Definition OFObject.m:515
void initialize()
A method which is called the moment before the first call to the class is being made.
Definition OFObject.m:511
void load()
A method which is called once when the class is loaded into the runtime.
Definition OFObject.m:472
A class for handling strings.
Definition OFString.h:143
A class which provides portable threads.
Definition OFThread.h:66
id copy()
Copies the object.
id mutableCopy()
Creates a mutable copy of the object.
bool allowsWeakReference()
Returns whether the object allows a weak reference.
instancetype autorelease()
Adds the object to the topmost autorelease pool of the thread's autorelease pool stack.
bool isProxy()
Returns whether the object is a proxy object.
Class class()
Returns the class of the object.
unsigned int retainCount()
Returns the retain count.
unsigned long hash()
Returns a hash for the object.
nullable Class superclass()
Returns the superclass of the object.
instancetype self()
Returns the receiver.
void release()
Decreases the retain count.
instancetype retain()
Increases the retain count.
bool retainWeakReference()
Retain a weak reference to this object.
A point in 2D space.
Definition OFObject.h:251
float y
Definition OFObject.h:255
float x
Definition OFObject.h:253
A range.
Definition OFObject.h:116
size_t length
Definition OFObject.h:120
size_t location
Definition OFObject.h:118
A rectangle.
Definition OFObject.h:343
OFPoint origin
Definition OFObject.h:345
OFSize size
Definition OFObject.h:347
A size.
Definition OFObject.h:297
float width
Definition OFObject.h:299
float height
Definition OFObject.h:301
A vector in 3D space.
Definition OFObject.h:428
float x
Definition OFObject.h:430
float y
Definition OFObject.h:432
float z
Definition OFObject.h:434
A vector in 4D space.
Definition OFObject.h:551
float x
Definition OFObject.h:553
float z
Definition OFObject.h:557
float y
Definition OFObject.h:555
float w
Definition OFObject.h:559