This file is indexed.

/usr/include/zim/search.h is in libzim-dev 1.2-9.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  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
/*
 * Copyright (C) 2007 Tommi Maekitalo
 *
 * 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
 * is provided AS IS, WITHOUT ANY WARRANTY; without even the implied
 * warranty of MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, and
 * NON-INFRINGEMENT.  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; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
 *
 */

#ifndef ZIM_SEARCH_H
#define ZIM_SEARCH_H

#include <zim/article.h>
#include <vector>
#include <map>

namespace zim
{
  class SearchResult
  {
      Article article;
      mutable double priority;
      struct WordAttr
      {
        unsigned count;
        unsigned addweight;
        WordAttr() : count(0), addweight(1) { }
      };

      typedef std::map<std::string, WordAttr> WordListType; // map word => count and addweight
      typedef std::map<size_type, std::string> PosListType;  // map position => word
      WordListType wordList;
      PosListType posList;

    public:
      SearchResult() : priority(0) { }
      explicit SearchResult(const Article& article_, unsigned priority_ = 0)
        : article(article_),
          priority(priority_)
          { }
      const Article& getArticle() const  { return article; }
      double getPriority() const;
      void foundWord(const std::string& word, size_type pos, unsigned addweight);
      unsigned getCountWords() const  { return wordList.size(); }
      unsigned getCountPositions() const  { return posList.size(); }
  };

  class Search
  {
    public:
      class Results : public std::vector<SearchResult>
      {
          std::string expr;

        public:
          void setExpression(const std::string& e)
            { expr = e; }
          const std::string& getExpression() const
            { return expr; }
      };

    private:
      static double weightOcc;
      static double weightOccOff;
      static double weightPlus;
      static double weightDist;
      static double weightPos;
      static double weightPosRel;
      static double weightDistinctWords;
      static unsigned searchLimit;

      File indexfile;
      File articlefile;

    public:
      Search()
          { }

      explicit Search(const File& zimfile)
        : indexfile(zimfile),
          articlefile(zimfile)
          { }
      Search(const File& articlefile_, const File& indexfile_)
        : indexfile(indexfile_),
          articlefile(articlefile_)
          { }

      void search(Results& results, const std::string& expr);
      void find(Results& results, char ns, const std::string& praefix, unsigned limit = searchLimit);
      void find(Results& results, char ns, const std::string& begin, const std::string& end, unsigned limit = searchLimit);

      static double getWeightOcc()                 { return weightOcc; }
      static double getWeightOccOff()              { return weightOccOff; }
      static double getWeightPlus()                { return weightPlus; }
      static double getWeightDist()                { return weightDist; }
      static double getWeightPos()                 { return weightPos; }
      static double getWeightPosRel()              { return weightPosRel; }
      static double getWeightDistinctWords()       { return weightDistinctWords; }
      static unsigned getSearchLimit()             { return searchLimit; }

      static void setWeightOcc(double v)           { weightOcc = v; }
      static void setWeightOccOff(double v)        { weightOccOff = v; }
      static void setWeightPlus(double v)          { weightPlus = v; }
      static void setWeightDist(double v)          { weightDist = v; }
      static void setWeightPos(double v)           { weightPos = v; }
      static void setWeightPosRel(double v)        { weightPosRel = v; }
      static void setWeightDistinctWords(double v) { weightDistinctWords = v; }
      static void setSearchLimit(unsigned v)       { searchLimit = v; }
  };
}

#endif // ZIM_SEARCH_H