Subversion Repositories HelenOS

Rev

Rev 3886 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
3666 mejdrech 1
/*
3912 mejdrech 2
 * Copyright (c) 2009 Lukas Mejdrech
3666 mejdrech 3
 * All rights reserved.
4
 *
5
 * Redistribution and use in source and binary forms, with or without
6
 * modification, are permitted provided that the following conditions
7
 * are met:
8
 *
9
 * - Redistributions of source code must retain the above copyright
10
 *   notice, this list of conditions and the following disclaimer.
11
 * - Redistributions in binary form must reproduce the above copyright
12
 *   notice, this list of conditions and the following disclaimer in the
13
 *   documentation and/or other materials provided with the distribution.
14
 * - The name of the author may not be used to endorse or promote products
15
 *   derived from this software without specific prior written permission.
16
 *
17
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
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.
27
 */
28
 
29
/** @addtogroup net
3912 mejdrech 30
 *  @{
3666 mejdrech 31
 */
32
 
33
/** @file
3912 mejdrech 34
 *  Character string to integer map.
3666 mejdrech 35
 */
36
 
37
#ifndef __CHAR_MAP_H__
38
#define __CHAR_MAP_H__
39
 
3912 mejdrech 40
/** Invalid assigned value used also if an entry does not exist.
3846 mejdrech 41
 */
3666 mejdrech 42
#define CHAR_MAP_NULL   ( -1 )
43
 
3912 mejdrech 44
/** Type definition of the character string to integer map.
3846 mejdrech 45
 *  @see char_map
46
 */
3666 mejdrech 47
typedef struct char_map char_map_t;
3846 mejdrech 48
 
3912 mejdrech 49
/** Type definition of the character string to integer map pointer.
3846 mejdrech 50
 *  @see char_map
51
 */
3666 mejdrech 52
typedef char_map_t *    char_map_ref;
53
 
3912 mejdrech 54
/** Character string to integer map item.
3846 mejdrech 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
 */
3666 mejdrech 58
struct  char_map{
3912 mejdrech 59
    /** Actually mapped character.
3846 mejdrech 60
     */
61
    char            c;
3912 mejdrech 62
    /** Stored integral value.
3846 mejdrech 63
     */
64
    int             value;
3912 mejdrech 65
    /** Next character array size.
3846 mejdrech 66
     */
67
    int             size;
3912 mejdrech 68
    /** First free position in the next character array.
3846 mejdrech 69
     */
70
    int             next;
3912 mejdrech 71
    /** Next character array.
3846 mejdrech 72
     */
3666 mejdrech 73
    char_map_ref *  items;
3912 mejdrech 74
    /** Consistency check magic value.
3846 mejdrech 75
     */
76
    int             magic;
3666 mejdrech 77
};
78
 
3846 mejdrech 79
/** Adds the value with the key to the map.
80
 *  @param map The character string to integer map. Input/output parameter.
3912 mejdrech 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.
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.
3846 mejdrech 83
 *  @param value The integral value to be stored for the key character string. Input parameter.
84
 *  @returns EOK on success.
85
 *  @returns EINVAL if the map is not valid.
86
 *  @returns EINVAL if the identifier parameter is NULL.
3912 mejdrech 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.
3846 mejdrech 88
 *  @returns EEXIST if the key character string is already used.
89
 *  @returns Other error codes as defined for the char_map_add_item() function.
90
 */
91
int char_map_add( char_map_ref map, const char * identifier, size_t length, const int value );
92
 
93
/** Clears and destroys the map.
94
 *  @param map The character string to integer map. Input/output parameter.
95
 */
3666 mejdrech 96
void    char_map_destroy( char_map_ref map );
3846 mejdrech 97
 
98
/** Excludes the value assigned to the key from the map.
99
 *  The entry is cleared from the map.
100
 *  @param map The character string to integer map. Input/output parameter.
3912 mejdrech 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.
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.
3846 mejdrech 103
 *  @returns The integral value assigned to the key character string.
104
 *  @returns CHAR_MAP_NULL if the key is not assigned a value.
105
 */
106
int char_map_exclude( char_map_ref map, const char * identifier, size_t length );
107
 
108
/** Returns the value assigned to the key from the map.
109
 *  @param map The character string to integer map. Input parameter.
3912 mejdrech 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.
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.
3846 mejdrech 112
 *  @returns The integral value assigned to the key character string.
113
 *  @returns CHAR_MAP_NULL if the key is not assigned a value.
114
 */
115
int char_map_find( const char_map_ref map, const char * identifier, size_t length );
116
 
117
/** Returns the value assigned to the map.
118
 *  @param map The character string to integer map. Input parameter.
119
 *  @returns The integral value assigned to the map.
120
 *  @returns CHAR_MAP_NULL if the map is not assigned a value.
121
 */
122
int char_map_get_value( const char_map_ref map );
123
 
124
/** Initializes the map.
125
 *  @param map The character string to integer map. Input/output parameter.
126
 *  @returns EOK on success.
127
 *  @returns EINVAL if the map parameter is NULL.
3912 mejdrech 128
 *  @returns ENOMEM if there is not enough memory left.
3846 mejdrech 129
 */
3666 mejdrech 130
int char_map_initialize( char_map_ref map );
131
 
3846 mejdrech 132
/** Adds or updates the value with the key to the map.
133
 *  @param map The character string to integer map. Input/output parameter.
3912 mejdrech 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.
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.
3846 mejdrech 136
 *  @param value The integral value to be stored for the key character string. Input parameter.
137
 *  @returns EOK on success.
138
 *  @returns EINVAL if the map is not valid.
139
 *  @returns EINVAL if the identifier parameter is NULL.
3912 mejdrech 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.
3846 mejdrech 141
 *  @returns EEXIST if the key character string is already used.
142
 *  @returns Other error codes as defined for the char_map_add_item() function.
143
 */
144
int char_map_update( char_map_ref map, const char * identifier, size_t length, const int value );
145
 
3666 mejdrech 146
#endif
147
 
148
/** @}
149
 */