Main Page | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals

dict.h

Go to the documentation of this file.
00001 /* ==================================================================== 
00002  * The Kannel Software License, Version 1.0 
00003  * 
00004  * Copyright (c) 2001-2008 Kannel Group  
00005  * Copyright (c) 1998-2001 WapIT Ltd.   
00006  * All rights reserved. 
00007  * 
00008  * Redistribution and use in source and binary forms, with or without 
00009  * modification, are permitted provided that the following conditions 
00010  * are met: 
00011  * 
00012  * 1. Redistributions of source code must retain the above copyright 
00013  *    notice, this list of conditions and the following disclaimer. 
00014  * 
00015  * 2. Redistributions in binary form must reproduce the above copyright 
00016  *    notice, this list of conditions and the following disclaimer in 
00017  *    the documentation and/or other materials provided with the 
00018  *    distribution. 
00019  * 
00020  * 3. The end-user documentation included with the redistribution, 
00021  *    if any, must include the following acknowledgment: 
00022  *       "This product includes software developed by the 
00023  *        Kannel Group (http://www.kannel.org/)." 
00024  *    Alternately, this acknowledgment may appear in the software itself, 
00025  *    if and wherever such third-party acknowledgments normally appear. 
00026  * 
00027  * 4. The names "Kannel" and "Kannel Group" must not be used to 
00028  *    endorse or promote products derived from this software without 
00029  *    prior written permission. For written permission, please  
00030  *    contact org@kannel.org. 
00031  * 
00032  * 5. Products derived from this software may not be called "Kannel", 
00033  *    nor may "Kannel" appear in their name, without prior written 
00034  *    permission of the Kannel Group. 
00035  * 
00036  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 
00037  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
00038  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
00039  * DISCLAIMED.  IN NO EVENT SHALL THE KANNEL GROUP OR ITS CONTRIBUTORS 
00040  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,  
00041  * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  
00042  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR  
00043  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,  
00044  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE  
00045  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,  
00046  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
00047  * ==================================================================== 
00048  * 
00049  * This software consists of voluntary contributions made by many 
00050  * individuals on behalf of the Kannel Group.  For more information on  
00051  * the Kannel Group, please see <http://www.kannel.org/>. 
00052  * 
00053  * Portions of this software are based upon software originally written at  
00054  * WapIT Ltd., Helsinki, Finland for the Kannel project.  
00055  */ 
00056 
00057 /*
00058  * dict.h - lookup data structure using octet strings as keys
00059  *
00060  * A Dict is an abstract data structure that stores values, represented as
00061  * void pointers, and uses octet strings (Octstr) as keys. You can think
00062  * of it as an array indexed by octet strings.
00063  *
00064  * Lars Wirzenius
00065  */
00066 
00067 #ifndef DICT_H
00068 #define DICT_H
00069 
00070 typedef struct Dict Dict;
00071 
00072 
00073 /*
00074  * Create a Dict. `size_hint' gives an indication of how many different
00075  * keys will be in the Dict at the same time, at most. This is used for
00076  * performance optimization; things will work fine, though somewhat
00077  * slower, even if it the number is exceeded. `destroy_value' is a pointer
00078  * to a function that is called whenever a value stored in the Dict needs
00079  * to be destroyed. If `destroy_value' is NULL, then values are not
00080  * destroyed by the Dict, they are just discarded.
00081  */
00082 Dict *dict_create(long size_hint, void (*destroy_value)(void *));
00083 
00084 
00085 /*
00086  * Destroy a Dict and all values in it.
00087  */
00088 void dict_destroy(Dict *dict);
00089 
00090 
00091 /*
00092  * Put a new value into a Dict. If the same key existed already, the
00093  * old value is destroyed. If `value' is NULL, the old value is destroyed
00094  * and the key is removed from the Dict.
00095  */
00096 void dict_put(Dict *dict, Octstr *key, void *value);
00097 
00098 /*
00099  * Put a new value into a Dict. Return error, if the same key existed all-
00100  * ready.
00101  */
00102 
00103 int dict_put_once(Dict *dict, Octstr *key, void *value);
00104 
00105 /*
00106  * Look up a value in a Dict. If there is no value corresponding to a 
00107  * key, return NULL, otherwise return the value. The value will not
00108  * be removed from the Dict.
00109  */
00110 void *dict_get(Dict *dict, Octstr *key);
00111 
00112 
00113 /*
00114  * Remove a value from a Dict without destroying it.
00115  */
00116 void *dict_remove(Dict *dict, Octstr *key);
00117 
00118 
00119 /*
00120  * Return the number of keys which currently exist in the Dict.
00121  */
00122 long dict_key_count(Dict *dict);
00123 
00124 
00125 /*
00126  * Return a list of all the currently defined keys in the Dict. The
00127  * caller must destroy the list.
00128  */
00129 List *dict_keys(Dict *dict);
00130 
00131 
00132 #endif
00133 
00134 
00135 
00136 
00137 
00138 
See file LICENSE for details about the license agreement for using, modifying, copying or deriving work from this software.