summaryrefslogtreecommitdiff
path: root/content/backing_store.h
blob: 312a2b02e69af4c8d09cf7f30e8f968a1b7b412c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/*
 * Copyright 2014 Vincent Sanders <vince@netsurf-browser.org>
 *
 * This file is part of NetSurf, http://www.netsurf-browser.org/
 *
 * NetSurf is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; version 2 of the License.
 *
 * NetSurf is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

/**
 * \file
 * Low-level source data cache backing store interface.
 */

#ifndef NETSURF_CONTENT_LLCACHE_PRIVATE_H_
#define NETSURF_CONTENT_LLCACHE_PRIVATE_H_

#include "content/llcache.h"

/** storage control flags */
enum backing_store_flags {
	/** no special processing */
	BACKING_STORE_NONE = 0,
	/** data is metadata */
	BACKING_STORE_META = 1,
};

/**
 * low level cache backing store operation table
 *
 * The low level cache (source objects) has the capability to make
 * objects and their metadata (headers etc) persistant by writing to a
 * backing store using these operations.
 */
struct gui_llcache_table {
	/**
	 * Initialise the backing store.
	 *
	 * @param parameters to configure backing store.
	 * @return NSERROR_OK on success or error code on faliure.
	 */
	nserror (*initialise)(const struct llcache_store_parameters *parameters);

	/**
	 * Finalise the backing store.
	 *
	 * @return NSERROR_OK on success or error code on faliure.
	 */
	nserror (*finalise)(void);

	/**
	 * Place an object in the backing store.
	 *
	 * The object is placed in the persistent store and may be
	 *  retrieved with the fetch method.
	 *
	 * The backing store will take a reference to the
	 *  passed data, subsequently the caller should explicitly
	 *  release the allocation using the release method and not
	 *  free the data itself.
	 *
	 * The caller may not assume that the persistent storage has
	 *  been completely written on return.
	 *
	 * @param[in] url The url is used as the unique primary key for the data.
	 * @param[in] flags The flags to control how the obejct is stored.
	 * @param[in] data The objects data.
	 * @param[in] datalen The length of the \a data.
	 * @return NSERROR_OK on success or error code on faliure.
	 */
	nserror (*store)(struct nsurl *url, enum backing_store_flags flags,
			 uint8_t *data, const size_t datalen);

	/**
	 * Retrive an object from the backing store.
	 *
	 * The caller may provide a buffer in \a data and a buffer
	 *  length in \a datalen. Alternatively the backing store will
	 *  allocate its own buffer if \a data is NULL, this memory is
	 *  managed by the backing store.
	 *
	 * The caller must assume nothing about the backing store
	 *  allocated buffers and the storage and *must* be freed by
	 *  calling the release method.
	 *
	 * @param[in] url The url is used as the unique primary key for the data.
	 * @param[in] flags The flags to control how the object is retrived.
	 * @param[in,out] data The retrived objects data.
	 * @param[in,out] datalen The length of the \a data retrieved.
	 * @return NSERROR_OK on success or error code on faliure.
	 */
	nserror (*fetch)(struct nsurl *url, enum backing_store_flags flags,
			 uint8_t **data, size_t *datalen);

	/**
	 * release a previously fetched or stored memory object.
	 *
	 * @param url The url is used as the unique primary key to invalidate.
	 * @param[in] flags The flags to control how the object data is released.
	 * @return NSERROR_OK on success or error code on faliure.
	 */
	nserror (*release)(struct nsurl *url, enum backing_store_flags flags);

	/**
	 * Invalidate a source object from the backing store.
	 *
	 * The entry (if present in the backing store) must no longer
	 * be returned as a result to the fetch or meta operations.
	 *
	 * If the entry had data allocated it will be released.
	 *
	 * @param url The url is used as the unique primary key to invalidate.
	 * @return NSERROR_OK on success or error code on faliure.
	 */
	nserror (*invalidate)(struct nsurl *url);

};

extern struct gui_llcache_table* null_llcache_table;
extern struct gui_llcache_table* filesystem_llcache_table;

#endif