Changeset 8375d0eb in mainline for uspace/app/bithenge/tree.h
- Timestamp:
- 2012-06-08T07:02:55Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 8b36bf2
- Parents:
- 5c925ce
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/bithenge/tree.h
r5c925ce r8375d0eb 51 51 #endif 52 52 53 /** Indicates the type of a tree node. */ 53 54 typedef enum { 54 BITHENGE_NODE_NONE, 55 BITHENGE_NODE_INTERNAL, 55 /** An internal node with labelled edges to other nodes. */ 56 BITHENGE_NODE_INTERNAL = 1, 57 /** A leaf node holding a boolean value. */ 56 58 BITHENGE_NODE_BOOLEAN, 59 /** A leaf node holding an integer. */ 57 60 BITHENGE_NODE_INTEGER, 61 /** A leaf node holding a string. */ 58 62 BITHENGE_NODE_STRING, 63 /** A leaf node holding a binary blob. */ 59 64 BITHENGE_NODE_BLOB, 60 65 } bithenge_node_type_t; 61 66 62 67 typedef struct bithenge_node_t { 68 /** @privatesection */ 63 69 bithenge_node_type_t type; 64 70 union { … … 74 80 } bithenge_node_t; 75 81 82 /** A callback function used to iterate over a node's children. 83 * @memberof bithenge_node_t 84 * @param key The key. 85 * @param value The value. 86 * @param data Data provided to @a bithenge_node_t::bithenge_node_for_each. 87 * @return EOK on success or an error code from errno.h. */ 88 typedef int (*bithenge_for_each_func_t)(bithenge_node_t *key, bithenge_node_t *value, void *data); 89 90 /** Operations providing access to an internal node. */ 91 typedef struct bithenge_internal_node_ops_t { 92 /** @copydoc bithenge_node_t::bithenge_node_for_each */ 93 int (*for_each)(bithenge_node_t *node, bithenge_for_each_func_t func, void *data); 94 /** @copydoc bithenge_node_t::bithenge_node_destroy */ 95 int (*destroy)(bithenge_node_t *node); 96 } bithenge_internal_node_ops_t; 97 98 /** Find the type of a node. 99 * @memberof bithenge_node_t 100 * @param node The node. 101 * @return The type of the node. */ 76 102 static inline bithenge_node_type_t bithenge_node_type(const bithenge_node_t *node) 77 103 { … … 79 105 } 80 106 81 typedef int (*bithenge_for_each_func_t)(bithenge_node_t *key, bithenge_node_t *value, void *data); 82 83 typedef struct bithenge_internal_node_ops_t { 84 int (*for_each)(bithenge_node_t *node, bithenge_for_each_func_t func, void *data); 85 int (*destroy)(bithenge_node_t *node); 86 } bithenge_internal_node_ops_t; 87 107 /** Iterate over a node's children. 108 * @memberof bithenge_node_t 109 * @param node The internal node to iterate over. 110 * @param func The callback function. 111 * @param data Data to provide to the callback function. 112 * @return EOK on success or an error code from errno.h. */ 88 113 static inline int bithenge_node_for_each(bithenge_node_t *node, bithenge_for_each_func_t func, void *data) 89 114 { … … 92 117 } 93 118 119 /** Get the value of a boolean node. 120 * @memberof bithenge_node_t 121 * @param node The boolean node. 122 * @return The node's value. */ 94 123 static inline bool bithenge_boolean_node_value(bithenge_node_t *node) 95 124 { … … 98 127 } 99 128 129 /** Get the value of an integer node. 130 * @memberof bithenge_node_t 131 * @param node The integer node. 132 * @return The node's value. */ 100 133 static inline bithenge_int_t bithenge_integer_node_value(bithenge_node_t *node) 101 134 { … … 104 137 } 105 138 139 /** Get the value of an string node. 140 * @memberof bithenge_node_t 141 * @param node The string node. 142 * @return The node's value. */ 106 143 static inline const char *bithenge_string_node_value(bithenge_node_t *node) 107 144 { … … 110 147 } 111 148 112 int bithenge_new_simple_internal_node(bithenge_node_t **, bithenge_node_t **, bithenge_int_t, bool needs_free); 149 int bithenge_new_simple_internal_node(bithenge_node_t **, bithenge_node_t **, 150 bithenge_int_t, bool needs_free); 113 151 int bithenge_new_boolean_node(bithenge_node_t **, bool); 114 152 int bithenge_new_integer_node(bithenge_node_t **, bithenge_int_t);
Note:
See TracChangeset
for help on using the changeset viewer.