/usr/include/osl/rating/group/escape.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 | /* escape.h
*/
#ifndef GROUP_ESCAPE_H
#define GROUP_ESCAPE_H
#include "osl/rating/group.h"
#include "osl/rating/feature/escape.h"
namespace osl
{
namespace rating
{
struct FromEffectGroup : public Group
{
FromEffectGroup();
void show(std::ostream& os, int name_width, const range_t& range,
const std::vector<double>& weights) const
{
showTopN(os, name_width, range, weights, 3);
}
int findMatch(const NumEffectState& state, Move move, const RatingEnv& env) const
{
if (move.isDrop())
return -1;
const int index = CountEffect2::index(state, move.from(), env);
const int progress8 = env.progress.value()/2;
return index*8 + progress8;
}
bool effectiveInCheck() const { return true; }
};
struct PtypeAttackedGroup : public Group
{
PtypeAttackedGroup();
void show(std::ostream& os, int name_width, const range_t& range,
const std::vector<double>& weights) const
{
showTopN(os, name_width, range, weights, 3);
}
int findMatch(const NumEffectState& state, Move move, const RatingEnv& env) const
{
if (move.isDrop())
return -1;
const int progress8 = env.progress.value()/2;
const Ptype self = move.oldPtype();
const Ptype attack = state.findCheapAttack(alt(move.player()), move.from()).ptype();
const int index = (self-PTYPE_PIECE_MIN)*(PTYPE_MAX+1-PTYPE_MIN)+attack;
return index*8 + progress8;
}
bool effectiveInCheck() const { return true; }
};
struct ToSupportedGroup : public Group
{
ToSupportedGroup() : Group("ToSupported")
{
for (int p=0; p<8; ++p) // progress8
push_back(new ToSupported());
}
void show(std::ostream& os, int name_width, const range_t& range,
const std::vector<double>& weights) const
{
showAll(os, name_width, range, weights);
}
int findMatch(const NumEffectState& state, Move move, const RatingEnv& env) const
{
if (! (*this)[0].match(state, move, env))
return -1;
const int progress8 = env.progress.value()/2;
return progress8;
}
bool effectiveInCheck() const { return true; }
};
struct ImmediateEscapeGroup : public Group
{
ImmediateEscapeGroup();
void show(std::ostream& os, int name_width, const range_t& range,
const std::vector<double>& weights) const
{
showTopN(os, name_width, range, weights, 3);
}
int findMatchWithoutProgress(const NumEffectState& state, Move move, const RatingEnv& env) const
{
if (move.isDrop())
return -1;
const Move last_move = env.history.lastMove();
if (! last_move.isNormal()
|| ! state.hasEffectIf(last_move.ptypeO(), last_move.to(), move.from()))
return -1;
return (move.ptype() - PTYPE_PIECE_MIN) * (PTYPE_MAX+1 - PTYPE_PIECE_MIN)
+ last_move.ptype() - PTYPE_PIECE_MIN;
}
int findMatch(const NumEffectState& state, Move move, const RatingEnv& env) const
{
const int index = findMatchWithoutProgress(state, move, env);
if (index < 0)
return index;
const int progress8 = env.progress.value()/2;
return index*8 + progress8;
}
};
class KingEscapeGroup : public Group
{
public:
KingEscapeGroup();
void show(std::ostream& os, int name_width, const range_t& range,
const std::vector<double>& weights) const
{
showAll(os, name_width, range, weights);
}
int findMatch(const NumEffectState& state, Move move, const RatingEnv& env) const
{
if (! state.inCheck())
return -1;
const Ptype self = move.ptype();
const int index = self-PTYPE_PIECE_MIN;
assert((*this)[index].match(state, move, env));
return index;
}
bool effectiveInCheck() const { return true; }
};
}
}
#endif /* GROUP_ESCAPE_H */
// ;;; Local Variables:
// ;;; mode:c++
// ;;; c-basic-offset:2
// ;;; End:
|