This file is indexed.

/usr/include/osl/checkmate/libertyEstimator.h is in libosl-dev 0.8.0-1.4.

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
/* libertyEstimator.h
 */
#ifndef _LIBERTYESTIMATOR_H
#define _LIBERTYESTIMATOR_H

#include "osl/checkmate/proofNumberTable.h"

namespace osl
{
  namespace checkmate
  {
    struct PureLibertyEstimator
    {
      /** @return move 後の玉のまわりの利きのないマス(の予想) */
      template <class State>
      static void attackH(Player attacker, const State& state, 
			  King8Info info, Move move, 
			  unsigned int& proof_number, 
			  unsigned int& disproof_number)
      {
	const Player defender = alt(attacker);
	const Square king_position = state.kingSquare(defender);
	proof_number = Proof_Number_Table.countLiberty
	  (state, info.libertyCount(), move, king_position, info);
	disproof_number = 1;
      }
      /** @return move 後の玉のまわりの利きのあるマス(の予想) */
      template <class State>
      static void defenseH(Player /*attacker*/, const State&, Move /*move*/, 
			   unsigned int& proof_number, 
			   unsigned int& disproof_number)
      {
	proof_number = 1;
	disproof_number = 1;
      }

    };
    /**
     * 玉の動ける場所を基本としたHの推定.
     * 駒を取る/捨てるなども多少考慮する.
     */
    struct LibertyEstimator
    {

      /** 攻撃側の move に対する proof_number と disproof_number を予想する */
      template <class State>
      static void attackH(Player attacker, const State&, King8Info, Move move, 
			  unsigned int& proof_number, unsigned int& disproof_number);
      /** 防御側の move に対する proof_number と disproof_number を予想する */
      template <class State>
      static void defenseH(Player attacker, const State&, Move move, 
			   unsigned int& proof_number, unsigned int& disproof_number);
    };

  } // namespace checkmate
} // namespace osl


template<typename State>
void osl::checkmate::LibertyEstimator::
attackH(Player attacker, const State& state, King8Info info, Move move, 
	unsigned int& proof_number, unsigned int& disproof_number)
{
  const Player defender = alt(attacker);
  PureLibertyEstimator::attackH
    (attacker, state, info, move, proof_number, disproof_number);

  // 功罪はあるが,速くなる問題の方が多そう
  if (state.hasMultipleEffectAt(defender, move.to()))
    ++proof_number;

  const Square from=move.from();
  const Square to=move.to();
  const int attack_support = state.countEffect(attacker,to);
  const int defense_support = state.countEffect(defender,to);
  if ((attack_support + (from.isPieceStand() ? 1 : 0)) > defense_support)
  {
    /** 効きが上回っていれば先にやってみる */
    disproof_number=2;
  }
  else if (move.capturePtype()!=PTYPE_EMPTY)
  {
    /** 駒を取る */
    Ptype capturePtype=unpromote(move.capturePtype());
    if ((capturePtype == SILVER)
	|| (capturePtype == GOLD))
    {
      disproof_number=2;
    }
    else
    {
      proof_number+=1;
      disproof_number=1;
    }
  }
  else
  {
    proof_number+=1;
    disproof_number=1;
  }
}

template<typename State>
void osl::checkmate::LibertyEstimator::
defenseH(Player attacker, const State& state, Move move, 
		 unsigned int& proof_number, unsigned int& disproof_number)
{
  /** captureは価値が高い */
  if (move.capturePtype()!=PTYPE_EMPTY)
  {
    proof_number=2;
    disproof_number=1;
    return;
  }
  if (move.ptype()==KING)
  {
    proof_number=1;
    disproof_number=1;
    return;
  }
  const Square to = move.to();
  if ((state.countEffect(attacker,to) + (move.isDrop() ? 1 : 0))
      <= state.countEffect(alt(attacker),to))
  {
    proof_number=2;
    disproof_number=1;
    return;
  }
  proof_number=1;
  disproof_number = 2;
}

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