/* [<][>][^][v][top][bottom][index][help] */
DEFINITIONS
This source file includes following definitions.
- pv_is_ok
- pv_copy
- pv_cat
- pv_to_string
// pv.cpp
// includes
#include <cstring>
#include "board.h"
#include "move.h"
#include "move_do.h"
#include "pv.h"
#include "util.h"
// functions
// pv_is_ok()
bool pv_is_ok(const mv_t pv[]) {
int pos;
int move;
if (pv == NULL) return false;
for (pos = 0; true; pos++) {
if (pos >= 256) return false;
move = pv[pos];
if (move == MoveNone) return true;
if (!move_is_ok(move)) return false;
}
return true;
}
// pv_copy()
void pv_copy(mv_t dst[], const mv_t src[]) {
ASSERT(pv_is_ok(src));
ASSERT(dst!=NULL);
while ((*dst++ = *src++) != MoveNone)
;
}
// pv_cat()
void pv_cat(mv_t dst[], const mv_t src[], int move) {
ASSERT(pv_is_ok(src));
ASSERT(dst!=NULL);
*dst++ = move;
while ((*dst++ = *src++) != MoveNone)
;
}
// pv_to_string()
bool pv_to_string(const mv_t pv[], char string[], int size) {
int pos;
int move;
ASSERT(pv_is_ok(pv));
ASSERT(string!=NULL);
ASSERT(size>=512);
// init
if (size < 512) return false;
pos = 0;
// loop
while ((move = *pv++) != MoveNone) {
if (pos != 0) string[pos++] = ' ';
move_to_string(move,&string[pos],size-pos);
pos += strlen(&string[pos]);
}
string[pos] = '\0';
return true;
}
// end of pv.cpp