Ignore:
Timestamp:
2011-06-01T08:43:42Z (14 years ago)
Author:
Lubos Slovak <lubos.slovak@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
8d6c1f1
Parents:
9e2e715 (diff), e51a514 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Huuuuuge merge from development - all the work actually :)

File:
1 edited

Legend:

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

    r9e2e715 reb522e8  
    4747#define GENERIC_CHAR_MAP_MAGIC_VALUE    0x12345622
    4848
     49/** Generic destructor function pointer. */
     50#define DTOR_T(identifier) \
     51        void (*identifier)(const void *)
     52
    4953/** Character string to generic type map declaration.
    5054 *  @param[in] name     Name of the map.
     
    5559        \
    5660        typedef struct name name##_t; \
    57         typedef name##_t *name##_ref; \
    5861        \
    5962        struct  name { \
     
    6366        }; \
    6467        \
    65         int name##_add(name##_ref, const char *, const size_t, type *); \
    66         int name##_count(name##_ref); \
    67         void name##_destroy(name##_ref); \
    68         void name##_exclude(name##_ref, const char *, const size_t); \
    69         type *name##_find(name##_ref, const char *, const size_t); \
    70         int name##_initialize(name##_ref); \
    71         int name##_is_valid(name##_ref);
     68        int name##_add(name##_t *, const uint8_t *, const size_t, type *); \
     69        int name##_count(name##_t *); \
     70        void name##_destroy(name##_t *, DTOR_T()); \
     71        void name##_exclude(name##_t *, const uint8_t *, const size_t, DTOR_T()); \
     72        type *name##_find(name##_t *, const uint8_t *, const size_t); \
     73        int name##_initialize(name##_t *); \
     74        int name##_is_valid(name##_t *);
    7275
    7376/** Character string to generic type map implementation.
     
    7578 * Should follow declaration with the same parameters.
    7679 *
    77  * @param[in] name      Name of the map.
    78  * @param[in] type      Inner object type.
     80 * @param[in] name Name of the map.
     81 * @param[in] type Inner object type.
     82 *
    7983 */
    8084#define GENERIC_CHAR_MAP_IMPLEMENT(name, type) \
    8185        GENERIC_FIELD_IMPLEMENT(name##_items, type) \
    8286        \
    83         int name##_add(name##_ref map, const char *name, const size_t length, \
     87        int name##_add(name##_t *map, const uint8_t *name, const size_t length, \
    8488             type *value) \
    8589        { \
    86                 int rc; \
    8790                int index; \
    8891                if (!name##_is_valid(map)) \
     
    9194                if (index < 0) \
    9295                        return index; \
    93                 rc = char_map_add(&map->names, name, length, index); \
    94                 if (rc != EOK) { \
    95                         name##_items_exclude_index(&map->values, index); \
    96                         return rc; \
    97                 } \
    98                 return EOK; \
     96                return char_map_add(&map->names, name, length, index); \
    9997        } \
    10098        \
    101         int name##_count(name##_ref map) \
     99        int name##_count(name##_t *map) \
    102100        { \
    103101                return name##_is_valid(map) ? \
     
    105103        } \
    106104        \
    107         void name##_destroy(name##_ref map) \
     105        void name##_destroy(name##_t *map, DTOR_T(dtor)) \
    108106        { \
    109107                if (name##_is_valid(map)) { \
    110108                        char_map_destroy(&map->names); \
    111                         name##_items_destroy(&map->values); \
     109                        name##_items_destroy(&map->values, dtor); \
    112110                } \
    113111        } \
    114112        \
    115         void name##_exclude(name##_ref map, const char *name, \
    116             const size_t length) \
     113        void name##_exclude(name##_t *map, const uint8_t *name, \
     114            const size_t length, DTOR_T(dtor)) \
    117115        { \
    118116                if (name##_is_valid(map)) { \
     
    121119                        if (index != CHAR_MAP_NULL) \
    122120                                name##_items_exclude_index(&map->values, \
    123                                      index); \
     121                                     index, dtor); \
    124122                } \
    125123        } \
    126124        \
    127         type *name##_find(name##_ref map, const char *name, \
     125        type *name##_find(name##_t *map, const uint8_t *name, \
    128126            const size_t length) \
    129127        { \
     
    138136        } \
    139137        \
    140         int name##_initialize(name##_ref map) \
     138        int name##_initialize(name##_t *map) \
    141139        { \
    142140                int rc; \
     
    155153        } \
    156154        \
    157         int name##_is_valid(name##_ref map) \
     155        int name##_is_valid(name##_t *map) \
    158156        { \
    159157                return map && (map->magic == GENERIC_CHAR_MAP_MAGIC_VALUE); \
Note: See TracChangeset for help on using the changeset viewer.