1 /*
2  * Drizzle Client & Protocol Library
3  *
4  * Copyright (C) 2008 Eric Day (eday@oddments.org)
5  * All rights reserved.
6  *
7  * Use and distribution licensed under the BSD license.  See
8  * the COPYING file in this directory for full text.
9  */
10 
11 /**
12  * @file
13  * @brief Local Connection Declarations
14  */
15 
16 #ifndef __DRIZZLE_CONN_LOCAL_H
17 #define __DRIZZLE_CONN_LOCAL_H
18 
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22 
23 /**
24  * @addtogroup drizzle_con_local Local Connection Declarations
25  * @ingroup drizzle_con
26  * @{
27  */
28 
29 /**
30  * Clear address info, freeing structs if needed.
31  *
32  * @param[in] con Connection structure previously initialized with
33  *  drizzle_con_create(), drizzle_con_clone(), or related functions.
34  */
35 DRIZZLE_LOCAL
36 void drizzle_con_reset_addrinfo(drizzle_con_st *con);
37 
38 /**
39  * Check if state stack is empty.
40  *
41  * @param[in] con Connection structure previously initialized with
42  *  drizzle_con_create(), drizzle_con_clone(), or related functions.
43  * @return True if empty, false if something is on the stack.
44  */
drizzle_state_none(drizzle_con_st * con)45 static inline bool drizzle_state_none(drizzle_con_st *con)
46 {
47   return con->state_current == 0;
48 }
49 
50 /**
51  * Push a function onto the stack.
52  *
53  * @param[in] con Connection structure previously initialized with
54  *  drizzle_con_create(), drizzle_con_clone(), or related functions.
55  * @param[in] function Function to push.
56  */
drizzle_state_push(drizzle_con_st * con,drizzle_state_fn * function)57 static inline void drizzle_state_push(drizzle_con_st *con,
58                                       drizzle_state_fn *function)
59 {
60   /* The maximum stack depth can be determined at compile time, so bump this
61      constant if needed to avoid the dynamic memory management. */
62   assert(con->state_current < DRIZZLE_STATE_STACK_SIZE);
63   con->state_stack[con->state_current]= function;
64   con->state_current++;
65 }
66 
67 /**
68  * Pop a function off of the stack.
69  *
70  * @param[in] con Connection structure previously initialized with
71  *  drizzle_con_create(), drizzle_con_clone(), or related functions.
72  */
drizzle_state_pop(drizzle_con_st * con)73 static inline void drizzle_state_pop(drizzle_con_st *con)
74 {
75   con->state_current--;
76 }
77 
78 /**
79  * Reset the stack so it is empty.
80  *
81  * @param[in] con Connection structure previously initialized with
82  *  drizzle_con_create(), drizzle_con_clone(), or related functions.
83  */
drizzle_state_reset(drizzle_con_st * con)84 static inline void drizzle_state_reset(drizzle_con_st *con)
85 {
86   con->state_current= 0;
87 }
88 
89 /** @} */
90 
91 #ifdef __cplusplus
92 }
93 #endif
94 
95 #endif /* __DRIZZLE_CONN_LOCAL_H */
96