This file is indexed.

/usr/include/osl/effect/liberty8Table.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
/* liberty8Table.h
 */
#ifndef _LIBERTY8TABLE_H
#define _LIBERTY8TABLE_H
#include "osl/ptype.h"
#include "osl/ptypeTable.h"
#include "osl/container/nearMask.h"
#include "osl/misc/carray.h"
#include "osl/misc/carray2d.h"
#include <iosfwd>
namespace osl
{
  namespace effect
  {
  /**
   * 8近傍のどこに長い利きを持つか.
   * 最大3近傍に利きを持つ可能性があるが,攻め方に最も近い近傍への
   * オフセットも返す
   */
  struct LongEffect8
  {
    friend std::ostream& operator<<(std::ostream& os,LongEffect8 const& longEffect); 
    /**
     * こちらの素直な実装の方が速いようだ。
     */
    char smallOffset;
    CArray<unsigned char,3> mask;
  public:
    LongEffect8():smallOffset(0){
      mask[0]=mask[1]=mask[2]=0;
    }
    Offset getOffset() const{
      return Offset::makeDirect(smallOffset);
    }
    void setOffset(Offset o){
      smallOffset=static_cast<char>(o.intValue());
    }
    unsigned int getMask(int index) const{
      return static_cast<unsigned int>(mask[index]);
    }
    void setMask(int index,unsigned int val) {
      mask[index]=static_cast<unsigned char>(val);
    }
  };
    /**
     * Liberty8を得るために使うテーブル.
     * 短い利きに関しては,ptypeと座標の差でテーブルを引けば得られる.
     * 長い利きはgetLongEffectで得るが,
     * 飛車に関してはそれに加えてgetLongEffect2も使う.
     */
  class Liberty8Table{
    CArray<CArray<unsigned char,Offset32::SIZE>,PTYPE_SIZE> shortMask;
    CArray2d<LongEffect8,PTYPE_SIZE,Offset32::SIZE> longEffect;
    CArray<LongEffect8,Offset32::SIZE> longEffect2;
    LongEffect8 longEffectOf(Ptype ptype,int dx,int dy);
  public:
    Liberty8Table();
    /**
     * P側のptypeのfromにある駒がtoにある Pの反対側の駒の周囲
     * にどういう短い利き(長い利きの隣で利きを伸ばすと8近傍内に
     * 伸ばせる場合を除く)を持つかを返す
     * directでなくても,targetの駒を挟んだ反対側ならOKとする
     * 利きがあるところは0でそうでないところは1とする
     */
     template<Player P>
    NearMask getShortMask(Ptype ptype,Square from, Square to) const{
      assert(isValid(ptype) && from.isOnBoard() && to.isOnBoard());
      Offset32 offset32=Offset32(to,from).blackOffset32<P>();
      return NearMask::makeDirect(shortMask[ptype][offset32.index()]);
    }
    /**
     * P側のptypeのfromにある駒がtoにある Pの反対側の駒の周囲
     * にどういう長い利き(長い利きの隣で利きを伸ばすと8近傍内に
     * 伸ばせる場合を含む)を持つかを返す
     */
    template<Player P>
    LongEffect8 getLongEffect(Ptype ptype,Square from, Square to) const{
      assert(isValid(ptype) && from.isOnBoard() && to.isOnBoard());
      assert(Ptype_Table.hasLongMove(ptype));
      Offset32 offset32=Offset32(to,from).blackOffset32<P>();
      return longEffect[ptype][offset32.index()];
    }
    /**
     * 飛車, 龍が王の斜めの位置にいて, 両方向に長い利きを持つ場合の
     * テーブル
     */
    template<Player P>
    LongEffect8 getLongEffect2(Square from, Square to) const{
      assert(from.isOnBoard() && to.isOnBoard());
      Offset32 offset32=Offset32(to,from).blackOffset32<P>();
      return longEffect2[offset32.index()];
    }
  };

  extern const Liberty8Table Liberty8_Table;
} // namespace effect
} // namespace osl
#endif /* _LIBERTY8TABLE_H */
// ;;; Local Variables:
// ;;; mode:c++
// ;;; c-basic-offset:2
// ;;; End: