diff options
| author | Peter Wemm <peter@FreeBSD.org> | 2018-05-08 03:44:38 +0000 | 
|---|---|---|
| committer | Peter Wemm <peter@FreeBSD.org> | 2018-05-08 03:44:38 +0000 | 
| commit | 3faf8d6bffc5d0fb2525ba37bb504c53366caf9d (patch) | |
| tree | 7e47911263e75034b767fe34b2f8d3d17e91f66d /subversion/libsvn_subr/cache-null.c | |
| parent | a55fb3c0d5eca7d887798125d5b95942b1f01d4b (diff) | |
Diffstat (limited to 'subversion/libsvn_subr/cache-null.c')
| -rw-r--r-- | subversion/libsvn_subr/cache-null.c | 157 | 
1 files changed, 157 insertions, 0 deletions
| diff --git a/subversion/libsvn_subr/cache-null.c b/subversion/libsvn_subr/cache-null.c new file mode 100644 index 000000000000..3b7ee12d0a1d --- /dev/null +++ b/subversion/libsvn_subr/cache-null.c @@ -0,0 +1,157 @@ +/* + * cache-null.c: dummy caching object for Subversion + * + * ==================================================================== + *    Licensed to the Apache Software Foundation (ASF) under one + *    or more contributor license agreements.  See the NOTICE file + *    distributed with this work for additional information + *    regarding copyright ownership.  The ASF licenses this file + *    to you under the Apache License, Version 2.0 (the + *    "License"); you may not use this file except in compliance + *    with the License.  You may obtain a copy of the License at + * + *      http://www.apache.org/licenses/LICENSE-2.0 + * + *    Unless required by applicable law or agreed to in writing, + *    software distributed under the License is distributed on an + *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + *    KIND, either express or implied.  See the License for the + *    specific language governing permissions and limitations + *    under the License. + * ==================================================================== + */ + +#include "svn_private_config.h" +#include "cache.h" + +/* There is no dedicated cache data structure.  Instead, we store the + * cache ID directly in svn_cache__t.cache_internal . + */ + +static svn_error_t * +null_cache_get(void **value_p, +               svn_boolean_t *found, +               void *cache_void, +               const void *key, +               apr_pool_t *result_pool) +{ +  /* We know there is nothing to be found in this cache. */ +  *value_p = NULL; +  *found = FALSE; + +  return SVN_NO_ERROR; +} + +static svn_error_t * +null_cache_has_key(svn_boolean_t *found, +                   void *cache_void, +                   const void *key, +                   apr_pool_t *scratch_pool) +{ +  /* We know there is nothing to be found in this cache. */ +  *found = FALSE; +  return SVN_NO_ERROR; +} + +static svn_error_t * +null_cache_set(void *cache_void, +               const void *key, +               void *value, +               apr_pool_t *scratch_pool) +{ +  /* We won't cache anything. */ +  return SVN_NO_ERROR; +} + +static svn_error_t * +null_cache_iter(svn_boolean_t *completed, +                void *cache_void, +                svn_iter_apr_hash_cb_t user_cb, +                void *user_baton, +                apr_pool_t *scratch_pool) +{ +  /* Iteration over an empty set is a no-op. */ +  if (completed) +    *completed = TRUE; + +  return SVN_NO_ERROR; +} + +static svn_error_t * +null_cache_get_partial(void **value_p, +                       svn_boolean_t *found, +                       void *cache_void, +                       const void *key, +                       svn_cache__partial_getter_func_t func, +                       void *baton, +                       apr_pool_t *result_pool) +{ +  /* We know there is nothing to be found in this cache. */ +  *found = FALSE; +  return SVN_NO_ERROR; +} + +static svn_error_t * +null_cache_set_partial(void *cache_void, +                       const void *key, +                       svn_cache__partial_setter_func_t func, +                       void *baton, +                       apr_pool_t *scratch_pool) +{ +  /* We know there is nothing to update in this cache. */ +  return SVN_NO_ERROR; +} + +static svn_boolean_t +null_cache_is_cachable(void *cache_void, +                       apr_size_t size) +{ +  /* We won't cache anything */ +  return FALSE; +} + +static svn_error_t * +null_cache_get_info(void *cache_void, +                    svn_cache__info_t *info, +                    svn_boolean_t reset, +                    apr_pool_t *result_pool) +{ +  const char *id = cache_void; + +  info->id = apr_pstrdup(result_pool, id); + +  info->used_entries = 0; +  info->total_entries = 0; + +  info->used_size = 0; +  info->data_size = 0; +  info->total_size = 0; + +  return SVN_NO_ERROR; +} + +static svn_cache__vtable_t null_cache_vtable = { +  null_cache_get, +  null_cache_has_key, +  null_cache_set, +  null_cache_iter, +  null_cache_is_cachable, +  null_cache_get_partial, +  null_cache_set_partial, +  null_cache_get_info +}; + +svn_error_t * +svn_cache__create_null(svn_cache__t **cache_p, +                       const char *id, +                       apr_pool_t *result_pool) +{ +  svn_cache__t *cache = apr_pcalloc(result_pool, sizeof(*cache)); +  cache->vtable = &null_cache_vtable; +  cache->cache_internal = apr_pstrdup(result_pool, id); +  cache->pretend_empty = FALSE; /* There is no point in pretending -- +                                   this cache _is_ empty. */ + +  *cache_p = cache; +  return SVN_NO_ERROR; +} | 
