Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/include/adt/generic_field.h

    r5fe7692 r442ebbe  
    4646#define GENERIC_FIELD_MAGIC_VALUE               0x55667788
    4747
    48 /** Generic destructor function pointer. */
    49 #define DTOR_T(identifier) \
    50         void (*identifier)(const void *)
    51 
    5248/** Generic type field declaration.
    5349 *
     
    6763        int name##_add(name##_t *, type *); \
    6864        int name##_count(name##_t *); \
    69         void name##_destroy(name##_t *, DTOR_T()); \
    70         void name##_exclude_index(name##_t *, int, DTOR_T()); \
     65        void name##_destroy(name##_t *); \
     66        void name##_exclude_index(name##_t *, int); \
    7167        type **name##_get_field(name##_t *); \
    7268        type *name##_get_index(name##_t *, int); \
     
    107103        } \
    108104        \
    109         void name##_destroy(name##_t *field, DTOR_T(dtor)) \
     105        void name##_destroy(name##_t *field) \
    110106        { \
    111107                if (name##_is_valid(field)) { \
    112108                        int index; \
    113109                        field->magic = 0; \
    114                         if (dtor) { \
    115                                 for (index = 0; index < field->next; index++) { \
    116                                         if (field->items[index]) \
    117                                                 dtor(field->items[index]); \
    118                                 } \
     110                        for (index = 0; index < field->next; index++) { \
     111                                if (field->items[index]) \
     112                                        free(field->items[index]); \
    119113                        } \
    120114                        free(field->items); \
     
    122116        } \
    123117         \
    124         void name##_exclude_index(name##_t *field, int index, DTOR_T(dtor)) \
     118        void name##_exclude_index(name##_t *field, int index) \
    125119        { \
    126120                if (name##_is_valid(field) && (index >= 0) && \
    127121                    (index < field->next) && (field->items[index])) { \
    128                         if (dtor) \
    129                                 dtor(field->items[index]); \
     122                        free(field->items[index]); \
    130123                        field->items[index] = NULL; \
    131124                } \
Note: See TracChangeset for help on using the changeset viewer.