Subversion Repositories HelenOS

Rev

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

Rev 3886 Rev 3912
Line 1... Line 1...
1
/*
1
/*
2
 * Copyright (c) 2008 Lukas Mejdrech
2
 * Copyright (c) 2009 Lukas Mejdrech
3
 * All rights reserved.
3
 * All rights reserved.
4
 *
4
 *
5
 * Redistribution and use in source and binary forms, with or without
5
 * Redistribution and use in source and binary forms, with or without
6
 * modification, are permitted provided that the following conditions
6
 * modification, are permitted provided that the following conditions
7
 * are met:
7
 * are met:
Line 25... Line 25...
25
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
 */
27
 */
28
 
28
 
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
 *  Character string to integer map.
35
 */
35
 */
36
 
36
 
37
#ifndef __CHAR_MAP_H__
37
#ifndef __CHAR_MAP_H__
38
#define __CHAR_MAP_H__
38
#define __CHAR_MAP_H__
39
 
39
 
40
/** An invalid assigned value used also if an entry does not exist.
40
/** Invalid assigned value used also if an entry does not exist.
41
 */
41
 */
42
#define CHAR_MAP_NULL   ( -1 )
42
#define CHAR_MAP_NULL   ( -1 )
43
 
43
 
44
/** A type definition of a character string to integer map.
44
/** Type definition of the character string to integer map.
45
 *  @see char_map
45
 *  @see char_map
46
 */
46
 */
47
typedef struct char_map char_map_t;
47
typedef struct char_map char_map_t;
48
 
48
 
49
/** A type definition of a character string to integer map pointer.
49
/** Type definition of the character string to integer map pointer.
50
 *  @see char_map
50
 *  @see char_map
51
 */
51
 */
52
typedef char_map_t *    char_map_ref;
52
typedef char_map_t *    char_map_ref;
53
 
53
 
54
/** A character string to integer map item.
54
/** Character string to integer map item.
55
 *  This structure recursivelly contains itself as a character by character tree.
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.
56
 *  The actually mapped character string consists o fall the parent characters and the actual one.
57
 */
57
 */
58
struct  char_map{
58
struct  char_map{
59
 
-
 
60
    /** An actually mapped character.
59
    /** Actually mapped character.
61
     */
60
     */
62
    char            c;
61
    char            c;
63
 
-
 
64
    /** A stored integral value.
62
    /** Stored integral value.
65
     */
63
     */
66
    int             value;
64
    int             value;
67
 
-
 
68
    /** A next character array size.
65
    /** Next character array size.
69
     */
66
     */
70
    int             size;
67
    int             size;
71
 
-
 
72
    /** The first free position in the next character array.
68
    /** First free position in the next character array.
73
     */
69
     */
74
    int             next;
70
    int             next;
75
 
-
 
76
    /** The next character array.
71
    /** Next character array.
77
     */
72
     */
78
    char_map_ref *  items;
73
    char_map_ref *  items;
79
 
-
 
80
    /** The consistency check magic value.
74
    /** Consistency check magic value.
81
     */
75
     */
82
    int             magic;
76
    int             magic;
83
};
77
};
84
 
78
 
85
/** Adds the value with the key to the map.
79
/** Adds the value with the key to the map.
86
 *  @param map The character string to integer map. Input/output parameter.
80
 *  @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.
81
 *  @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.
82
 *  @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.
83
 *  @param value The integral value to be stored for the key character string. Input parameter.
90
 *  @returns EOK on success.
84
 *  @returns EOK on success.
91
 *  @returns EINVAL if the map is not valid.
85
 *  @returns EINVAL if the map is not valid.
92
 *  @returns EINVAL if the identifier parameter is NULL.
86
 *  @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.
87
 *  @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.
88
 *  @returns EEXIST if the key character string is already used.
95
 *  @returns Other error codes as defined for the char_map_add_item() function.
89
 *  @returns Other error codes as defined for the char_map_add_item() function.
96
 */
90
 */
97
int char_map_add( char_map_ref map, const char * identifier, size_t length, const int value );
91
int char_map_add( char_map_ref map, const char * identifier, size_t length, const int value );
98
 
92
 
Line 102... Line 96...
102
void    char_map_destroy( char_map_ref map );
96
void    char_map_destroy( char_map_ref map );
103
 
97
 
104
/** Excludes the value assigned to the key from the map.
98
/** Excludes the value assigned to the key from the map.
105
 *  The entry is cleared from the map.
99
 *  The entry is cleared from the map.
106
 *  @param map The character string to integer map. Input/output parameter.
100
 *  @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.
101
 *  @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.
102
 *  @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.
103
 *  @returns The integral value assigned to the key character string.
110
 *  @returns CHAR_MAP_NULL if the key is not assigned a value.
104
 *  @returns CHAR_MAP_NULL if the key is not assigned a value.
111
 */
105
 */
112
int char_map_exclude( char_map_ref map, const char * identifier, size_t length );
106
int char_map_exclude( char_map_ref map, const char * identifier, size_t length );
113
 
107
 
114
/** Returns the value assigned to the key from the map.
108
/** Returns the value assigned to the key from the map.
115
 *  @param map The character string to integer map. Input parameter.
109
 *  @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.
110
 *  @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.
111
 *  @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.
112
 *  @returns The integral value assigned to the key character string.
119
 *  @returns CHAR_MAP_NULL if the key is not assigned a value.
113
 *  @returns CHAR_MAP_NULL if the key is not assigned a value.
120
 */
114
 */
121
int char_map_find( const char_map_ref map, const char * identifier, size_t length );
115
int char_map_find( const char_map_ref map, const char * identifier, size_t length );
122
 
116
 
Line 129... Line 123...
129
 
123
 
130
/** Initializes the map.
124
/** Initializes the map.
131
 *  @param map The character string to integer map. Input/output parameter.
125
 *  @param map The character string to integer map. Input/output parameter.
132
 *  @returns EOK on success.
126
 *  @returns EOK on success.
133
 *  @returns EINVAL if the map parameter is NULL.
127
 *  @returns EINVAL if the map parameter is NULL.
134
 *  @returns ENOMEM if there is no memory left.
128
 *  @returns ENOMEM if there is not enough memory left.
135
 */
129
 */
136
int char_map_initialize( char_map_ref map );
130
int char_map_initialize( char_map_ref map );
137
 
131
 
138
/** Adds or updates the value with the key to the map.
132
/** Adds or updates the value with the key to the map.
139
 *  @param map The character string to integer map. Input/output parameter.
133
 *  @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.
134
 *  @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.
135
 *  @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.
136
 *  @param value The integral value to be stored for the key character string. Input parameter.
143
 *  @returns EOK on success.
137
 *  @returns EOK on success.
144
 *  @returns EINVAL if the map is not valid.
138
 *  @returns EINVAL if the map is not valid.
145
 *  @returns EINVAL if the identifier parameter is NULL.
139
 *  @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.
140
 *  @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.
141
 *  @returns EEXIST if the key character string is already used.
148
 *  @returns Other error codes as defined for the char_map_add_item() function.
142
 *  @returns Other error codes as defined for the char_map_add_item() function.
149
 */
143
 */
150
int char_map_update( char_map_ref map, const char * identifier, size_t length, const int value );
144
int char_map_update( char_map_ref map, const char * identifier, size_t length, const int value );
151
 
145