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
|
/** \file file_cache.h */ // -*-c++-*-
// Copyright (C) 2009 Daniel Burrows
//
// This program 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; either version 2 of
// the License, or (at your option) any later version.
//
// This program 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; see the file COPYING. If not, write to
// the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
// Boston, MA 02111-1307, USA.
#include <cwidget/generic/util/exception.h>
#include <boost/shared_ptr.hpp>
#include <time.h>
#include "temp.h"
namespace aptitude
{
namespace util
{
/** \brief An exception related to the file cache. */
class FileCacheException : public cwidget::util::Exception
{
std::string msg;
public:
FileCacheException(const std::string &_msg)
: msg(_msg)
{
}
std::string errmsg() const { return msg; }
};
/** \brief An cache of file contents.
*
* aptitude uses this to store downloaded blobs of data:
* changelogs, screenshots, etc.
*
* \note The implementation is based on SQLite, and only hidden
* behind an abstract interface so that its details aren't
* unnecessarily exposed.
*/
class file_cache
{
public:
/** \brief Store a file in the cache.
*
* \param key The key under which the file is to be stored.
* \param fd The name of a file to store in the cache; the
* caller is responsible for ensuring that the file
* won't be deleted or altered while putItem() is
* running.
* \param mtime The last modified time of the item to insert.
*/
virtual void putItem(const std::string &key,
const std::string &path,
time_t mtime) = 0;
/** \brief Store a file in the cache.
*
* \param key The key under which the file is to be stored.
* \param fd The name of a file to store in the cache; the
* caller is responsible for ensuring that the file
* won't be deleted or altered while putItem() is
* running.
*
* The item is stored with a last modified time of 0.
*/
virtual void putItem(const std::string &key,
const std::string &path)
{
putItem(key, path, 0);
}
/** \brief Retrieve a file from the cache.
*
* As a side effect, marks the file as recently visited, so it
* will be less likely to be removed from the cache.
*
* \param key The key under which the file was stored.
* \param mtime Set to the most recent date and time at which
* the given key was modified.
*/
virtual temp::name getItem(const std::string &key,
time_t &mtime) = 0;
/** \brief Retrieve a file from the cache.
*
* As a side effect, marks the file as recently visited, so it
* will be less likely to be removed from the cache.
*
* \param key The key under which the file was stored.
*/
temp::name getItem(const std::string &key)
{
time_t mtime;
return getItem(key, mtime);
}
/** \brief Open or create a new file cache with the given
* parameters.
*
* \param filename The file in which the on-disk cache is
* stored.
* \param memory_size The maximum allowed size in bytes of the in-memory
* cache. (if zero, only an on-disk cache
* will be used)
* \param disk_size The maximum allowed size in bytes of the on-disk
* cache. (if zero, only a memory cache
* will be used)
*/
static boost::shared_ptr<file_cache> create(const std::string &filename,
int memory_size,
int disk_size);
virtual ~file_cache();
};
}
}
|