Doxygen
Loading...
Searching...
No Matches
searchindex.cpp File Reference
#include "searchindex.h"
#include <cctype>
#include <mutex>
#include "config.h"
#include "doxygen.h"
#include "filedef.h"
#include "groupdef.h"
#include "language.h"
#include "message.h"
#include "pagedef.h"
#include "portable.h"
#include "util.h"
Include dependency graph for searchindex.cpp:

Go to the source code of this file.

Functions

static int charsToIndex (const DString &word)
static void writeInt (std::ostream &f, size_t index)
static void writeString (std::ostream &f, const DString &s)
static DString definitionToName (const Definition *ctx)
void initSearchIndexer ()
void finalizeSearchIndexer ()

Variables

const size_t numIndexEntries = 256*256
static std::mutex g_searchIndexMutex

Function Documentation

◆ charsToIndex()

int charsToIndex ( const DString & word)
static

Definition at line 173 of file searchindex.cpp.

174{
175 if (word.length()<2) return -1;
176
177 // Fast string hashing algorithm
178 //register uint16_t h=0;
179 //const char *k = word;
180 //uint16_t mask=0xfc00;
181 //while ( *k )
182 //{
183 // h = (h&mask)^(h<<6)^(*k++);
184 //}
185 //return h;
186
187 // Simple hashing that allows for substring searching
188 uint32_t c1=static_cast<uint8_t>(word[0]);
189 uint32_t c2=static_cast<uint8_t>(word[1]);
190 return c1*256+c2;
191}
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition dstring.h:151

References DString::length().

Referenced by SearchIndex::addWordRec().

◆ definitionToName()

DString definitionToName ( const Definition * ctx)
static

Definition at line 389 of file searchindex.cpp.

390{
391 if (ctx && ctx->definitionType()==Definition::TypeMember)
392 {
393 const MemberDef *md = toMemberDef(ctx);
394 if (md->isFunction())
395 return "function";
396 else if (md->isSlot())
397 return "slot";
398 else if (md->isSignal())
399 return "signal";
400 else if (md->isVariable())
401 return "variable";
402 else if (md->isTypedef())
403 return "typedef";
404 else if (md->isEnumerate())
405 return "enum";
406 else if (md->isEnumValue())
407 return "enumvalue";
408 else if (md->isProperty())
409 return "property";
410 else if (md->isEvent())
411 return "event";
412 else if (md->isRelated() || md->isForeign())
413 return "related";
414 else if (md->isFriend())
415 return "friend";
416 else if (md->isDefine())
417 return "define";
418 }
419 else if (ctx)
420 {
421 switch(ctx->definitionType())
422 {
424 return (toClassDef(ctx))->compoundTypeString();
426 return "file";
428 return "namespace";
430 return "concept";
432 return "group";
434 return "package";
436 return "page";
438 return "dir";
440 return "module";
441 default:
442 break;
443 }
444 }
445 return "unknown";
446}
virtual DefType definitionType() const =0
A model of a class/file/namespace member symbol.
Definition memberdef.h:45
virtual bool isSignal() const =0
virtual bool isFriend() const =0
virtual bool isForeign() const =0
virtual bool isRelated() const =0
virtual bool isTypedef() const =0
virtual bool isSlot() const =0
virtual bool isEvent() const =0
virtual bool isFunction() const =0
virtual bool isDefine() const =0
virtual bool isEnumerate() const =0
virtual bool isVariable() const =0
virtual bool isEnumValue() const =0
virtual bool isProperty() const =0
ClassDef * toClassDef(Definition *d)
MemberDef * toMemberDef(Definition *d)

References Definition::definitionType(), MemberDef::isDefine(), MemberDef::isEnumerate(), MemberDef::isEnumValue(), MemberDef::isEvent(), MemberDef::isForeign(), MemberDef::isFriend(), MemberDef::isFunction(), MemberDef::isProperty(), MemberDef::isRelated(), MemberDef::isSignal(), MemberDef::isSlot(), MemberDef::isTypedef(), MemberDef::isVariable(), toClassDef(), toMemberDef(), Definition::TypeClass, Definition::TypeConcept, Definition::TypeDir, Definition::TypeFile, Definition::TypeGroup, Definition::TypeMember, Definition::TypeModule, Definition::TypeNamespace, Definition::TypePackage, and Definition::TypePage.

Referenced by SearchIndexExternal::setCurrentDoc().

◆ finalizeSearchIndexer()

void finalizeSearchIndexer ( )

Cleanup the search indexer

Definition at line 547 of file searchindex.cpp.

548{
550}
static SearchIndexIntf searchIndex
Definition doxygen.h:117
void setKind(Kind k)

References SearchIndexIntf::Disabled, Doxygen::searchIndex, and SearchIndexIntf::setKind().

Referenced by generateOutput().

◆ initSearchIndexer()

void initSearchIndexer ( )

Initialize the search indexer

Definition at line 536 of file searchindex.cpp.

537{
538 bool searchEngine = Config_getBool(SEARCHENGINE);
539 bool serverBasedSearch = Config_getBool(SERVER_BASED_SEARCH);
540 bool externalSearch = Config_getBool(EXTERNAL_SEARCH);
541 if (searchEngine && serverBasedSearch)
542 {
544 }
545}
#define Config_getBool(name)
Definition config.h:33

References Config_getBool, SearchIndexIntf::External, SearchIndexIntf::Internal, Doxygen::searchIndex, and SearchIndexIntf::setKind().

Referenced by parseInput().

◆ writeInt()

void writeInt ( std::ostream & f,
size_t index )
static

Definition at line 240 of file searchindex.cpp.

241{
242 f.put(static_cast<int>((index>>24)&0xff));
243 f.put(static_cast<int>((index>>16)&0xff));
244 f.put(static_cast<int>((index>>8)&0xff));
245 f.put(static_cast<int>(index&0xff));
246}

Referenced by SearchIndex::write().

◆ writeString()

void writeString ( std::ostream & f,
const DString & s )
static

Definition at line 248 of file searchindex.cpp.

249{
250 size_t l = s.length();
251 for (size_t i=0;i<l;i++) f.put(s[i]);
252 f.put(0);
253}

References DString::length().

Referenced by SearchIndex::write().

Variable Documentation

◆ g_searchIndexMutex

std::mutex g_searchIndexMutex
static

◆ numIndexEntries

const size_t numIndexEntries = 256*256

Definition at line 46 of file searchindex.cpp.

Referenced by SearchIndex::SearchIndex(), and SearchIndex::write().