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
|
/*
* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
*
* Distributable under the terms of either the Apache License (Version 2.0) or
* the GNU Lesser General Public License, as specified in the COPYING file.
*
* Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
*/
#ifndef _lucene_store_Directory
#define _lucene_store_Directory
#if defined(_LUCENE_PRAGMA_ONCE)
# pragma once
#endif
#include <QtCore/QStringList>
#include "CLucene/store/Lock.h"
#include "CLucene/util/VoidList.h"
#include "CLucene/util/Misc.h"
#include "IndexInput.h"
#include "IndexOutput.h"
CL_NS_DEF(store)
/** A Directory is a flat list of files. Files may be written once, when they
* are created. Once a file is created it may only be opened for read, or
* deleted. Random access is permitted both when reading and writing.
*
* <p> Direct i/o is not used directly, but rather all i/o is
* through this API. This permits things such as: <ul>
* <li> implementation of RAM-based indices;
* <li> implementation indices stored in a database, via a database;
* <li> implementation of an index as a single file;
* </ul>
*
*/
class Directory : LUCENE_REFBASE
{
protected:
Directory() {}
// Removes an existing file in the directory.
virtual bool doDeleteFile(const QString& name) = 0;
public:
DEFINE_MUTEX(THIS_LOCK)
virtual ~Directory() {};
// Returns an array of strings, one for each file in the directory.
virtual QStringList list() const = 0;
// Returns true iff a file with the given name exists.
virtual bool fileExists(const QString& name) const = 0;
// Returns the time the named file was last modified.
virtual int64_t fileModified(const QString& name) const = 0;
// Returns the length of a file in the directory.
virtual int64_t fileLength(const QString& name) const = 0;
// Returns a stream reading an existing file.
virtual IndexInput* openInput(const QString& name) = 0;
virtual IndexInput* openInput(const QString& name, int32_t bufferSize)
{
// didnt overload bufferSize
return openInput(name);
}
// Set the modified time of an existing file to now.
virtual void touchFile(const QString& name) = 0;
// Removes an existing file in the directory.
virtual bool deleteFile(const QString& name, const bool throwError = true) {
bool ret = doDeleteFile(name);
if (!ret && throwError) {
char buffer[200];
_snprintf(buffer, 200, "couldn't delete file %s",
name.toLocal8Bit().constData());
_CLTHROWA(CL_ERR_IO, buffer);
}
return ret;
}
// Renames an existing file in the directory.
// If a file already exists with the new name, then it is replaced.
virtual void renameFile(const QString& from, const QString& to) = 0;
// Creates a new, empty file in the directory with the given name.
// Returns a stream writing this file.
virtual IndexOutput* createOutput(const QString& name) = 0;
// Construct a {@link Lock}.
// @param name the name of the lock file
virtual LuceneLock* makeLock(const QString& name) = 0;
// Closes the store.
virtual void close() = 0;
virtual QString toString() const = 0;
virtual QString getDirectoryType() const = 0;
};
CL_NS_END
#endif
|