dionisos@tigris.org writes:
> Log:
> Create iterator drivers
> (with some code cleanup and pool use fixes to show their value).
Yay!
> --- (empty file)
> +++ trunk/subversion/include/svn_iter.h Mon Sep 10 23:24:39 2007
> @@ -0,0 +1,124 @@
>
> [...]
>
> +/** Iterate over the elements in @a hash, calling @a func for each one until
> + * there are no more elements or @a func returns an error.
> + *
> + * Uses @a pool for temporary allocations.
> + *
> + * On return - if @a func returns no errors - @a completed will be set
> + * to @c TRUE.
> + *
> + * If @a func returns an error other than @c SVN_ERR_ITER_BREAK, that
> + * error is returned. When @a func returns @c SVN_ERR_ITER_BREAK,
> + * iteration is interrupted, but no error is returned and @a completed is
> + * set to @c FALSE.
> + *
> + * @since New in 1.5.
> + */
> +svn_error_t *
> +svn_iter_apr_hash(svn_boolean_t *completed,
> + apr_hash_t *hash,
> + svn_iter_apr_hash_cb_t func,
> + void *baton,
> + apr_pool_t *pool);
Should be "*completed" in doc string (same for svn_iter_apr_array).
Both fixed in r26542, np.
> +#define SVN_ITER_BREAK SVN_NO_ERROR + 1
What's this for?
> +/** Helper macro to break looping in svn_iter_apr_array() and
> + * svn_iter_apr_hash() driven loops.
> + *
> + * @note The error is just a means of communicating between
> + * driver and callback. There is no need for it to exist
> + * past the lifetime of the iterpool.
> + *
> + * @since New in 1.5.
> + */
> +#define svn_iter_break(pool) \
> + do { \
> + svn_error_t *tmp__err = apr_pcalloc((pool), sizeof(*tmp__err)); \
> + tmp__err->apr_err = SVN_ERR_ITER_BREAK; \
> + return tmp__err; \
> + } while (0)
Hmmm, an idea: could we just define a static error object here?
svn_error_t svn_iter_shared_break = {
SVN_ERR_ITER_BREAK, /* apr_status_t apr_err */
NULL, /* const char *message */
NULL, /* struct svn_error_t *child */
NULL, /* apr_pool_t *pool */
__FILE__, /* const char *file; */
__LINE__ /* long line; */
}
Then svn_iter.c could just use '&svn_iter_shared_break', and we'd
avoid some overhead.
-Karl
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Wed Sep 12 02:30:01 2007