6.5 局面情報の取得と登録 |
前節で局面の検索を行なえるようになりました。
本節では局面情報の取得と登録を行なえるようにします。
局面情報を取得する関数Opening_Info()は以下のようになっています。
与えられた局面から局面情報を選択し、見つかったらout_infoに格納しています。
int Opening_Info(const Opening *self, const Board *in_board, int in_color, PositionInfo *out_info) { PositionInfo *info; info = Opening_Find(self, in_board, in_color); if (!info) { return 0; } *out_info = *info; return 1; }
次に局面情報の登録関数です。
Opening_SetInfo()は以下のようになっています。
int Opening_SetInfo(Opening *self, const Board *in_board, int in_color, const PositionInfo *in_info) { PositionInfo *info; PositionData *data; info = Opening_Find(self, in_board, in_color); if (info) { *info = *in_info; } else { if (self->Num >= self->Max) { self->Max += NUM_INFO_BLOCK; data = realloc(self->Data, self->Max * sizeof(PositionData)); if (!data) { return 0; } self->Data = data; } Board_Key(in_board, in_color, &self->Data[self->Num].key); self->Data[self->Num].info = *in_info; self->Num++; } return 1; }
目的の局面情報が見つかれば、渡された情報をコピーします。
見つからなかった場合には空いている定石データ領域に登録します。
定石データ領域に空きがなければ、メモリ領域の確保を行なって定石データ領域の拡張を行います。
本節でOpeningクラスの説明は終わりです。
次節からはOpeningクラスを使用した定石の探索と、定石の登録について説明します。