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 <map>
26
#include <memory>
27
#include <string>
28
#include <unordered_map>
29
#include <variant>
30
#include <vector>
31
32
#include "
dstring.h
"
33
34
class
Definition
;
35
36
/*! Initialize the search indexer */
37
void
initSearchIndexer
();
38
/*! Cleanup the search indexer */
39
void
finalizeSearchIndexer
();
40
41
// --- intermediate data collected by one thread ------
42
43
struct
SIData_CurrentDoc
44
{
45
SIData_CurrentDoc
(
const
Definition
*d,
const
DString
&a,
bool
b)
46
:
ctx
(d),
anchor
(a),
isSourceFile
(b) {}
47
const
Definition
*
ctx
=
nullptr
;
48
DString
anchor
;
49
bool
isSourceFile
;
50
};
51
52
struct
SIData_Word
53
{
54
SIData_Word
(
const
DString
&w,
bool
b)
55
:
word
(w),
hiPrio
(b) {}
56
DString
word
;
57
bool
hiPrio
;
58
};
59
60
//-----------------------------
61
62
/** Writes search index for doxygen provided server based search engine that uses PHP. */
63
class
SearchIndex
64
{
65
struct
URL
66
{
67
URL
(
const
DString
&n,
const
DString
&u) :
name
(n),
url
(u) {}
68
DString
name
;
69
DString
url
;
70
};
71
72
struct
URLInfo
73
{
74
URLInfo
(
int
idx,
int
f) :
urlIdx
(idx),
freq
(f) {}
75
int
urlIdx
;
76
int
freq
;
77
};
78
79
class
IndexWord
80
{
81
public
:
82
using
URLInfoMap
= std::unordered_map<int,URLInfo>;
83
IndexWord
(
const
DString
&
word
) :
m_word
(
word
) {}
84
void
addUrlIndex
(
int
,
bool
);
85
URLInfoMap
urls
()
const
{
return
m_urls
; }
86
DString
word
()
const
{
return
m_word
; }
87
88
private
:
89
DString
m_word
;
90
URLInfoMap
m_urls
;
91
};
92
93
public
:
94
SearchIndex
();
95
void
setCurrentDoc
(
const
Definition
*ctx,
const
DString
&anchor,
bool
isSourceFile);
96
void
addWord
(
const
DString
&word,
bool
hiPriority);
97
void
write
(
const
DString
&file);
98
private
:
99
void
addWordRec
(
const
DString
&word,
bool
hiPrio,
bool
recurse);
100
std::unordered_map<std::string,int>
m_words
;
101
std::vector< std::vector< IndexWord> >
m_index
;
102
std::unordered_map<std::string,int>
m_url2IdMap
;
103
std::map<int,URL>
m_urls
;
104
int
m_urlIndex
= -1;
105
int
m_urlMaxIndex
= 0;
106
};
107
108
/** Writes search index that should be used with an externally provided search engine,
109
* e.g\. doxyindexer and doxysearch.cgi.
110
*/
111
class
SearchIndexExternal
112
{
113
struct
SearchDocEntry
114
{
115
DString
type
;
116
DString
name
;
117
DString
args
;
118
DString
extId
;
119
DString
url
;
120
DString
importantText
;
121
DString
normalText
;
122
};
123
124
public
:
125
SearchIndexExternal
();
126
void
setCurrentDoc
(
const
Definition
*ctx,
const
DString
&anchor,
bool
isSourceFile);
127
void
addWord
(
const
DString
&word,
bool
hiPriority);
128
void
write
(
const
DString
&file);
129
private
:
130
std::map<std::string,SearchDocEntry>
m_docEntries
;
131
SearchDocEntry
*
m_current
=
nullptr
;
132
};
133
134
/** Abstract proxy interface for non-javascript based search indices.
135
* It forwards calls to either SearchIndex or SearchIndexExternal depending
136
* on the Kind passed during construction.
137
*/
138
class
SearchIndexIntf
139
{
140
public
:
141
using
SearchIndexVariant
= std::variant<std::monostate,SearchIndex,SearchIndexExternal>;
142
enum
Kind
{
Disabled
,
Internal
,
External
};
143
SearchIndexIntf
() :
m_kind
(
Disabled
) {}
144
bool
enabled
()
const
{
return
m_kind
!=
Disabled
; }
145
146
void
setCurrentDoc
(
const
Definition
*ctx,
const
DString
&anchor,
bool
isSourceFile)
147
{
148
if
(std::holds_alternative<SearchIndex>(
m_variant
))
149
{
150
std::get<SearchIndex>(
m_variant
).setCurrentDoc(ctx,anchor,isSourceFile);
151
}
152
else
if
(std::holds_alternative<SearchIndexExternal>(
m_variant
))
153
{
154
std::get<SearchIndexExternal>(
m_variant
).setCurrentDoc(ctx,anchor,isSourceFile);
155
}
156
}
157
void
addWord
(
const
DString
&word,
bool
hiPriority)
158
{
159
if
(std::holds_alternative<SearchIndex>(
m_variant
))
160
{
161
std::get<SearchIndex>(
m_variant
).addWord(word,hiPriority);
162
}
163
else
if
(std::holds_alternative<SearchIndexExternal>(
m_variant
))
164
{
165
std::get<SearchIndexExternal>(
m_variant
).addWord(word,hiPriority);
166
}
167
}
168
void
write
(
const
DString
&file)
169
{
170
if
(std::holds_alternative<SearchIndex>(
m_variant
))
171
{
172
std::get<SearchIndex>(
m_variant
).write(file);
173
}
174
else
if
(std::holds_alternative<SearchIndexExternal>(
m_variant
))
175
{
176
std::get<SearchIndexExternal>(
m_variant
).write(file);
177
}
178
}
179
void
setKind
(
Kind
k) {
180
m_kind
=k;
181
switch
(
m_kind
)
182
{
183
case
Disabled
:
m_variant
= std::monostate();
break
;
184
case
Internal
:
m_variant
=
SearchIndex
();
break
;
185
case
External
:
m_variant
=
SearchIndexExternal
();
break
;
186
}
187
}
188
Kind
kind
()
const
{
return
m_kind
; }
189
private
:
190
Kind
m_kind
;
191
SearchIndexVariant
m_variant
;
192
};
193
194
195
#endif
DString
A String class for use with Doxygen wrapping std::string and adding some additional functionality off...
Definition
dstring.h:84
Definition
The common base class of all entity definitions found in the sources.
Definition
definition.h:77
SearchIndex::IndexWord::word
DString word() const
Definition
searchindex.h:86
SearchIndex::IndexWord::addUrlIndex
void addUrlIndex(int, bool)
Definition
searchindex.cpp:52
SearchIndex::IndexWord::m_word
DString m_word
Definition
searchindex.h:89
SearchIndex::IndexWord::URLInfoMap
std::unordered_map< int, URLInfo > URLInfoMap
Definition
searchindex.h:82
SearchIndex::IndexWord::IndexWord
IndexWord(const DString &word)
Definition
searchindex.h:83
SearchIndex::IndexWord::m_urls
URLInfoMap m_urls
Definition
searchindex.h:90
SearchIndex::IndexWord::urls
URLInfoMap urls() const
Definition
searchindex.h:85
SearchIndexExternal
Writes search index that should be used with an externally provided search engine,...
Definition
searchindex.h:112
SearchIndexExternal::setCurrentDoc
void setCurrentDoc(const Definition *ctx, const DString &anchor, bool isSourceFile)
Definition
searchindex.cpp:448
SearchIndexExternal::m_current
SearchDocEntry * m_current
Definition
searchindex.h:131
SearchIndexExternal::write
void write(const DString &file)
Definition
searchindex.cpp:501
SearchIndexExternal::m_docEntries
std::map< std::string, SearchDocEntry > m_docEntries
Definition
searchindex.h:130
SearchIndexExternal::SearchIndexExternal
SearchIndexExternal()
Definition
searchindex.cpp:385
SearchIndexExternal::addWord
void addWord(const DString &word, bool hiPriority)
Definition
searchindex.cpp:491
SearchIndex
Writes search index for doxygen provided server based search engine that uses PHP.
Definition
searchindex.h:64
SearchIndex::addWord
void addWord(const DString &word, bool hiPriority)
Definition
searchindex.cpp:234
SearchIndex::m_urls
std::map< int, URL > m_urls
Definition
searchindex.h:103
SearchIndex::m_urlIndex
int m_urlIndex
Definition
searchindex.h:104
SearchIndex::m_index
std::vector< std::vector< IndexWord > > m_index
Definition
searchindex.h:101
SearchIndex::SearchIndex
SearchIndex()
Definition
searchindex.cpp:67
SearchIndex::write
void write(const DString &file)
Definition
searchindex.cpp:255
SearchIndex::m_words
std::unordered_map< std::string, int > m_words
Definition
searchindex.h:100
SearchIndex::m_url2IdMap
std::unordered_map< std::string, int > m_url2IdMap
Definition
searchindex.h:102
SearchIndex::addWordRec
void addWordRec(const DString &word, bool hiPrio, bool recurse)
Definition
searchindex.cpp:193
SearchIndex::m_urlMaxIndex
int m_urlMaxIndex
Definition
searchindex.h:105
SearchIndex::setCurrentDoc
void setCurrentDoc(const Definition *ctx, const DString &anchor, bool isSourceFile)
Definition
searchindex.cpp:72
SearchIndexIntf::addWord
void addWord(const DString &word, bool hiPriority)
Definition
searchindex.h:157
SearchIndexIntf::SearchIndexIntf
SearchIndexIntf()
Definition
searchindex.h:143
SearchIndexIntf::setCurrentDoc
void setCurrentDoc(const Definition *ctx, const DString &anchor, bool isSourceFile)
Definition
searchindex.h:146
SearchIndexIntf::kind
Kind kind() const
Definition
searchindex.h:188
SearchIndexIntf::m_variant
SearchIndexVariant m_variant
Definition
searchindex.h:191
SearchIndexIntf::enabled
bool enabled() const
Definition
searchindex.h:144
SearchIndexIntf::setKind
void setKind(Kind k)
Definition
searchindex.h:179
SearchIndexIntf::m_kind
Kind m_kind
Definition
searchindex.h:190
SearchIndexIntf::write
void write(const DString &file)
Definition
searchindex.h:168
SearchIndexIntf::SearchIndexVariant
std::variant< std::monostate, SearchIndex, SearchIndexExternal > SearchIndexVariant
Definition
searchindex.h:141
SearchIndexIntf::Kind
Kind
Definition
searchindex.h:142
SearchIndexIntf::Disabled
@ Disabled
Definition
searchindex.h:142
SearchIndexIntf::Internal
@ Internal
Definition
searchindex.h:142
SearchIndexIntf::External
@ External
Definition
searchindex.h:142
dstring.h
initSearchIndexer
void initSearchIndexer()
Definition
searchindex.cpp:536
finalizeSearchIndexer
void finalizeSearchIndexer()
Definition
searchindex.cpp:547
SIData_CurrentDoc::ctx
const Definition * ctx
Definition
searchindex.h:47
SIData_CurrentDoc::SIData_CurrentDoc
SIData_CurrentDoc(const Definition *d, const DString &a, bool b)
Definition
searchindex.h:45
SIData_CurrentDoc::anchor
DString anchor
Definition
searchindex.h:48
SIData_CurrentDoc::isSourceFile
bool isSourceFile
Definition
searchindex.h:49
SIData_Word::word
DString word
Definition
searchindex.h:56
SIData_Word::SIData_Word
SIData_Word(const DString &w, bool b)
Definition
searchindex.h:54
SIData_Word::hiPrio
bool hiPrio
Definition
searchindex.h:57
SearchIndex::URL::url
DString url
Definition
searchindex.h:69
SearchIndex::URL::URL
URL(const DString &n, const DString &u)
Definition
searchindex.h:67
SearchIndex::URL::name
DString name
Definition
searchindex.h:68
SearchIndex::URLInfo::URLInfo
URLInfo(int idx, int f)
Definition
searchindex.h:74
SearchIndex::URLInfo::urlIdx
int urlIdx
Definition
searchindex.h:75
SearchIndex::URLInfo::freq
int freq
Definition
searchindex.h:76
SearchIndexExternal::SearchDocEntry
Definition
searchindex.h:114
SearchIndexExternal::SearchDocEntry::extId
DString extId
Definition
searchindex.h:118
SearchIndexExternal::SearchDocEntry::name
DString name
Definition
searchindex.h:116
SearchIndexExternal::SearchDocEntry::type
DString type
Definition
searchindex.h:115
SearchIndexExternal::SearchDocEntry::normalText
DString normalText
Definition
searchindex.h:121
SearchIndexExternal::SearchDocEntry::url
DString url
Definition
searchindex.h:119
SearchIndexExternal::SearchDocEntry::importantText
DString importantText
Definition
searchindex.h:120
SearchIndexExternal::SearchDocEntry::args
DString args
Definition
searchindex.h:117
src
searchindex.h
Generated by
1.19.0