*/
APR_DECLARE(unsigned int) apr_hash_count(apr_hash_t *ht);
+/**
+ * Clear any key/value pairs in the hash table.
+ * @param ht The hash table
+ */
+APR_DECLARE(void) apr_hash_clear(apr_hash_t *ht);
+
/**
* Merge two hash tables into one new hash table. The values of the overlay
* hash override the values of the base if both have the same key. Both
*/
APR_DECLARE(void *) apr_array_push(apr_array_header_t *arr);
+/** A helper macro for accessing a member of an APR array.
+ *
+ * @param ary the array
+ * @param i the index into the array to return
+ * @param type the type of the objects stored in the array
+ *
+ * @return the item at index i
+ */
+#define APR_ARRAY_IDX(ary,i,type) (((type *)(ary)->elts)[i])
+
+/** A helper macro for pushing elements into an APR array.
+ *
+ * @param ary the array
+ * @param type the type of the objects stored in the array
+ *
+ * @return the location where the new object should be placed
+ */
+#define APR_ARRAY_PUSH(ary,type) (*((type *)apr_array_push(ary)))
+
/**
* Remove an element from an array (as a first-in, last-out stack)
* @param arr The array to remove an element from.
*/
APR_DECLARE(void *) apr_array_pop(apr_array_header_t *arr);
+/**
+ * Remove all elements from an array.
+ * @param arr The array to remove all elements from.
+ * @remark As the underlying storage is allocated from a pool, no
+ * memory is freed by this operation, but is available for reuse.
+ */
+APR_DECLARE(void) apr_array_clear(apr_array_header_t *arr);
+
/**
* Concatenate two arrays together
* @param dst The destination array, and the one to go first in the combined
return ht->count;
}
+APR_DECLARE(void) apr_hash_clear(apr_hash_t *ht)
+{
+ apr_hash_index_t *hi;
+ for (hi = apr_hash_first(NULL, ht); hi; hi = apr_hash_next(hi))
+ apr_hash_set(ht, hi->this->key, hi->this->klen, NULL);
+}
+
APR_DECLARE(apr_hash_t*) apr_hash_overlay(apr_pool_t *p,
const apr_hash_t *overlay,
const apr_hash_t *base)