4 template <typename Position
>
6 typedef typename
Position::Piece Piece
;
7 typedef typename
Piece::Color Color
;
8 typedef typename
Piece::Type Type
;
10 typedef std::map
<Type
, int> PlayerPool
;
11 typedef std::map
<Color
, PlayerPool
> Pool
;
16 PoolReference(PlayerPool
* p
, Color color
)
22 int insert(int idx
, const Piece
& p
);
28 template <typename Position
>
29 int PoolReference
<Position
>::size() {
34 for (typename
PlayerPool::iterator i
= m_p_pool
->begin(); i
!= m_p_pool
->end(); ++i
)
39 template <typename Position
>
40 int PoolReference
<Position
>::insert(int idx
, const Piece
& p
) {
41 if (m_color
!= p
.color()) {
42 ERROR("Inserting a piece in the wrong pool?");
47 for (typename
PlayerPool::iterator i
= m_p_pool
->begin();
48 (i
!= m_p_pool
->end()) && i
->first
< p
.type();
53 int nump
= ++(*m_p_pool
)[p
.type()];
57 if (idx
>= fill
+ nump
)
58 return fill
+ nump
- 1;
62 template <typename Position
>
63 typename PoolReference
<Position
>::Piece PoolReference
<Position
>::get(int idx
) {
68 for (typename
PlayerPool::iterator i
= m_p_pool
->begin(); i
!= m_p_pool
->end(); ++i
) {
69 if (idx
< fill
+ i
->second
)
70 return Piece(m_color
, i
->first
);
76 template <typename Position
>
77 typename PoolReference
<Position
>::Piece PoolReference
<Position
>::take(int idx
) {
82 for(typename
PlayerPool::iterator i
= m_p_pool
->begin(); i
!= m_p_pool
->end(); ++i
) {
83 if(idx
< fill
+ i
->second
) {
87 return Piece(m_color
, t
);
94 #endif // XCHESS__POOL_H