This file is indexed.

/usr/include/osl/container/generalSimpleHashTable.h is in libosl-dev 0.6.0-3.3.

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
/* generalSimpleHashTable.h
 */
#ifndef _GENERALSIMPLE_HASHTABLE_H
#define _GENERALSIMPLE_HASHTABLE_H

#include <boost/scoped_ptr.hpp>
#include <stdexcept>

namespace osl
{
  namespace hash
  {
    class HashKey;
  }
  namespace container
  {
  struct TableFull : std::runtime_error
  {
    TableFull() : std::runtime_error("table full")
    {
    }
  };

  /**
   * 基本的な hash table
   * とりあえず g++ (SGI STL) の hash_map を使って実装
   *
   * 機能:
   * - もし既に登録されている局面に再び登録があったら,全て上書きする
   * - メモリがあふれたら単に無視する
   *
   * ある程度基本的な機能を実装したら,自分で実装しなおすほうがbetter。
   * この hash_map では GCを実装することは困難と思われるため
   *
   * find, allocate で ポインタを返すため,要素を追加しても,既存の要素の
   * アドレスが変化しないデータ構造を用いる必要がある.
   */
  template <typename Record>
  class GeneralSimpleHashTable
  {
  protected:
    struct Table;
    boost::scoped_ptr<Table> table;
  public:
    typedef hash::HashKey HashKey;

    /**
     * @param capacity 表に保持する最大局面
     */
    explicit GeneralSimpleHashTable(size_t capacity=100000);
    ~GeneralSimpleHashTable();
    void clear();

    /**
     * 表を探し,登録されてなければ新規エントリを登録する
     * @return テーブルがいっぱい。
     *   そうでなければ内部で確保した場所へのポインタ
     *   (間違っても delete しないこと)
     * @throw TableFull
     */
    Record *allocate(const HashKey& key);
    /**
     * 表を探す.新たに登録する事はない
     * @return 存在しなければ0
     *   そうでなければ内部で確保した場所へのポインタ
     *   (間違っても delete しないこと)
     */
    Record *find(const HashKey& key);
    const Record *find(const HashKey& key) const;

    size_t size() const;
    size_t capacity() const;
    int numCacheHit() const;
    int numRecordAfterFull() const;

    bool isVerbose() const;
    /** lock contention を下げるために分割した大きさ */
    int divSize() const;
  };
} // namespace container
  using container::TableFull;
  using container::GeneralSimpleHashTable;
} // namespace osl

#endif /* _GENERALSIMPLE_HASHTABLE_H_ */
// ;;; Local Variables:
// ;;; mode:c++
// ;;; c-basic-offset:2
// ;;; End: