Doxygen
Toggle main menu visibility
Loading...
Searching...
No Matches
searchindex.h
Go to the documentation of this file.
1
/******************************************************************************
2
*
3
* Copyright (C) 1997-2022 by Dimitri van Heesch.
4
*
5
* Permission to use, copy, modify, and distribute this software and its
6
* documentation under the terms of the GNU General Public License is hereby
7
* granted. No representations are made about the suitability of this software
8
* for any purpose. It is provided "as is" without express or implied warranty.
9
* See the GNU General Public License for more details.
10
*
11
* Documents produced by Doxygen are derivative works derived from the
12
* input used in their production; they are not affected by this license.
13
*
14
*/
15
16
/** @file
17
* @brief Web server based search engine.
18
*
19
* Comes in two flavors: internal (via generated index) or external (via doxyindexer + doxysearch)
20
*/
21
22
#ifndef SEARCHINDEX_H
23
#define SEARCHINDEX_H
24
25
#include <memory>
26
#include <vector>
27
#include <map>
28
#include <unordered_map>
29
#include <string>
30
#include <array>
31
#include <variant>
32
33
#include "
qcstring.h
"
34
35
class
Definition
;
36
37
/*! Initialize the search indexer */
38
void
initSearchIndexer
();
39
/*! Cleanup the search indexer */
40
void
finalizeSearchIndexer
();
41
42
// --- intermediate data collected by one thread ------
43
44
struct
SIData_CurrentDoc
45
{
46
SIData_CurrentDoc
(
const
Definition
*d,
const
QCString
&a,
bool
b)
47
:
ctx
(d),
anchor
(a),
isSourceFile
(b) {}
48
const
Definition
*
ctx
=
nullptr
;
49
QCString
anchor
;
50
bool
isSourceFile
;
51
};
52
53
struct
SIData_Word
54
{
55
SIData_Word
(
const
QCString
&w,
bool
b)
56
:
word
(w),
hiPrio
(b) {}
57
QCString
word
;
58
bool
hiPrio
;
59
};
60
61
//-----------------------------
62
63
/** Writes search index for doxygen provided server based search engine that uses PHP. */
64
class
SearchIndex
65
{
66
struct
URL
67
{
68
URL
(
const
QCString
&n,
const
QCString
&u) :
name
(n),
url
(u) {}
69
QCString
name
;
70
QCString
url
;
71
};
72
73
struct
URLInfo
74
{
75
URLInfo
(
int
idx,
int
f) :
urlIdx
(idx),
freq
(f) {}
76
int
urlIdx
;
77
int
freq
;
78
};
79
80
class
IndexWord
81
{
82
public
:
83
using
URLInfoMap
= std::unordered_map<int,URLInfo>;
84
IndexWord
(
const
QCString
&
word
) :
m_word
(
word
) {}
85
void
addUrlIndex
(
int
,
bool
);
86
URLInfoMap
urls
()
const
{
return
m_urls
; }
87
QCString
word
()
const
{
return
m_word
; }
88
89
private
:
90
QCString
m_word
;
91
URLInfoMap
m_urls
;
92
};
93
94
public
:
95
SearchIndex
();
96
void
setCurrentDoc
(
const
Definition
*ctx,
const
QCString
&anchor,
bool
isSourceFile);
97
void
addWord
(
const
QCString
&word,
bool
hiPriority);
98
void
write
(
const
QCString
&file);
99
private
:
100
void
addWordRec
(
const
QCString
&word,
bool
hiPrio,
bool
recurse);
101
std::unordered_map<std::string,int>
m_words
;
102
std::vector< std::vector< IndexWord> >
m_index
;
103
std::unordered_map<std::string,int>
m_url2IdMap
;
104
std::map<int,URL>
m_urls
;
105
int
m_urlIndex
= -1;
106
int
m_urlMaxIndex
= 0;
107
};
108
109
/** Writes search index that should be used with an externally provided search engine,
110
* e.g. doxyindexer and doxysearch.cgi.
111
*/
112
class
SearchIndexExternal
113
{
114
struct
SearchDocEntry
115
{
116
QCString
type
;
117
QCString
name
;
118
QCString
args
;
119
QCString
extId
;
120
QCString
url
;
121
QCString
importantText
;
122
QCString
normalText
;
123
};
124
125
public
:
126
SearchIndexExternal
();
127
void
setCurrentDoc
(
const
Definition
*ctx,
const
QCString
&anchor,
bool
isSourceFile);
128
void
addWord
(
const
QCString
&word,
bool
hiPriority);
129
void
write
(
const
QCString
&file);
130
private
:
131
std::map<std::string,SearchDocEntry>
m_docEntries
;
132
SearchDocEntry
*
m_current
=
nullptr
;
133
};
134
135
/** Abstract proxy interface for non-javascript based search indices.
136
* It forwards calls to either SearchIndex or SearchIndexExternal depending
137
* on the Kind passed during construction.
138
*/
139
class
SearchIndexIntf
140
{
141
public
:
142
using
SearchIndexVariant
= std::variant<std::monostate,SearchIndex,SearchIndexExternal>;
143
enum
Kind
{
Disabled
,
Internal
,
External
};
144
SearchIndexIntf
() :
m_kind
(
Disabled
) {}
145
bool
enabled
()
const
{
return
m_kind
!=
Disabled
; }
146
147
void
setCurrentDoc
(
const
Definition
*ctx,
const
QCString
&anchor,
bool
isSourceFile)
148
{
149
if
(std::holds_alternative<SearchIndex>(
m_variant
))
150
{
151
std::get<SearchIndex>(
m_variant
).setCurrentDoc(ctx,anchor,isSourceFile);
152
}
153
else
if
(std::holds_alternative<SearchIndexExternal>(
m_variant
))
154
{
155
std::get<SearchIndexExternal>(
m_variant
).setCurrentDoc(ctx,anchor,isSourceFile);
156
}
157
}
158
void
addWord
(
const
QCString
&word,
bool
hiPriority)
159
{
160
if
(std::holds_alternative<SearchIndex>(
m_variant
))
161
{
162
std::get<SearchIndex>(
m_variant
).addWord(word,hiPriority);
163
}
164
else
if
(std::holds_alternative<SearchIndexExternal>(
m_variant
))
165
{
166
std::get<SearchIndexExternal>(
m_variant
).addWord(word,hiPriority);
167
}
168
}
169
void
write
(
const
QCString
&file)
170
{
171
if
(std::holds_alternative<SearchIndex>(
m_variant
))
172
{
173
std::get<SearchIndex>(
m_variant
).write(file);
174
}
175
else
if
(std::holds_alternative<SearchIndexExternal>(
m_variant
))
176
{
177
std::get<SearchIndexExternal>(
m_variant
).write(file);
178
}
179
}
180
void
setKind
(
Kind
k) {
181
m_kind
=k;
182
switch
(
m_kind
)
183
{
184
case
Disabled
:
m_variant
= std::monostate();
break
;
185
case
Internal
:
m_variant
=
SearchIndex
();
break
;
186
case
External
:
m_variant
=
SearchIndexExternal
();
break
;
187
}
188
}
189
Kind
kind
()
const
{
return
m_kind
; }
190
private
:
191
Kind
m_kind
;
192
SearchIndexVariant
m_variant
;
193
};
194
195
196
#endif
Definition
The common base class of all entity definitions found in the sources.
Definition
definition.h:77
QCString
This is an alternative implementation of QCString.
Definition
qcstring.h:101
SearchIndex::IndexWord::m_word
QCString m_word
Definition
searchindex.h:90
SearchIndex::IndexWord::addUrlIndex
void addUrlIndex(int, bool)
Definition
searchindex.cpp:53
SearchIndex::IndexWord::IndexWord
IndexWord(const QCString &word)
Definition
searchindex.h:84
SearchIndex::IndexWord::word
QCString word() const
Definition
searchindex.h:87
SearchIndex::IndexWord::URLInfoMap
std::unordered_map< int, URLInfo > URLInfoMap
Definition
searchindex.h:83
SearchIndex::IndexWord::m_urls
URLInfoMap m_urls
Definition
searchindex.h:91
SearchIndex::IndexWord::urls
URLInfoMap urls() const
Definition
searchindex.h:86
SearchIndexExternal
Writes search index that should be used with an externally provided search engine,...
Definition
searchindex.h:113
SearchIndexExternal::addWord
void addWord(const QCString &word, bool hiPriority)
Definition
searchindex.cpp:492
SearchIndexExternal::m_current
SearchDocEntry * m_current
Definition
searchindex.h:132
SearchIndexExternal::write
void write(const QCString &file)
Definition
searchindex.cpp:502
SearchIndexExternal::m_docEntries
std::map< std::string, SearchDocEntry > m_docEntries
Definition
searchindex.h:131
SearchIndexExternal::SearchIndexExternal
SearchIndexExternal()
Definition
searchindex.cpp:386
SearchIndexExternal::setCurrentDoc
void setCurrentDoc(const Definition *ctx, const QCString &anchor, bool isSourceFile)
Definition
searchindex.cpp:449
SearchIndex
Writes search index for doxygen provided server based search engine that uses PHP.
Definition
searchindex.h:65
SearchIndex::m_urls
std::map< int, URL > m_urls
Definition
searchindex.h:104
SearchIndex::addWordRec
void addWordRec(const QCString &word, bool hiPrio, bool recurse)
Definition
searchindex.cpp:194
SearchIndex::addWord
void addWord(const QCString &word, bool hiPriority)
Definition
searchindex.cpp:235
SearchIndex::m_urlIndex
int m_urlIndex
Definition
searchindex.h:105
SearchIndex::m_index
std::vector< std::vector< IndexWord > > m_index
Definition
searchindex.h:102
SearchIndex::SearchIndex
SearchIndex()
Definition
searchindex.cpp:68
SearchIndex::m_words
std::unordered_map< std::string, int > m_words
Definition
searchindex.h:101
SearchIndex::m_url2IdMap
std::unordered_map< std::string, int > m_url2IdMap
Definition
searchindex.h:103
SearchIndex::m_urlMaxIndex
int m_urlMaxIndex
Definition
searchindex.h:106
SearchIndex::write
void write(const QCString &file)
Definition
searchindex.cpp:256
SearchIndex::setCurrentDoc
void setCurrentDoc(const Definition *ctx, const QCString &anchor, bool isSourceFile)
Definition
searchindex.cpp:73
SearchIndexIntf::SearchIndexIntf
SearchIndexIntf()
Definition
searchindex.h:144
SearchIndexIntf::addWord
void addWord(const QCString &word, bool hiPriority)
Definition
searchindex.h:158
SearchIndexIntf::setCurrentDoc
void setCurrentDoc(const Definition *ctx, const QCString &anchor, bool isSourceFile)
Definition
searchindex.h:147
SearchIndexIntf::kind
Kind kind() const
Definition
searchindex.h:189
SearchIndexIntf::m_variant
SearchIndexVariant m_variant
Definition
searchindex.h:192
SearchIndexIntf::enabled
bool enabled() const
Definition
searchindex.h:145
SearchIndexIntf::setKind
void setKind(Kind k)
Definition
searchindex.h:180
SearchIndexIntf::m_kind
Kind m_kind
Definition
searchindex.h:191
SearchIndexIntf::SearchIndexVariant
std::variant< std::monostate, SearchIndex, SearchIndexExternal > SearchIndexVariant
Definition
searchindex.h:142
SearchIndexIntf::Kind
Kind
Definition
searchindex.h:143
SearchIndexIntf::Disabled
@ Disabled
Definition
searchindex.h:143
SearchIndexIntf::Internal
@ Internal
Definition
searchindex.h:143
SearchIndexIntf::External
@ External
Definition
searchindex.h:143
SearchIndexIntf::write
void write(const QCString &file)
Definition
searchindex.h:169
qcstring.h
initSearchIndexer
void initSearchIndexer()
Definition
searchindex.cpp:537
finalizeSearchIndexer
void finalizeSearchIndexer()
Definition
searchindex.cpp:548
SIData_CurrentDoc::ctx
const Definition * ctx
Definition
searchindex.h:48
SIData_CurrentDoc::SIData_CurrentDoc
SIData_CurrentDoc(const Definition *d, const QCString &a, bool b)
Definition
searchindex.h:46
SIData_CurrentDoc::anchor
QCString anchor
Definition
searchindex.h:49
SIData_CurrentDoc::isSourceFile
bool isSourceFile
Definition
searchindex.h:50
SIData_Word::SIData_Word
SIData_Word(const QCString &w, bool b)
Definition
searchindex.h:55
SIData_Word::word
QCString word
Definition
searchindex.h:57
SIData_Word::hiPrio
bool hiPrio
Definition
searchindex.h:58
SearchIndex::URL::url
QCString url
Definition
searchindex.h:70
SearchIndex::URL::URL
URL(const QCString &n, const QCString &u)
Definition
searchindex.h:68
SearchIndex::URL::name
QCString name
Definition
searchindex.h:69
SearchIndex::URLInfo::URLInfo
URLInfo(int idx, int f)
Definition
searchindex.h:75
SearchIndex::URLInfo::urlIdx
int urlIdx
Definition
searchindex.h:76
SearchIndex::URLInfo::freq
int freq
Definition
searchindex.h:77
SearchIndexExternal::SearchDocEntry
Definition
searchindex.h:115
SearchIndexExternal::SearchDocEntry::type
QCString type
Definition
searchindex.h:116
SearchIndexExternal::SearchDocEntry::extId
QCString extId
Definition
searchindex.h:119
SearchIndexExternal::SearchDocEntry::importantText
QCString importantText
Definition
searchindex.h:121
SearchIndexExternal::SearchDocEntry::name
QCString name
Definition
searchindex.h:117
SearchIndexExternal::SearchDocEntry::args
QCString args
Definition
searchindex.h:118
SearchIndexExternal::SearchDocEntry::normalText
QCString normalText
Definition
searchindex.h:122
SearchIndexExternal::SearchDocEntry::url
QCString url
Definition
searchindex.h:120
src
searchindex.h
Generated by
1.17.0