@@ -33,11 +33,18 @@ * @class OFMutableArray OFArray.h ObjFW/OFArray.h * * @brief An abstract class for storing, adding and removing objects in an * array. */ +#ifdef OF_HAVE_GENERICS +@interface OFMutableArray : OFArray +#else +# ifndef DOXYGEN +# define ObjectType id +# endif @interface OFMutableArray: OFArray +#endif /*! * @brief Creates a new OFMutableArray with enough memory to hold the specified * number of objects. * * @param capacity The initial capacity for the OFMutableArray @@ -57,82 +64,82 @@ /*! * @brief Adds an object to the end of the array. * * @param object An object to add */ -- (void)addObject: (id)object; +- (void)addObject: (ObjectType)object; /*! * @brief Adds the objects from the specified OFArray to the end of the array. * * @param array An array of objects to add */ -- (void)addObjectsFromArray: (OFArray*)array; +- (void)addObjectsFromArray: (OFArray OF_GENERIC(ObjectType)*)array; /*! * @brief Inserts an object to the OFArray at the specified index. * * @param object An object to add * @param index The index where the object should be inserted */ -- (void)insertObject: (id)object +- (void)insertObject: (ObjectType)object atIndex: (size_t)index; /*! * @brief Inserts the objects from the specified OFArray at the specified index. * * @param array An array of objects * @param index The index where the objects should be inserted */ -- (void)insertObjectsFromArray: (OFArray*)array +- (void)insertObjectsFromArray: (OFArray OF_GENERIC(ObjectType)*)array atIndex: (size_t)index; /*! * @brief Replaces the first object equivalent to the specified object with the * other specified object. * * @param oldObject The object to replace * @param newObject The replacement object */ -- (void)replaceObject: (id)oldObject - withObject: (id)newObject; +- (void)replaceObject: (ObjectType)oldObject + withObject: (ObjectType)newObject; /*! * @brief Replaces the object at the specified index with the specified object. * * @param index The index of the object to replace * @param object The replacement object */ - (void)replaceObjectAtIndex: (size_t)index - withObject: (id)object; -- (void)setObject: (id)object + withObject: (ObjectType)object; +- (void)setObject: (ObjectType)object atIndexedSubscript: (size_t)index; /*! * @brief Replaces the first object that has the same address as the specified * object with the other specified object. * * @param oldObject The object to replace * @param newObject The replacement object */ -- (void)replaceObjectIdenticalTo: (id)oldObject - withObject: (id)newObject; +- (void)replaceObjectIdenticalTo: (ObjectType)oldObject + withObject: (ObjectType)newObject; /*! * @brief Removes the first object equivalent to the specified object. * * @param object The object to remove */ -- (void)removeObject: (id)object; +- (void)removeObject: (ObjectType)object; /*! * @brief Removes the first object that has the same address as the specified * object. * * @param object The object to remove */ -- (void)removeObjectIdenticalTo: (id)object; +- (void)removeObjectIdenticalTo: (ObjectType)object; /*! * @brief Removes the object at the specified index. * * @param index The index of the object to remove @@ -198,5 +205,8 @@ /*! * @brief Converts the mutable array to an immutable array. */ - (void)makeImmutable; @end +#if !defined(OF_HAVE_GENERICS) && !defined(DOXYGEN) +# undef ObjectType +#endif