This file is indexed.

/usr/include/osl/game_playing/searchPlayer.h is in libosl-dev 0.6.0-3.1.

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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
#ifndef GAME_PLAYING_SEARCHPLAYER_H
#define GAME_PLAYING_SEARCHPLAYER_H

#include "osl/game_playing/computerPlayer.h"
#include "osl/search/searchTimer.h"
#include "osl/misc/milliSeconds.h"
#include "osl/container/moveVector.h"
#include <boost/scoped_ptr.hpp>
#include <boost/shared_ptr.hpp>

namespace osl
{
  namespace misc
  {
    class RealTime;
  }
  namespace search
  {
    class CountRecorder;
    class SimpleHashTable;
    struct TimeAssigned;
    class SearchMonitor;
  }
  namespace checkmate
  {
    class DualDfpn;
  }
  namespace game_playing
  {
    struct Config;
    bool operator==(const Config& l, const Config& r);
    struct PVHistory;
    /**
     * MtdfPlayer と AlphaBetaPlayer の共通部分
     */
    class SearchPlayer
      : public ComputerPlayer,
	public ComputerPlayerSelectBestMoveInTime
    {
    public:
      struct NtesukiThread;
      struct Config
      {
	int limit;
	size_t node_limit;
	size_t table_size;
	int table_record_limit;
	int initial_limit;
	int deepening_step;
	size_t total_checkmate_limit;
	int verbose;
	/** SearchBase::next_iteration_coefficient に設定するもの */
	double next_iteration_coefficient;
	/** 千日手に対するボーナス/ペナルティの歩の相対値. -2なら1歩損しても避ける */
	double draw_coef;
	bool save_pv;
	uint64_t node_count_hard_limit;
	/** 最善手以外も探索する幅 */
	int multi_pv_width;
	vector<boost::shared_ptr<search::SearchMonitor> > monitors;

	Config();
	friend bool operator==(const Config& l, const Config& r);
      };
    protected:
      Config config;
      boost::shared_ptr<search::SimpleHashTable> table_ptr;
      boost::shared_ptr<checkmate::DualDfpn> checkmate_ptr;
      boost::scoped_ptr<search::CountRecorder> recorder_ptr;
      volatile bool searching;
      boost::scoped_ptr<search::SearchTimer> searcher;
      /** 探索に入る前に止める */
      volatile bool plan_stop;
      const MoveVector *root_ignore_moves; // acquaintance
      bool prediction_for_speculative_search;
      boost::scoped_ptr<PVHistory> pv_history;
      int almost_resign_count;
    public:
      SearchPlayer();
      SearchPlayer(const SearchPlayer&);
      ~SearchPlayer();

      void setDepthLimit(int limit, int initial_limit, int deepening_step);
      void setNodeLimit(size_t node_limit);
      void setNodeCountHardLimit(size_t node_limit);
      void setTableLimit(size_t size, int record_limit);
      void setVerbose(int verbose=1);
      void setDrawCoef(double new_value) { config.draw_coef = new_value; }
      void setNextIterationCoefficient(double new_value);
      double nextIterationCoefficient() const 
      {
	return config.next_iteration_coefficient;
      }
      void enableSavePV(bool enable=true) { config.save_pv = enable; }
      void enableMultiPV(int width) { config.multi_pv_width = width; }
      void addMonitor(const boost::shared_ptr<search::SearchMonitor>&);

      /** 所有権移転 */
      void resetRecorder(search::CountRecorder *new_recorder);

      void pushMove(Move m);
      void popMove();

      /**
       * other の局面表と取り替える
       */
      void swapTable(SearchPlayer& other);

      const search::SimpleHashTable* table() const { return table_ptr.get(); }
      const search::CountRecorder& recorder() const { return *recorder_ptr; }

      bool stopSearchNow();
      bool canStopSearch();	// 呼出を省略されないよう念の為 const でなくした
      /**
       * searchWithSecondsForThisMove を呼び出す
       */
      const MoveWithComment selectBestMove(const GameState&, int limit, int elapsed,
                                           int byoyomi);
      const MoveWithComment selectBestMoveInTime(const GameState&, const search::TimeAssigned&);
      static const search::TimeAssigned assignTime(const GameState& state, int limit, int elapsed,
						   int byoyomi, int verbose);
      const search::TimeAssigned assignTime(const GameState& state, int limit, int elapsed,
					    int byoyomi) const;
      void saveSearchResult(const GameState&, const MoveWithComment&);
    protected:
      template <class Searcher>
      ComputerPlayer* cloneIt(const Searcher&) const;
      /** @return time consumed in milliseconds */
      const MilliSeconds::Interval setUpTable(const GameState&, int pawn_value);
      template <class Searcher>
      const MoveWithComment search(const GameState&, const search::TimeAssigned&);
      template <class Searcher>
      bool isReasonableMoveBySearch(Searcher&, Move move, int pawn_sacrifice);
      template <class Searcher>
      static int pawnValue();
      template <class Searcher>
      static int pawnValueOfTurn(Player turn);
      const search::TimeAssigned adjust(const search::TimeAssigned& org, const MilliSeconds::Interval& elapsed);
    public:
      virtual const MoveWithComment searchWithSecondsForThisMove(const GameState&, const search::TimeAssigned&)=0;
      void setRootIgnoreMoves(const MoveVector *rim, bool prediction) 
      {
	root_ignore_moves = rim; 
	prediction_for_speculative_search = prediction;
      }

      const Config& getConfig() const { return config; }

      static int secondsForThisMove(const GameState& state,
				    int limit, int elapsed, int byoyomi, int verboseness);
      int secondsForThisMove(const GameState& state, int limit, int elapsed, int byoyomi) const;

      void setTimeAssign(const search::TimeAssigned& new_assign);
      const MilliSeconds startTime() const;
    };

  } // namespace game_playing
} // namespace osl

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