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