1251881Speter/* temp_serializer.h : serialization functions for caching of FSFS structures 2251881Speter * 3251881Speter * ==================================================================== 4251881Speter * Licensed to the Apache Software Foundation (ASF) under one 5251881Speter * or more contributor license agreements. See the NOTICE file 6251881Speter * distributed with this work for additional information 7251881Speter * regarding copyright ownership. The ASF licenses this file 8251881Speter * to you under the Apache License, Version 2.0 (the 9251881Speter * "License"); you may not use this file except in compliance 10251881Speter * with the License. You may obtain a copy of the License at 11251881Speter * 12251881Speter * http://www.apache.org/licenses/LICENSE-2.0 13251881Speter * 14251881Speter * Unless required by applicable law or agreed to in writing, 15251881Speter * software distributed under the License is distributed on an 16251881Speter * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17251881Speter * KIND, either express or implied. See the License for the 18251881Speter * specific language governing permissions and limitations 19251881Speter * under the License. 20251881Speter * ==================================================================== 21251881Speter */ 22251881Speter 23251881Speter#ifndef SVN_LIBSVN_FS__TEMP_SERIALIZER_H 24251881Speter#define SVN_LIBSVN_FS__TEMP_SERIALIZER_H 25251881Speter 26251881Speter#include "fs.h" 27251881Speter 28251881Speter/** 29251881Speter * Prepend the @a number to the @a string in a space efficient way such that 30251881Speter * no other (number,string) combination can produce the same result. 31251881Speter * Allocate temporaries as well as the result from @a pool. 32251881Speter */ 33251881Speterconst char* 34251881Spetersvn_fs_fs__combine_number_and_string(apr_int64_t number, 35251881Speter const char *string, 36251881Speter apr_pool_t *pool); 37251881Speter 38251881Speter/** 39251881Speter * Serialize a @a noderev_p within the serialization @a context. 40251881Speter */ 41251881Spetervoid 42251881Spetersvn_fs_fs__noderev_serialize(struct svn_temp_serializer__context_t *context, 43251881Speter node_revision_t * const *noderev_p); 44251881Speter 45251881Speter/** 46251881Speter * Deserialize a @a noderev_p within the @a buffer. 47251881Speter */ 48251881Spetervoid 49251881Spetersvn_fs_fs__noderev_deserialize(void *buffer, 50251881Speter node_revision_t **noderev_p); 51251881Speter 52251881Speter/** 53251881Speter * #svn_txdelta_window_t is not sufficient for caching the data it 54251881Speter * represents because data read process needs auxilliary information. 55251881Speter */ 56251881Spetertypedef struct 57251881Speter{ 58251881Speter /* the txdelta window information cached / to be cached */ 59251881Speter svn_txdelta_window_t *window; 60251881Speter 61251881Speter /* the revision file read pointer position right after reading the window */ 62251881Speter apr_off_t end_offset; 63251881Speter} svn_fs_fs__txdelta_cached_window_t; 64251881Speter 65251881Speter/** 66251881Speter * Implements #svn_cache__serialize_func_t for 67251881Speter * #svn_fs_fs__txdelta_cached_window_t. 68251881Speter */ 69251881Spetersvn_error_t * 70251881Spetersvn_fs_fs__serialize_txdelta_window(void **buffer, 71251881Speter apr_size_t *buffer_size, 72251881Speter void *item, 73251881Speter apr_pool_t *pool); 74251881Speter 75251881Speter/** 76251881Speter * Implements #svn_cache__deserialize_func_t for 77251881Speter * #svn_fs_fs__txdelta_cached_window_t. 78251881Speter */ 79251881Spetersvn_error_t * 80251881Spetersvn_fs_fs__deserialize_txdelta_window(void **item, 81251881Speter void *buffer, 82251881Speter apr_size_t buffer_size, 83251881Speter apr_pool_t *pool); 84251881Speter 85251881Speter/** 86251881Speter * Implements #svn_cache__serialize_func_t for a manifest 87251881Speter * (@a in is an #apr_array_header_t of apr_off_t elements). 88251881Speter */ 89251881Spetersvn_error_t * 90251881Spetersvn_fs_fs__serialize_manifest(void **data, 91251881Speter apr_size_t *data_len, 92251881Speter void *in, 93251881Speter apr_pool_t *pool); 94251881Speter 95251881Speter/** 96251881Speter * Implements #svn_cache__deserialize_func_t for a manifest 97251881Speter * (@a *out is an #apr_array_header_t of apr_off_t elements). 98251881Speter */ 99251881Spetersvn_error_t * 100251881Spetersvn_fs_fs__deserialize_manifest(void **out, 101251881Speter void *data, 102251881Speter apr_size_t data_len, 103251881Speter apr_pool_t *pool); 104251881Speter 105251881Speter/** 106251881Speter * Implements #svn_cache__serialize_func_t for a properties hash 107251881Speter * (@a in is an #apr_hash_t of svn_string_t elements, keyed by const char*). 108251881Speter */ 109251881Spetersvn_error_t * 110251881Spetersvn_fs_fs__serialize_properties(void **data, 111251881Speter apr_size_t *data_len, 112251881Speter void *in, 113251881Speter apr_pool_t *pool); 114251881Speter 115251881Speter/** 116251881Speter * Implements #svn_cache__deserialize_func_t for a properties hash 117251881Speter * (@a *out is an #apr_hash_t of svn_string_t elements, keyed by const char*). 118251881Speter */ 119251881Spetersvn_error_t * 120251881Spetersvn_fs_fs__deserialize_properties(void **out, 121251881Speter void *data, 122251881Speter apr_size_t data_len, 123251881Speter apr_pool_t *pool); 124251881Speter 125251881Speter/** 126251881Speter * Implements #svn_cache__serialize_func_t for #svn_fs_id_t 127251881Speter */ 128251881Spetersvn_error_t * 129251881Spetersvn_fs_fs__serialize_id(void **data, 130251881Speter apr_size_t *data_len, 131251881Speter void *in, 132251881Speter apr_pool_t *pool); 133251881Speter 134251881Speter/** 135251881Speter * Implements #svn_cache__deserialize_func_t for #svn_fs_id_t 136251881Speter */ 137251881Spetersvn_error_t * 138251881Spetersvn_fs_fs__deserialize_id(void **out, 139251881Speter void *data, 140251881Speter apr_size_t data_len, 141251881Speter apr_pool_t *pool); 142251881Speter 143251881Speter/** 144251881Speter * Implements #svn_cache__serialize_func_t for #node_revision_t 145251881Speter */ 146251881Spetersvn_error_t * 147251881Spetersvn_fs_fs__serialize_node_revision(void **buffer, 148251881Speter apr_size_t *buffer_size, 149251881Speter void *item, 150251881Speter apr_pool_t *pool); 151251881Speter 152251881Speter/** 153251881Speter * Implements #svn_cache__deserialize_func_t for #node_revision_t 154251881Speter */ 155251881Spetersvn_error_t * 156251881Spetersvn_fs_fs__deserialize_node_revision(void **item, 157251881Speter void *buffer, 158251881Speter apr_size_t buffer_size, 159251881Speter apr_pool_t *pool); 160251881Speter 161251881Speter/** 162251881Speter * Implements #svn_cache__serialize_func_t for a directory contents hash 163251881Speter */ 164251881Spetersvn_error_t * 165251881Spetersvn_fs_fs__serialize_dir_entries(void **data, 166251881Speter apr_size_t *data_len, 167251881Speter void *in, 168251881Speter apr_pool_t *pool); 169251881Speter 170251881Speter/** 171251881Speter * Implements #svn_cache__deserialize_func_t for a directory contents hash 172251881Speter */ 173251881Spetersvn_error_t * 174251881Spetersvn_fs_fs__deserialize_dir_entries(void **out, 175251881Speter void *data, 176251881Speter apr_size_t data_len, 177251881Speter apr_pool_t *pool); 178251881Speter 179251881Speter/** 180251881Speter * Implements #svn_cache__partial_getter_func_t. Set (apr_off_t) @a *out 181251881Speter * to the element indexed by (apr_int64_t) @a *baton within the 182251881Speter * serialized manifest array @a data and @a data_len. */ 183251881Spetersvn_error_t * 184251881Spetersvn_fs_fs__get_sharded_offset(void **out, 185251881Speter const void *data, 186251881Speter apr_size_t data_len, 187251881Speter void *baton, 188251881Speter apr_pool_t *pool); 189251881Speter 190251881Speter/** 191251881Speter * Implements #svn_cache__partial_getter_func_t for a single 192251881Speter * #svn_fs_dirent_t within a serialized directory contents hash, 193251881Speter * identified by its name (const char @a *baton). 194251881Speter */ 195251881Spetersvn_error_t * 196251881Spetersvn_fs_fs__extract_dir_entry(void **out, 197251881Speter const void *data, 198251881Speter apr_size_t data_len, 199251881Speter void *baton, 200251881Speter apr_pool_t *pool); 201251881Speter 202251881Speter/** 203251881Speter * Describes the change to be done to a directory: Set the entry 204251881Speter * identify by @a name to the value @a new_entry. If the latter is 205251881Speter * @c NULL, the entry shall be removed if it exists. Otherwise it 206251881Speter * will be replaced or automatically added, respectively. 207251881Speter */ 208251881Spetertypedef struct replace_baton_t 209251881Speter{ 210251881Speter /** name of the directory entry to modify */ 211251881Speter const char *name; 212251881Speter 213251881Speter /** directory entry to insert instead */ 214251881Speter svn_fs_dirent_t *new_entry; 215251881Speter} replace_baton_t; 216251881Speter 217251881Speter/** 218251881Speter * Implements #svn_cache__partial_setter_func_t for a single 219251881Speter * #svn_fs_dirent_t within a serialized directory contents hash, 220251881Speter * identified by its name in the #replace_baton_t in @a baton. 221251881Speter */ 222251881Spetersvn_error_t * 223251881Spetersvn_fs_fs__replace_dir_entry(void **data, 224251881Speter apr_size_t *data_len, 225251881Speter void *baton, 226251881Speter apr_pool_t *pool); 227251881Speter 228251881Speter/** 229251881Speter * Implements #svn_cache__serialize_func_t for an #apr_array_header_t of 230251881Speter * #change_t *. 231251881Speter */ 232251881Spetersvn_error_t * 233251881Spetersvn_fs_fs__serialize_changes(void **data, 234251881Speter apr_size_t *data_len, 235251881Speter void *in, 236251881Speter apr_pool_t *pool); 237251881Speter 238251881Speter/** 239251881Speter * Implements #svn_cache__deserialize_func_t for an #apr_array_header_t of 240251881Speter * #change_t *. 241251881Speter */ 242251881Spetersvn_error_t * 243251881Spetersvn_fs_fs__deserialize_changes(void **out, 244251881Speter void *data, 245251881Speter apr_size_t data_len, 246251881Speter apr_pool_t *pool); 247251881Speter 248251881Speter/** 249251881Speter * Implements #svn_cache__serialize_func_t for #svn_mergeinfo_t objects. 250251881Speter */ 251251881Spetersvn_error_t * 252251881Spetersvn_fs_fs__serialize_mergeinfo(void **data, 253251881Speter apr_size_t *data_len, 254251881Speter void *in, 255251881Speter apr_pool_t *pool); 256251881Speter 257251881Speter/** 258251881Speter * Implements #svn_cache__deserialize_func_t for #svn_mergeinfo_t objects. 259251881Speter */ 260251881Spetersvn_error_t * 261251881Spetersvn_fs_fs__deserialize_mergeinfo(void **out, 262251881Speter void *data, 263251881Speter apr_size_t data_len, 264251881Speter apr_pool_t *pool); 265251881Speter 266251881Speter#endif 267