Subversion Repositories HelenOS

Rev

Rev 3666 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3666 Rev 3846
Line 29... Line 29...
29
/** @addtogroup net
29
/** @addtogroup net
30
 * @{
30
 * @{
31
 */
31
 */
32
 
32
 
33
/** @file
33
/** @file
-
 
34
 *  A character string to integer map header file.
34
 */
35
 */
35
 
36
 
36
#ifndef __CHAR_MAP_H__
37
#ifndef __CHAR_MAP_H__
37
#define __CHAR_MAP_H__
38
#define __CHAR_MAP_H__
38
 
39
 
-
 
40
/** An invalid assigned value used also if an entry does not exist.
-
 
41
 */
39
#define CHAR_MAP_NULL   ( -1 )
42
#define CHAR_MAP_NULL   ( -1 )
40
 
43
 
-
 
44
/** A type definition of a character string to integer map.
-
 
45
 *  @see char_map
-
 
46
 */
41
typedef struct char_map char_map_t;
47
typedef struct char_map char_map_t;
-
 
48
 
-
 
49
/** A type definition of a character string to integer map pointer.
-
 
50
 *  @see char_map
-
 
51
 */
42
typedef char_map_t *    char_map_ref;
52
typedef char_map_t *    char_map_ref;
43
 
53
 
-
 
54
/** A character string to integer map item.
-
 
55
 *  This structure recursivelly contains itself as a character by character tree.
-
 
56
 *  The actually mapped character string consists o fall the parent characters and the actual one.
-
 
57
 */
44
struct  char_map{
58
struct  char_map{
-
 
59
 
-
 
60
    /** An actually mapped character.
-
 
61
     */
45
    char        c;
62
    char            c;
-
 
63
 
-
 
64
    /** A stored integral value.
-
 
65
     */
46
    int     value;
66
    int             value;
-
 
67
 
-
 
68
    /** A next character array size.
-
 
69
     */
47
    int     size;
70
    int             size;
-
 
71
 
-
 
72
    /** The first free position in the next character array.
-
 
73
     */
48
    int     next;
74
    int             next;
-
 
75
 
-
 
76
    /** The next character array.
-
 
77
     */
49
    char_map_ref *  items;
78
    char_map_ref *  items;
-
 
79
 
-
 
80
    /** The consistency check magic value.
-
 
81
     */
50
    int     magic;
82
    int             magic;
51
};
83
};
52
 
84
 
-
 
85
/** Adds the value with the key to the map.
-
 
86
 *  @param map The character string to integer map. Input/output parameter.
-
 
87
 *  @param identifier The key zero ('\0') terminated character string. The key character string is processed until the first terminating zero ('\0') character after the given length is found. Input parameter.
-
 
88
 *  @param length The key character string length. The parameter may be zero (0) which means that the string is processed until the terminating zero ('\0') character is found. Input parameter.
-
 
89
 *  @param value The integral value to be stored for the key character string. Input parameter.
-
 
90
 *  @returns EOK on success.
-
 
91
 *  @returns EINVAL if the map is not valid.
-
 
92
 *  @returns EINVAL if the identifier parameter is NULL.
-
 
93
 *  @returns EINVAL if the length parameter zero (0) and the identifier parameter is an empty character string (the first character is the terminating zero ('\0) character.
-
 
94
 *  @returns EEXIST if the key character string is already used.
-
 
95
 *  @returns Other error codes as defined for the char_map_add_item() function.
-
 
96
 */
53
int char_map_add( char_map_ref map, const char * identifier, const int value );
97
int char_map_add( char_map_ref map, const char * identifier, size_t length, const int value );
-
 
98
 
-
 
99
/** Clears and destroys the map.
-
 
100
 *  @param map The character string to integer map. Input/output parameter.
-
 
101
 */
54
void    char_map_destroy( char_map_ref map );
102
void    char_map_destroy( char_map_ref map );
-
 
103
 
-
 
104
/** Excludes the value assigned to the key from the map.
-
 
105
 *  The entry is cleared from the map.
-
 
106
 *  @param map The character string to integer map. Input/output parameter.
-
 
107
 *  @param identifier The key zero ('\0') terminated character string. The key character string is processed until the first terminating zero ('\0') character after the given length is found. Input parameter.
-
 
108
 *  @param length The key character string length. The parameter may be zero (0) which means that the string is processed until the terminating zero ('\0') character is found. Input parameter.
-
 
109
 *  @returns The integral value assigned to the key character string.
-
 
110
 *  @returns CHAR_MAP_NULL if the key is not assigned a value.
-
 
111
 */
55
int char_map_exclude( char_map_ref map, const char * identifier );
112
int char_map_exclude( char_map_ref map, const char * identifier, size_t length );
-
 
113
 
-
 
114
/** Returns the value assigned to the key from the map.
-
 
115
 *  @param map The character string to integer map. Input parameter.
-
 
116
 *  @param identifier The key zero ('\0') terminated character string. The key character string is processed until the first terminating zero ('\0') character after the given length is found. Input parameter.
-
 
117
 *  @param length The key character string length. The parameter may be zero (0) which means that the string is processed until the terminating zero ('\0') character is found. Input parameter.
-
 
118
 *  @returns The integral value assigned to the key character string.
-
 
119
 *  @returns CHAR_MAP_NULL if the key is not assigned a value.
-
 
120
 */
56
int char_map_find( char_map_ref map, const char * identifier );
121
int char_map_find( const char_map_ref map, const char * identifier, size_t length );
-
 
122
 
-
 
123
/** Returns the value assigned to the map.
-
 
124
 *  @param map The character string to integer map. Input parameter.
-
 
125
 *  @returns The integral value assigned to the map.
-
 
126
 *  @returns CHAR_MAP_NULL if the map is not assigned a value.
-
 
127
 */
57
int char_map_get_value( char_map_ref map );
128
int char_map_get_value( const char_map_ref map );
-
 
129
 
-
 
130
/** Initializes the map.
-
 
131
 *  @param map The character string to integer map. Input/output parameter.
-
 
132
 *  @returns EOK on success.
-
 
133
 *  @returns EINVAL if the map parameter is NULL.
-
 
134
 *  @returns ENOMEM if there is no memory left.
-
 
135
 */
58
int char_map_initialize( char_map_ref map );
136
int char_map_initialize( char_map_ref map );
-
 
137
 
-
 
138
/** Adds or updates the value with the key to the map.
-
 
139
 *  @param map The character string to integer map. Input/output parameter.
-
 
140
 *  @param identifier The key zero ('\0') terminated character string. The key character string is processed until the first terminating zero ('\0') character after the given length is found. Input parameter.
-
 
141
 *  @param length The key character string length. The parameter may be zero (0) which means that the string is processed until the terminating zero ('\0') character is found. Input parameter.
-
 
142
 *  @param value The integral value to be stored for the key character string. Input parameter.
-
 
143
 *  @returns EOK on success.
-
 
144
 *  @returns EINVAL if the map is not valid.
-
 
145
 *  @returns EINVAL if the identifier parameter is NULL.
-
 
146
 *  @returns EINVAL if the length parameter zero (0) and the identifier parameter is an empty character string (the first character is the terminating zero ('\0) character.
-
 
147
 *  @returns EEXIST if the key character string is already used.
-
 
148
 *  @returns Other error codes as defined for the char_map_add_item() function.
-
 
149
 */
59
int char_map_update( char_map_ref map, const char * identifier, const int value );
150
int char_map_update( char_map_ref map, const char * identifier, size_t length, const int value );
60
 
151
 
61
#endif
152
#endif
62
 
153
 
63
/** @}
154
/** @}
64
 */
155
 */