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
47 # include <winsock2.h>
52 OF_ASSUME_NONNULL_BEGIN
82 id _Nonnull right,
void *_Nullable context);
130 static OF_INLINE
OFRange OF_CONST_FUNC
133 OFRange range = { start, length };
145 static OF_INLINE
bool
160 extern void OF_NO_RETURN_FUNC _OFThrowOutOfRangeException(
void);
171 static OF_INLINE
size_t
175 _OFThrowOutOfRangeException();
187 static OF_INLINE
bool
190 return (location >= range.
location &&
271 static OF_INLINE
OFPoint OF_CONST_FUNC
286 static OF_INLINE
bool
289 if (point1.
x != point2.
x)
292 if (point1.
y != point2.
y)
317 static OF_INLINE
OFSize OF_CONST_FUNC
320 OFSize size = { width, height };
332 static OF_INLINE
bool
365 static OF_INLINE
OFRect OF_CONST_FUNC
383 static OF_INLINE
bool
466 static OF_INLINE
bool
469 if (vector1.
x != vector2.
x)
472 if (vector1.
y != vector2.
y)
475 if (vector1.
z != vector2.
z)
492 vector1.
z + vector2.
z);
506 vector1.
z - vector2.
z);
530 static OF_INLINE
float
533 return vector1.
x * vector2.
x + vector1.
y * vector2.
y +
534 vector1.
z * vector2.
z;
544 static OF_INLINE
float
592 static OF_INLINE
bool
595 if (vector1.
x != vector2.
x)
598 if (vector1.
y != vector2.
y)
601 if (vector1.
z != vector2.
z)
604 if (vector1.
w != vector2.
w)
621 vector1.
z + vector2.
z, vector1.
w + vector2.
w);
635 vector1.
z - vector2.
z, vector1.
w - vector2.
w);
649 vector.
z * scalar, vector.
w * scalar);
659 static OF_INLINE
float
662 return vector1.
x * vector2.
x + vector1.
y * vector2.
y +
663 vector1.
z * vector2.
z + vector1.
w * vector2.
w;
673 static OF_INLINE
float
687 static OF_INLINE
void
690 uint32_t tmp = (uint32_t)*hash;
705 static OF_INLINE
void
719 static OF_INLINE
void
722 uint32_t tmp = (uint32_t)*hash;
753 - (nullable Class)superclass;
767 - (
unsigned long)hash;
774 - (
unsigned int)retainCount;
789 - (bool)isKindOfClass: (Class)class_;
798 - (bool)isMemberOfClass: (Class)class_;
807 - (bool)respondsToSelector: (
SEL)selector;
815 - (bool)conformsToProtocol: (
Protocol *)protocol;
823 - (nullable
IMP)methodForSelector: (
SEL)selector;
831 - (nullable id)performSelector: (
SEL)selector;
841 - (nullable id)performSelector: (
SEL)selector withObject: (nullable
id)object;
853 - (nullable id)performSelector: (
SEL)selector
854 withObject: (nullable
id)object1
855 withObject: (nullable
id)object2;
869 - (nullable id)performSelector: (
SEL)selector
870 withObject: (nullable
id)object1
871 withObject: (nullable
id)object2
872 withObject: (nullable
id)object3;
888 - (nullable id)performSelector: (
SEL)selector
889 withObject: (nullable
id)object1
890 withObject: (nullable
id)object2
891 withObject: (nullable
id)object3
892 withObject: (nullable
id)object4;
906 - (bool)isEqual: (nullable
id)object;
937 - (instancetype)
self;
944 - (bool)allowsWeakReference;
963 #ifndef __clang_analyzer__
966 Class _isa __attribute__((__unused__));
970 #ifdef OF_HAVE_CLASS_PROPERTIES
972 @property (
class, readonly, nonatomic) Class
class;
974 @property (
class, readonly, nonatomic, getter=
class) Class class_;
977 @property (
class, readonly, nullable, nonatomic) Class superclass;
982 @property (readonly, nonatomic) Class
class;
984 @property (readonly, nonatomic, getter=
class) Class class_;
986 @property OF_NULLABLE_PROPERTY (readonly, nonatomic) Class superclass;
987 @property (readonly, nonatomic)
unsigned long hash;
988 @property (readonly, nonatomic)
unsigned int retainCount;
989 @property (readonly, nonatomic)
bool isProxy;
990 @property (readonly, nonatomic)
bool allowsWeakReference;
1053 + (instancetype)
alloc;
1076 + (bool)isSubclassOfClass: (Class)class_;
1083 + (nullable Class)superclass;
1092 + (bool)instancesRespondToSelector: (
SEL)selector;
1100 + (bool)conformsToProtocol: (
Protocol *)protocol;
1110 + (nullable
IMP)instanceMethodForSelector: (
SEL)selector;
1122 instanceMethodSignatureForSelector: (
SEL)selector;
1140 + (nullable
IMP)replaceClassMethod: (
SEL)selector
1141 withMethodFromClass: (Class)class_;
1151 + (nullable
IMP)replaceInstanceMethod: (
SEL)selector
1152 withMethodFromClass: (Class)class_;
1172 + (void)inheritMethodsFromClass: (Class)class_;
1182 + (bool)resolveClassMethod: (
SEL)selector;
1192 + (bool)resolveInstanceMethod: (
SEL)selector;
1235 - (instancetype)
init;
1261 - (void)performSelector: (
SEL)selector afterDelay: (
OFTimeInterval)delay;
1272 - (void)performSelector: (
SEL)selector
1273 withObject: (nullable
id)object
1287 - (void)performSelector: (
SEL)selector
1288 withObject: (nullable
id)object1
1289 withObject: (nullable
id)object2
1305 - (void)performSelector: (
SEL)selector
1306 withObject: (nullable
id)object1
1307 withObject: (nullable
id)object2
1308 withObject: (nullable
id)object3
1326 - (void)performSelector: (
SEL)selector
1327 withObject: (nullable
id)object1
1328 withObject: (nullable
id)object2
1329 withObject: (nullable
id)object3
1330 withObject: (nullable
id)object4
1333 #ifdef OF_HAVE_THREADS
1341 - (void)performSelector: (
SEL)selector
1343 waitUntilDone: (
bool)waitUntilDone;
1355 - (void)performSelector: (
SEL)selector
1357 withObject: (nullable
id)object
1358 waitUntilDone: (
bool)waitUntilDone;
1372 - (void)performSelector: (
SEL)selector
1374 withObject: (nullable
id)object1
1375 withObject: (nullable
id)object2
1376 waitUntilDone: (
bool)waitUntilDone;
1392 - (void)performSelector: (
SEL)selector
1394 withObject: (nullable
id)object1
1395 withObject: (nullable
id)object2
1396 withObject: (nullable
id)object3
1397 waitUntilDone: (
bool)waitUntilDone;
1415 - (void)performSelector: (
SEL)selector
1417 withObject: (nullable
id)object1
1418 withObject: (nullable
id)object2
1419 withObject: (nullable
id)object3
1420 withObject: (nullable
id)object4
1421 waitUntilDone: (
bool)waitUntilDone;
1429 - (void)performSelectorOnMainThread: (
SEL)selector
1430 waitUntilDone: (
bool)waitUntilDone;
1441 - (void)performSelectorOnMainThread: (
SEL)selector
1442 withObject: (nullable
id)object
1443 waitUntilDone: (
bool)waitUntilDone;
1456 - (void)performSelectorOnMainThread: (
SEL)selector
1457 withObject: (nullable
id)object1
1458 withObject: (nullable
id)object2
1459 waitUntilDone: (
bool)waitUntilDone;
1474 - (void)performSelectorOnMainThread: (
SEL)selector
1475 withObject: (nullable
id)object1
1476 withObject: (nullable
id)object2
1477 withObject: (nullable
id)object3
1478 waitUntilDone: (
bool)waitUntilDone;
1495 - (void)performSelectorOnMainThread: (
SEL)selector
1496 withObject: (nullable
id)object1
1497 withObject: (nullable
id)object2
1498 withObject: (nullable
id)object3
1499 withObject: (nullable
id)object4
1500 waitUntilDone: (
bool)waitUntilDone;
1510 - (void)performSelector: (
SEL)selector
1524 - (void)performSelector: (
SEL)selector
1526 withObject: (nullable
id)object
1541 - (void)performSelector: (
SEL)selector
1543 withObject: (nullable
id)object1
1544 withObject: (nullable
id)object2
1561 - (void)performSelector: (
SEL)selector
1563 withObject: (nullable
id)object1
1564 withObject: (nullable
id)object2
1565 withObject: (nullable
id)object3
1584 - (void)performSelector: (
SEL)selector
1586 withObject: (nullable
id)object1
1587 withObject: (nullable
id)object2
1588 withObject: (nullable
id)object3
1589 withObject: (nullable
id)object4
1604 - (nullable id)forwardingTargetForSelector: (
SEL)selector;
1615 - (void)doesNotRecognizeSelector: (
SEL)selector OF_NO_RETURN;
1688 extern void *_Nullable
OFAllocMemory(
size_t count,
size_t size)
1689 OF_MALLOC_FUNC OF_WARN_UNUSED_RESULT;
1706 OF_MALLOC_FUNC OF_WARN_UNUSED_RESULT;
1725 extern void *_Nullable
OFResizeMemory(
void *_Nullable pointer,
size_t count,
1726 size_t size) OF_WARN_UNUSED_RESULT;
1737 #ifdef OF_APPLE_RUNTIME
1740 extern id _Nullable objc_retain(
id _Nullable
object);
1741 extern id _Nullable objc_retainBlock(
id _Nullable block);
1742 extern id _Nullable objc_retainAutorelease(
id _Nullable
object);
1743 extern void objc_release(
id _Nullable
object);
1744 extern id _Nullable objc_autorelease(
id _Nullable
object);
1745 extern id _Nullable objc_autoreleaseReturnValue(
id _Nullable
object);
1746 extern id _Nullable objc_retainAutoreleaseReturnValue(
id _Nullable
object);
1747 extern id _Nullable objc_retainAutoreleasedReturnValue(
id _Nullable
object);
1748 extern id _Nullable objc_storeStrong(
id _Nullable *_Nonnull
object,
1749 id _Nullable value);
1750 extern id _Nullable objc_storeWeak(
id _Nullable *_Nonnull
object,
1751 id _Nullable value);
1752 extern id _Nullable objc_loadWeakRetained(
id _Nullable *_Nonnull
object);
1753 extern _Nullable
id objc_initWeak(
id _Nullable *_Nonnull
object,
1754 id _Nullable value);
1755 extern void objc_destroyWeak(
id _Nullable *_Nonnull
object);
1756 extern id _Nullable objc_loadWeak(
id _Nullable *_Nonnull
object);
1757 extern void objc_copyWeak(
id _Nullable *_Nonnull dest,
1758 id _Nullable *_Nonnull src);
1759 extern void objc_moveWeak(
id _Nullable *_Nonnull dest,
1760 id _Nullable *_Nonnull src);
1761 # ifdef OF_DECLARE_CONSTRUCT_INSTANCE
1763 void *_Nullable bytes);
1766 # ifdef OF_DECLARE_SET_ASSOCIATED_OBJECT
1775 const void *_Nonnull key,
id _Nullable value,
1778 const void *_Nonnull key);
1795 extern id OFAllocObject(Class class_,
size_t extraSize,
size_t extraAlignment,
1796 void *_Nullable *_Nullable extra);
1827 extern void OFHashInit(
unsigned long *_Nonnull hash);
1853 OF_ASSUME_NONNULL_END
1856 #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:366
static OF_INLINE void OFHashFinalize(unsigned long *hash)
Finalizes the specified hash.
Definition: OFObject.h:720
static OF_INLINE void OFHashAddByte(unsigned long *hash, unsigned char byte)
Adds the specified byte to the hash.
Definition: OFObject.h:688
static OF_INLINE OFVector4D OFMultiplyVector4D(OFVector4D vector, float scalar)
Multiplies the specified vector with a scalar.
Definition: OFObject.h:646
static OF_INLINE OFVector4D OFAddVectors4D(OFVector4D vector1, OFVector4D vector2)
Adds the two specified vectors.
Definition: OFObject.h:618
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:230
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:172
static OF_INLINE OFVector3D OFAddVectors3D(OFVector3D vector1, OFVector3D vector2)
Adds the two specified vectors.
Definition: OFObject.h:489
static OF_INLINE bool OFEqualVectors4D(OFVector4D vector1, OFVector4D vector2)
Returns whether the two vectors are equal.
Definition: OFObject.h:593
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:660
static OF_INLINE bool OFEqualRanges(OFRange range1, OFRange range2)
Returns whether the two ranges are equal.
Definition: OFObject.h:146
static OF_INLINE void OFHashAddHash(unsigned long *hash, unsigned long otherHash)
Adds the specified hash to the hash.
Definition: OFObject.h:706
static OF_INLINE bool OFEqualSizes(OFSize size1, OFSize size2)
Returns whether the two sizes are equal.
Definition: OFObject.h:333
static OF_INLINE OFSize OF_CONST_FUNC OFMakeSize(float width, float height)
Creates a new OFSize.
Definition: OFObject.h:318
uint32_t OFRandom32(void)
Returns 32 bit or non-cryptographical randomness.
Definition: OFObject.m:220
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
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
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:250
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:404
static OF_INLINE OFVector3D OFMultiplyVector3D(OFVector3D vector, float scalar)
Multiplies the specified vector with a scalar.
Definition: OFObject.h:517
static OF_INLINE OFVector4D OFSubtractVectors4D(OFVector4D vector1, OFVector4D vector2)
Subtracts the second vector from the first vector.
Definition: OFObject.h:632
static OF_INLINE float OFDotProductOfVectors3D(OFVector3D vector1, OFVector3D vector2)
Calculates the dot product of the two specified vectors.
Definition: OFObject.h:531
static OF_INLINE bool OFLocationInRange(size_t location, OFRange range)
Returns whether the specified location is in the specified range.
Definition: OFObject.h:188
static OF_INLINE float OFDistanceOfVectors4D(OFVector4D vector1, OFVector4D vector2)
Calculates the distance between two vectors.
Definition: OFObject.h:674
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:467
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:203
static OF_INLINE OFVector3D OFSubtractVectors3D(OFVector3D vector1, OFVector3D vector2)
Subtracts the second vector from the first vector.
Definition: OFObject.h:503
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:287
static OF_INLINE bool OFEqualRects(OFRect rect1, OFRect rect2)
Returns whether the two rectangles are equal.
Definition: OFObject.h:384
static OF_INLINE float OFDistanceOfVectors3D(OFVector3D vector1, OFVector3D vector2)
Calculates the distance between two vectors.
Definition: OFObject.h:545
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:578
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:272
static OF_INLINE OFRange OF_CONST_FUNC OFMakeRange(size_t start, size_t length)
Creates a new OFRange.
Definition: OFObject.h:131
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
static OF_INLINE OFVector3D OF_CONST_FUNC OFMakeVector3D(float x, float y, float z)
Creates a new OFVector3D.
Definition: OFObject.h:452
id(* IMP)(id object, SEL selector,...)
A method implementation.
Definition: ObjFWRT.h:146
void *_Null_unspecified objc_autoreleasePoolPush(void)
Creates a new autorelease pool and puts it on top of the stack of autorelease pools.
Definition: autorelease-foundation.m:37
void objc_removeAssociatedObjects(id object)
Removes all associated objects for the specified object.
Definition: association.m:251
void * objc_destructInstance(id object)
Destructs the specified object.
Definition: instance.m:131
id objc_constructInstance(Class class_, void *bytes)
Constructs an instance of the specified class in the specified array of bytes.
Definition: instance.m:115
void objc_setAssociatedObject(id object, const void *key, id value, objc_associationPolicy policy)
Sets an associated object on the specified object for the specified key.
Definition: association.m:131
id objc_getAssociatedObject(id object, const void *key)
Returns the associated object on the specified object for the specified key.
Definition: association.m:208
void objc_autoreleasePoolPop(void *_Null_unspecified pool)
Drains the specified autorelease pool and all pools on top of it and removes it from the stack of aut...
const struct objc_protocol * Protocol
A protocol.
Definition: ObjFWRT.h:117
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:962
OFString * description
A description for the object.
Definition: OFObject.h:1004
OFString * className
The name of the object's class.
Definition: OFObject.h:996
instancetype init()
Initializes an already allocated object.
Definition: OFObject.m:671
void dealloc()
Deallocates the object.
Definition: OFObject.m:1270
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
A protocol for comparing objects.
Definition: OFObject.h:1662
A protocol for the creation of copies.
Definition: OFObject.h:1624
id copy()
Copies the object.
A protocol for the creation of mutable copies.
Definition: OFObject.h:1645
id mutableCopy()
Creates a mutable copy of the object.
instancetype autorelease()
Adds the object to the topmost autorelease pool of the thread's autorelease pool stack.
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:257
float y
Definition: OFObject.h:261
float x
Definition: OFObject.h:259
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:349
OFPoint origin
Definition: OFObject.h:351
OFSize size
Definition: OFObject.h:353
A size.
Definition: OFObject.h:303
float width
Definition: OFObject.h:305
float height
Definition: OFObject.h:307
A vector in 3D space.
Definition: OFObject.h:434
float x
Definition: OFObject.h:436
float y
Definition: OFObject.h:438
float z
Definition: OFObject.h:440
A vector in 4D space.
Definition: OFObject.h:557
float x
Definition: OFObject.h:559
float z
Definition: OFObject.h:563
float y
Definition: OFObject.h:561
float w
Definition: OFObject.h:565