Add forgotten files 1.4.70b
[polyglot.git] / list.c
diff --git a/list.c b/list.c
index 4c2b08f..809efac 100644 (file)
--- a/list.c
+++ b/list.c
-\r
-// list.c\r
-\r
-// includes\r
-\r
-#include "board.h"\r
-#include "list.h"\r
-#include "move.h"\r
-#include "util.h"\r
-\r
-// functions\r
-\r
-// list_is_ok()\r
-\r
-bool list_is_ok(const list_t * list) {\r
-\r
-   if (list == NULL) return FALSE;\r
-\r
-   if (list->size >= ListSize) return FALSE;\r
-\r
-   return TRUE;\r
-}\r
-\r
-// list_clear()\r
-\r
-void list_clear(list_t * list) {\r
-\r
-   ASSERT(list!=NULL);\r
-\r
-   list->size = 0;\r
-}\r
-\r
-// list_add\r
-\r
-void list_add(list_t * list, int move){\r
-    list_add_ex(list, move, 0);\r
-}\r
-\r
-// list_add_ex()\r
-\r
-void list_add_ex(list_t * list, int move, int value) {\r
-\r
-   ASSERT(list_is_ok(list));\r
-   ASSERT(move_is_ok(move));\r
-   ASSERT(value>=-32767&&value<=+32767);\r
-\r
-   ASSERT(list->size<ListSize-1);\r
-\r
-   list->move[list->size] = move;\r
-   list->value[list->size] = value;\r
-   list->size++;\r
-}\r
-\r
-// list_remove()\r
-\r
-void list_remove(list_t * list, int index) {\r
-\r
-   int i;\r
-\r
-   ASSERT(list_is_ok(list));\r
-   ASSERT(index>=0&&index<list->size);\r
-\r
-   for (i = index; i < list->size-1; i++) {\r
-      list->move[i] = list->move[i+1];\r
-      list->value[i] = list->value[i+1];\r
-   }\r
-\r
-   list->size--;\r
-}\r
-\r
-// list_is_empty()\r
-\r
-bool list_is_empty(const list_t * list) {\r
-\r
-   ASSERT(list_is_ok(list));\r
-\r
-   return list->size == 0;\r
-}\r
-\r
-// list_size()\r
-\r
-int list_size(const list_t * list) {\r
-\r
-   ASSERT(list_is_ok(list));\r
-\r
-   return list->size;\r
-}\r
-\r
-// list_move()\r
-\r
-int list_move(const list_t * list, int index) {\r
-\r
-   ASSERT(list_is_ok(list));\r
-   ASSERT(index>=0&&index<list->size);\r
-\r
-   return list->move[index];\r
-}\r
-\r
-// list_value()\r
-\r
-int list_value(const list_t * list, int index) {\r
-\r
-   ASSERT(list_is_ok(list));\r
-   ASSERT(index>=0&&index<list->size);\r
-\r
-   return list->value[index];\r
-}\r
-\r
-// list_copy()\r
-\r
-void list_copy(list_t * dst, const list_t * src) {\r
-\r
-   int i;\r
-\r
-   ASSERT(dst!=NULL);\r
-   ASSERT(list_is_ok(src));\r
-\r
-   dst->size = src->size;\r
-\r
-   for (i = 0; i < src->size; i++) {\r
-      dst->move[i] = src->move[i];\r
-      dst->value[i] = src->value[i];\r
-   }\r
-}\r
-\r
-// list_move_to_front()\r
-\r
-void list_move_to_front(list_t * list, int index) {\r
-\r
-   int i;\r
-   int move, value;\r
-\r
-   ASSERT(list_is_ok(list));\r
-   ASSERT(index>=0&&index<list->size);\r
-\r
-   if (index != 0) {\r
-\r
-      move = list->move[index];\r
-      value = list->value[index];\r
-\r
-      for (i = index; i > 0; i--) {\r
-         list->move[i] = list->move[i-1];\r
-         list->value[i] = list->value[i-1];\r
-      }\r
-\r
-      list->move[0] = move;\r
-      list->value[0] = value;\r
-   }\r
-}\r
-\r
-// list_note()\r
-\r
-void list_note(list_t * list) {\r
-\r
-   int i, move;\r
-\r
-   ASSERT(list_is_ok(list));\r
-\r
-   for (i = 0; i < list->size; i++) {\r
-      move = list->move[i];\r
-      ASSERT(move_is_ok(move));\r
-      list->value[i] = -move_order(move);\r
-   }\r
-}\r
-\r
-// list_sort()\r
-\r
-void list_sort(list_t * list) {\r
-\r
-   int i, j;\r
-   int best_index, best_move, best_value;\r
-\r
-   ASSERT(list_is_ok(list));\r
-\r
-   for (i = 0; i < list->size-1; i++) {\r
-\r
-      best_index = i;\r
-      best_value = list->value[i];\r
-\r
-      for (j = i+1; j < list->size; j++) {\r
-         if (list->value[j] > best_value) {\r
-            best_index = j;\r
-            best_value = list->value[j];\r
-         }\r
-      }\r
-\r
-      if (best_index != i) {\r
-\r
-         best_move = list->move[best_index];\r
-         ASSERT(best_value==list->value[best_index]);\r
-\r
-         for (j = best_index; j > i; j--) {\r
-            list->move[j] = list->move[j-1];\r
-            list->value[j] = list->value[j-1];\r
-         }\r
-\r
-         list->move[i] = best_move;\r
-         list->value[i] = best_value;\r
-      }\r
-   }\r
-\r
-   if (DEBUG) {\r
-      for (i = 0; i < list->size-1; i++) {\r
-         ASSERT(list->value[i]>=list->value[i+1]);\r
-      }\r
-   }\r
-}\r
-\r
-// list_contain()\r
-\r
-bool list_contain(const list_t * list, int move) {\r
-\r
-   int i;\r
-\r
-   ASSERT(list_is_ok(list));\r
-   ASSERT(move_is_ok(move));\r
-\r
-   for (i = 0; i < list->size; i++) {\r
-      if (list->move[i] == move) return TRUE;\r
-   }\r
-\r
-   return FALSE;\r
-}\r
-\r
-// list_equal()\r
-\r
-bool list_equal(list_t * list_1, list_t * list_2) {\r
-\r
-   list_t copy_1[1], copy_2[1];\r
-   int i;\r
-\r
-   ASSERT(list_is_ok(list_1));\r
-   ASSERT(list_is_ok(list_2));\r
-\r
-   if (list_1->size != list_2->size) return FALSE;\r
-\r
-   list_copy(copy_1,list_1);\r
-   list_note(copy_1);\r
-   list_sort(copy_1);\r
-\r
-   list_copy(copy_2,list_2);\r
-   list_note(copy_2);\r
-   list_sort(copy_2);\r
-\r
-   for (i = 0; i < copy_1->size; i++) {\r
-      if (copy_1->move[i] != copy_2->move[i]) return FALSE;\r
-   }\r
-\r
-   return TRUE;\r
-}\r
-\r
-// list_disp()\r
-\r
-void list_disp(const list_t * list, const board_t * board) {\r
-\r
-   int i, move, value;\r
-   char string[256];\r
-\r
-   ASSERT(list_is_ok(list));\r
-   ASSERT(board_is_ok(board));\r
-\r
-   for (i = 0; i < list->size; i++) {\r
-\r
-      move = list->move[i];\r
-      value = list->value[i];\r
-\r
-      if (!move_to_can(move,board,string,256)) ASSERT(FALSE);\r
-      my_log("POLYGLOT %-5s %04X %+4d\n",string,move,value);\r
-   }\r
-\r
-   my_log("POLYGLOT\n");\r
-}\r
-\r
-// end of list.cpp\r
-\r
+
+// list.c
+
+// includes
+
+#include "board.h"
+#include "list.h"
+#include "move.h"
+#include "util.h"
+
+// functions
+
+// list_is_ok()
+
+bool list_is_ok(const list_t * list) {
+
+   if (list == NULL) return FALSE;
+
+   if (list->size >= ListSize) return FALSE;
+
+   return TRUE;
+}
+
+// list_clear()
+
+void list_clear(list_t * list) {
+
+   ASSERT(list!=NULL);
+
+   list->size = 0;
+}
+
+// list_add
+
+void list_add(list_t * list, int move){
+    list_add_ex(list, move, 0);
+}
+
+// list_add_ex()
+
+void list_add_ex(list_t * list, int move, int value) {
+
+   ASSERT(list_is_ok(list));
+   ASSERT(move_is_ok(move));
+   ASSERT(value>=-32767&&value<=+32767);
+
+   ASSERT(list->size<ListSize-1);
+
+   list->move[list->size] = move;
+   list->value[list->size] = value;
+   list->size++;
+}
+
+// list_remove()
+
+void list_remove(list_t * list, int index) {
+
+   int i;
+
+   ASSERT(list_is_ok(list));
+   ASSERT(index>=0&&index<list->size);
+
+   for (i = index; i < list->size-1; i++) {
+      list->move[i] = list->move[i+1];
+      list->value[i] = list->value[i+1];
+   }
+
+   list->size--;
+}
+
+// list_is_empty()
+
+bool list_is_empty(const list_t * list) {
+
+   ASSERT(list_is_ok(list));
+
+   return list->size == 0;
+}
+
+// list_size()
+
+int list_size(const list_t * list) {
+
+   ASSERT(list_is_ok(list));
+
+   return list->size;
+}
+
+// list_move()
+
+int list_move(const list_t * list, int index) {
+
+   ASSERT(list_is_ok(list));
+   ASSERT(index>=0&&index<list->size);
+
+   return list->move[index];
+}
+
+// list_value()
+
+int list_value(const list_t * list, int index) {
+
+   ASSERT(list_is_ok(list));
+   ASSERT(index>=0&&index<list->size);
+
+   return list->value[index];
+}
+
+// list_copy()
+
+void list_copy(list_t * dst, const list_t * src) {
+
+   int i;
+
+   ASSERT(dst!=NULL);
+   ASSERT(list_is_ok(src));
+
+   dst->size = src->size;
+
+   for (i = 0; i < src->size; i++) {
+      dst->move[i] = src->move[i];
+      dst->value[i] = src->value[i];
+   }
+}
+
+// list_move_to_front()
+
+void list_move_to_front(list_t * list, int index) {
+
+   int i;
+   int move, value;
+
+   ASSERT(list_is_ok(list));
+   ASSERT(index>=0&&index<list->size);
+
+   if (index != 0) {
+
+      move = list->move[index];
+      value = list->value[index];
+
+      for (i = index; i > 0; i--) {
+         list->move[i] = list->move[i-1];
+         list->value[i] = list->value[i-1];
+      }
+
+      list->move[0] = move;
+      list->value[0] = value;
+   }
+}
+
+// list_note()
+
+void list_note(list_t * list) {
+
+   int i, move;
+
+   ASSERT(list_is_ok(list));
+
+   for (i = 0; i < list->size; i++) {
+      move = list->move[i];
+      ASSERT(move_is_ok(move));
+      list->value[i] = -move_order(move);
+   }
+}
+
+// list_sort()
+
+void list_sort(list_t * list) {
+
+   int i, j;
+   int best_index, best_move, best_value;
+
+   ASSERT(list_is_ok(list));
+
+   for (i = 0; i < list->size-1; i++) {
+
+      best_index = i;
+      best_value = list->value[i];
+
+      for (j = i+1; j < list->size; j++) {
+         if (list->value[j] > best_value) {
+            best_index = j;
+            best_value = list->value[j];
+         }
+      }
+
+      if (best_index != i) {
+
+         best_move = list->move[best_index];
+         ASSERT(best_value==list->value[best_index]);
+
+         for (j = best_index; j > i; j--) {
+            list->move[j] = list->move[j-1];
+            list->value[j] = list->value[j-1];
+         }
+
+         list->move[i] = best_move;
+         list->value[i] = best_value;
+      }
+   }
+
+   if (DEBUG) {
+      for (i = 0; i < list->size-1; i++) {
+         ASSERT(list->value[i]>=list->value[i+1]);
+      }
+   }
+}
+
+// list_contain()
+
+bool list_contain(const list_t * list, int move) {
+
+   int i;
+
+   ASSERT(list_is_ok(list));
+   ASSERT(move_is_ok(move));
+
+   for (i = 0; i < list->size; i++) {
+      if (list->move[i] == move) return TRUE;
+   }
+
+   return FALSE;
+}
+
+// list_equal()
+
+bool list_equal(list_t * list_1, list_t * list_2) {
+
+   list_t copy_1[1], copy_2[1];
+   int i;
+
+   ASSERT(list_is_ok(list_1));
+   ASSERT(list_is_ok(list_2));
+
+   if (list_1->size != list_2->size) return FALSE;
+
+   list_copy(copy_1,list_1);
+   list_note(copy_1);
+   list_sort(copy_1);
+
+   list_copy(copy_2,list_2);
+   list_note(copy_2);
+   list_sort(copy_2);
+
+   for (i = 0; i < copy_1->size; i++) {
+      if (copy_1->move[i] != copy_2->move[i]) return FALSE;
+   }
+
+   return TRUE;
+}
+
+// list_disp()
+
+void list_disp(const list_t * list, const board_t * board) {
+
+   int i, move, value;
+   char string[256];
+
+   ASSERT(list_is_ok(list));
+   ASSERT(board_is_ok(board));
+
+   for (i = 0; i < list->size; i++) {
+
+      move = list->move[i];
+      value = list->value[i];
+
+      if (!move_to_can(move,board,string,256)) ASSERT(FALSE);
+      my_log("POLYGLOT %-5s %04X %+4d\n",string,move,value);
+   }
+
+   my_log("POLYGLOT\n");
+}
+
+// end of list.cpp
+