1231990Smp/*
259243Sobrien * cache.h: cache vtable interface
359243Sobrien *
459243Sobrien * ====================================================================
559243Sobrien *    Licensed to the Apache Software Foundation (ASF) under one
659243Sobrien *    or more contributor license agreements.  See the NOTICE file
759243Sobrien *    distributed with this work for additional information
859243Sobrien *    regarding copyright ownership.  The ASF licenses this file
959243Sobrien *    to you under the Apache License, Version 2.0 (the
1059243Sobrien *    "License"); you may not use this file except in compliance
1159243Sobrien *    with the License.  You may obtain a copy of the License at
1259243Sobrien *
1359243Sobrien *      http://www.apache.org/licenses/LICENSE-2.0
1459243Sobrien *
1559243Sobrien *    Unless required by applicable law or agreed to in writing,
1659243Sobrien *    software distributed under the License is distributed on an
17100616Smp *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1859243Sobrien *    KIND, either express or implied.  See the License for the
1959243Sobrien *    specific language governing permissions and limitations
2059243Sobrien *    under the License.
2159243Sobrien * ====================================================================
2259243Sobrien */
2359243Sobrien
2459243Sobrien#ifndef SVN_LIBSVN_SUBR_CACHE_H
2559243Sobrien#define SVN_LIBSVN_SUBR_CACHE_H
2659243Sobrien
2759243Sobrien#include "private/svn_cache.h"
2859243Sobrien
2959243Sobrien#ifdef __cplusplus
3059243Sobrienextern "C" {
3159243Sobrien#endif /* __cplusplus */
3259243Sobrien
3359243Sobrientypedef struct svn_cache__vtable_t {
3459243Sobrien  /* See svn_cache__get(). */
35231990Smp  svn_error_t *(*get)(void **value,
3659243Sobrien                      svn_boolean_t *found,
3759243Sobrien                      void *cache_implementation,
3859243Sobrien                      const void *key,
3959243Sobrien                      apr_pool_t *result_pool);
4059243Sobrien
4169408Sache  /* See svn_cache__set(). */
4259243Sobrien  svn_error_t *(*set)(void *cache_implementation,
4359243Sobrien                      const void *key,
4469408Sache                      void *value,
4559243Sobrien                      apr_pool_t *scratch_pool);
4659243Sobrien
4759243Sobrien  /* See svn_cache__iter(). */
4859243Sobrien  svn_error_t *(*iter)(svn_boolean_t *completed,
4959243Sobrien                       void *cache_implementation,
50231990Smp                       svn_iter_apr_hash_cb_t func,
51231990Smp                       void *baton,
52231990Smp                       apr_pool_t *scratch_pool);
53231990Smp
54145479Smp  /* See svn_cache__is_cachable(). */
5559243Sobrien  svn_boolean_t (*is_cachable)(void *cache_implementation,
5659243Sobrien                               apr_size_t size);
5759243Sobrien
5859243Sobrien  /* See svn_cache__get_partial(). */
5959243Sobrien  svn_error_t *(*get_partial)(void **value,
6059243Sobrien                              svn_boolean_t *found,
6159243Sobrien                              void *cache_implementation,
6259243Sobrien                              const void *key,
6359243Sobrien                              svn_cache__partial_getter_func_t func,
6459243Sobrien                              void *baton,
6559243Sobrien                              apr_pool_t *result_pool);
6659243Sobrien
6759243Sobrien  /* See svn_cache__set_partial(). */
6859243Sobrien  svn_error_t *(*set_partial)(void *cache_implementation,
6959243Sobrien                              const void *key,
7059243Sobrien                              svn_cache__partial_setter_func_t func,
7159243Sobrien                              void *baton,
7259243Sobrien                              apr_pool_t *scratch_pool);
7359243Sobrien
7459243Sobrien  /* See svn_cache__get_info(). */
7559243Sobrien  svn_error_t *(*get_info)(void *cache_implementation,
7659243Sobrien                           svn_cache__info_t *info,
7759243Sobrien                           svn_boolean_t reset,
7859243Sobrien                           apr_pool_t *result_pool);
7959243Sobrien} svn_cache__vtable_t;
8059243Sobrien
8159243Sobrienstruct svn_cache__t {
82167465Smp  const svn_cache__vtable_t *vtable;
83167465Smp
84167465Smp  /* See svn_cache__set_error_handler(). */
85167465Smp  svn_cache__error_handler_t error_handler;
86167465Smp  void *error_baton;
87167465Smp
88167465Smp  /* Private data for the cache implementation. */
89167465Smp  void *cache_internal;
9059243Sobrien
9159243Sobrien  /* Total number of calls to getters. */
9259243Sobrien  apr_uint64_t reads;
9359243Sobrien
9459243Sobrien  /* Total number of calls to set(). */
9559243Sobrien  apr_uint64_t writes;
9659243Sobrien
9759243Sobrien  /* Total number of getter calls that returned a cached item. */
9859243Sobrien  apr_uint64_t hits;
9959243Sobrien
10059243Sobrien  /* Total number of function calls that returned an error. */
10159243Sobrien  apr_uint64_t failures;
10259243Sobrien};
10359243Sobrien
10459243Sobrien
10559243Sobrien#ifdef __cplusplus
10659243Sobrien}
10759243Sobrien#endif /* __cplusplus */
10859243Sobrien
10959243Sobrien#endif /* SVN_LIBSVN_SUBR_CACHE_H */
11059243Sobrien