|  | @@ -102,15 +102,15 @@ impl Move {
 | 
											
												
													
														|  |   *
 |  |   *
 | 
											
												
													
														|  |   * Extracts every bit out of the bitboard and returns each one as a separate bitboard.
 |  |   * Extracts every bit out of the bitboard and returns each one as a separate bitboard.
 | 
											
												
													
														|  |   */
 |  |   */
 | 
											
												
													
														|  | -pub struct BitboardIterator { pub board: Bitboard }
 |  | 
 | 
											
												
													
														|  | 
 |  | +pub struct BitboardIterator (pub Bitboard);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  impl Iterator for BitboardIterator {
 |  |  impl Iterator for BitboardIterator {
 | 
											
												
													
														|  |      type Item = Bitboard;
 |  |      type Item = Bitboard;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      fn next(&mut self) -> Option<Bitboard> {
 |  |      fn next(&mut self) -> Option<Bitboard> {
 | 
											
												
													
														|  | -        if self.board != 0 {
 |  | 
 | 
											
												
													
														|  | -            let lsb = self.board & (self.board.wrapping_neg());
 |  | 
 | 
											
												
													
														|  | -            self.board ^= lsb;
 |  | 
 | 
											
												
													
														|  | 
 |  | +        if self.0 != 0 {
 | 
											
												
													
														|  | 
 |  | +            let lsb = self.0 & (self.0.wrapping_neg());
 | 
											
												
													
														|  | 
 |  | +            self.0 ^= lsb;
 | 
											
												
													
														|  |              //Some(lsb.trailing_zeros())
 |  |              //Some(lsb.trailing_zeros())
 | 
											
												
													
														|  |              Some(lsb)
 |  |              Some(lsb)
 | 
											
												
													
														|  |          } else {
 |  |          } else {
 | 
											
										
											
												
													
														|  | @@ -197,17 +197,6 @@ pub fn sort_moves(game: &Game, move_list: &mut Vec<Move>) {
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -/*
 |  | 
 | 
											
												
													
														|  | -pub fn generate_pawn_moves(game: &Game, side: Side) -> Bitboard {
 |  | 
 | 
											
												
													
														|  | -    let pushed = generate_pawn_pushes(game, side);
 |  | 
 | 
											
												
													
														|  | -    let iter = BitboardIterator { board: pushed };
 |  | 
 | 
											
												
													
														|  | -    for p in iter {
 |  | 
 | 
											
												
													
														|  | -        println!("{}", p.trailing_zeros());
 |  | 
 | 
											
												
													
														|  | -    }
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    return 0;
 |  | 
 | 
											
												
													
														|  | -}*/
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |  fn generate_pawn_pushes(game: &Game, side: Side, move_list: &mut Vec<Move>) {
 |  |  fn generate_pawn_pushes(game: &Game, side: Side, move_list: &mut Vec<Move>) {
 | 
											
												
													
														|  |      let pawns = game.pawns(side);
 |  |      let pawns = game.pawns(side);
 | 
											
												
													
														|  |      let others = game.get_all_side(!side);
 |  |      let others = game.get_all_side(!side);
 | 
											
										
											
												
													
														|  | @@ -218,7 +207,7 @@ fn generate_pawn_pushes(game: &Game, side: Side, move_list: &mut Vec<Move>) {
 | 
											
												
													
														|  |              BLACK => south_one(pawns)
 |  |              BLACK => south_one(pawns)
 | 
											
												
													
														|  |          } & !(ROW_1 | ROW_8) & !(others | pieces);
 |  |          } & !(ROW_1 | ROW_8) & !(others | pieces);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    let iter = BitboardIterator { board: moved_pawns & !others };
 |  | 
 | 
											
												
													
														|  | 
 |  | +    let iter = BitboardIterator(moved_pawns & !others);
 | 
											
												
													
														|  |      for p in iter {
 |  |      for p in iter {
 | 
											
												
													
														|  |          let origin = match side {
 |  |          let origin = match side {
 | 
											
												
													
														|  |              WHITE => south_one(p),
 |  |              WHITE => south_one(p),
 | 
											
										
											
												
													
														|  | @@ -241,7 +230,7 @@ fn generate_pawn_doublepushes(game: &Game, side: Side, move_list: &mut Vec<Move>
 | 
											
												
													
														|  |              BLACK => south_one(south_one(pawns) & !all_pieces)
 |  |              BLACK => south_one(south_one(pawns) & !all_pieces)
 | 
											
												
													
														|  |          } & !all_pieces;
 |  |          } & !all_pieces;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    let iter = BitboardIterator { board: moved_pawns & !others };
 |  | 
 | 
											
												
													
														|  | 
 |  | +    let iter = BitboardIterator(moved_pawns & !others);
 | 
											
												
													
														|  |      for p in iter {
 |  |      for p in iter {
 | 
											
												
													
														|  |          let origin = match side {
 |  |          let origin = match side {
 | 
											
												
													
														|  |              WHITE => south_one(south_one(p)),
 |  |              WHITE => south_one(south_one(p)),
 | 
											
										
											
												
													
														|  | @@ -256,7 +245,7 @@ fn generate_pawn_captures(game: &Game, side: Side, move_list: &mut Vec<Move>) {
 | 
											
												
													
														|  |      let others = game.get_all_side(!side);
 |  |      let others = game.get_all_side(!side);
 | 
											
												
													
														|  |      let promotion_mask = ROW_1 | ROW_8;
 |  |      let promotion_mask = ROW_1 | ROW_8;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    let pawn_iterator = BitboardIterator { board: pawns };
 |  | 
 | 
											
												
													
														|  | 
 |  | +    let pawn_iterator = BitboardIterator(pawns);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      for pawn in pawn_iterator {
 |  |      for pawn in pawn_iterator {
 | 
											
												
													
														|  |          let left_cap = match side {
 |  |          let left_cap = match side {
 | 
											
										
											
												
													
														|  | @@ -295,7 +284,7 @@ fn generate_promotions(game: &Game, side: Side, move_list: &mut Vec<Move>) {
 | 
											
												
													
														|  |              BLACK => south_one(pawns)
 |  |              BLACK => south_one(pawns)
 | 
											
												
													
														|  |          } & (ROW_1 | ROW_8) & !(others | pieces);
 |  |          } & (ROW_1 | ROW_8) & !(others | pieces);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    let iter = BitboardIterator { board: moved_pawns };
 |  | 
 | 
											
												
													
														|  | 
 |  | +    let iter = BitboardIterator(moved_pawns);
 | 
											
												
													
														|  |      for p in iter {
 |  |      for p in iter {
 | 
											
												
													
														|  |          let origin = match side {
 |  |          let origin = match side {
 | 
											
												
													
														|  |              WHITE => south_one(p),
 |  |              WHITE => south_one(p),
 | 
											
										
											
												
													
														|  | @@ -350,7 +339,7 @@ fn generate_knight_moves(game: &Game, side: Side, move_list: &mut Vec<Move>, cap
 | 
											
												
													
														|  |      let others = game.get_all_side(!side);
 |  |      let others = game.get_all_side(!side);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      let knights = game.knights(side);
 |  |      let knights = game.knights(side);
 | 
											
												
													
														|  | -    let knight_iter = BitboardIterator{ board: knights };
 |  | 
 | 
											
												
													
														|  | 
 |  | +    let knight_iter = BitboardIterator(knights);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      for k in knight_iter {
 |  |      for k in knight_iter {
 | 
											
												
													
														|  |          let target_mask = if captures_only {
 |  |          let target_mask = if captures_only {
 | 
											
										
											
												
													
														|  | @@ -358,7 +347,7 @@ fn generate_knight_moves(game: &Game, side: Side, move_list: &mut Vec<Move>, cap
 | 
											
												
													
														|  |          } else {
 |  |          } else {
 | 
											
												
													
														|  |              !friends
 |  |              !friends
 | 
											
												
													
														|  |          };
 |  |          };
 | 
											
												
													
														|  | -        let targets = BitboardIterator { board: get_knight_targets(square(k)) & target_mask };
 |  | 
 | 
											
												
													
														|  | 
 |  | +        let targets = BitboardIterator(get_knight_targets(square(k)) & target_mask);
 | 
											
												
													
														|  |          for target in targets {
 |  |          for target in targets {
 | 
											
												
													
														|  |              let simple_move = SimpleMove { from: square(k), to: square(target) };
 |  |              let simple_move = SimpleMove { from: square(k), to: square(target) };
 | 
											
												
													
														|  |              move_list.push(Move::Default{ mov: simple_move, piece_type: KNIGHT });
 |  |              move_list.push(Move::Default{ mov: simple_move, piece_type: KNIGHT });
 | 
											
										
											
												
													
														|  | @@ -408,13 +397,13 @@ fn generate_queen_moves(game: &Game, side: Side, move_list: &mut Vec<Move>, capt
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  fn generate_sliding_moves(friends: Bitboard, others: Bitboard, pieces: Bitboard, piece_type: PieceType,
 |  |  fn generate_sliding_moves(friends: Bitboard, others: Bitboard, pieces: Bitboard, piece_type: PieceType,
 | 
											
												
													
														|  |                            straight: bool, diagonal: bool, move_list: &mut Vec<Move>, captures_only: bool) {
 |  |                            straight: bool, diagonal: bool, move_list: &mut Vec<Move>, captures_only: bool) {
 | 
											
												
													
														|  | -    let pieces_iter = BitboardIterator { board: pieces };
 |  | 
 | 
											
												
													
														|  | 
 |  | +    let pieces_iter = BitboardIterator(pieces);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      let mask = if captures_only { others } else { !(0 as Bitboard) };
 |  |      let mask = if captures_only { others } else { !(0 as Bitboard) };
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      for piece in pieces_iter {
 |  |      for piece in pieces_iter {
 | 
											
												
													
														|  |          let destinations = generate_sliding_destinations(friends, others, piece, straight, diagonal);
 |  |          let destinations = generate_sliding_destinations(friends, others, piece, straight, diagonal);
 | 
											
												
													
														|  | -        let dest_iter = BitboardIterator { board: destinations & mask };
 |  | 
 | 
											
												
													
														|  | 
 |  | +        let dest_iter = BitboardIterator(destinations & mask);
 | 
											
												
													
														|  |          for dest in dest_iter {
 |  |          for dest in dest_iter {
 | 
											
												
													
														|  |              let smove = SimpleMove{ from: square(piece), to: square(dest) };
 |  |              let smove = SimpleMove{ from: square(piece), to: square(dest) };
 | 
											
												
													
														|  |              move_list.push(Move::Default { mov: smove, piece_type: piece_type});
 |  |              move_list.push(Move::Default { mov: smove, piece_type: piece_type});
 | 
											
										
											
												
													
														|  | @@ -487,7 +476,7 @@ fn generate_king_moves(game: &Game, side: Side, move_list: &mut Vec<Move>, captu
 | 
											
												
													
														|  |                | southeast_one(king))
 |  |                | southeast_one(king))
 | 
											
												
													
														|  |              & mask;
 |  |              & mask;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    let area_iter = BitboardIterator { board: area };
 |  | 
 | 
											
												
													
														|  | 
 |  | +    let area_iter = BitboardIterator(area);
 | 
											
												
													
														|  |      for destination in area_iter {
 |  |      for destination in area_iter {
 | 
											
												
													
														|  |          let simple_move = SimpleMove{ from: square(king), to: square(destination) };
 |  |          let simple_move = SimpleMove{ from: square(king), to: square(destination) };
 | 
											
												
													
														|  |          move_list.push(Move::Default { mov: simple_move, piece_type: KING });
 |  |          move_list.push(Move::Default { mov: simple_move, piece_type: KING });
 |