all: updated FSF address in GPL text
[sip-router] / modules / p_usrloc / hslot.h
1 /*
2  * $Id: hslot.h 5241 2008-11-21 12:52:25Z henningw $ 
3  *
4  * Copyright (C) 2001-2003 FhG Fokus
5  *
6  * This file is part of Kamailio, a free SIP server.
7  *
8  * Kamailio is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version
12  *
13  * Kamailio is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License 
19  * along with this program; if not, write to the Free Software 
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
21  */
22
23 /*! \file
24  *  \brief USRLOC - Hash table collision slot related functions
25  *  \ingroup usrloc
26  */
27
28
29
30 #ifndef HSLOT_H
31 #define HSLOT_H
32
33 #include "../../locking.h"
34
35 #include "udomain.h"
36 #include "urecord.h"
37
38
39 struct udomain;
40 struct urecord;
41
42
43 typedef struct hslot {
44         int n;                  /*!< Number of elements in the collision slot */
45         struct urecord* first;  /*!< First element in the list */
46         struct urecord* last;   /*!< Last element in the list */
47         struct udomain* d;      /*!< Domain we belong to */
48 #ifdef GEN_LOCK_T_PREFERED
49         gen_lock_t *lock;       /*!< Lock for hash entry - fastlock */
50 #else
51         int lockidx;            /*!< Lock index for hash entry - the rest*/
52 #endif
53 } hslot_t;
54
55 /*! \brief
56  * Initialize slot structure
57  */
58 void init_slot(struct udomain* _d, hslot_t* _s, int n);
59
60
61 /*! \brief
62  * Deinitialize given slot structure
63  */
64 void deinit_slot(hslot_t* _s);
65
66
67 /*! \brief
68  * Add an element to slot linked list
69  */
70 void slot_add(hslot_t* _s, struct urecord* _r);
71
72
73 /*! \brief
74  * Remove an element from slot linked list
75  */
76 void slot_rem(hslot_t* _s, struct urecord* _r);
77
78
79 /*!
80  * \brief Initialize locks for the hash table
81  * \return 0 on success, -1 on failure
82  */
83 int ul_init_locks(void);
84
85
86 /*!
87  * \brief Destroy all locks on the list
88  */
89 void ul_unlock_locks(void);
90 void ul_destroy_locks(void);
91
92 #ifndef GEN_LOCK_T_PREFERED
93 void ul_lock_idx(int idx);
94 void ul_release_idx(int idx);
95 #endif
96
97 #endif /* HSLOT_H */