]> git.scottworley.com Git - slidingtile/blobdiff - sliding_tile_lib.cc
Board input
[slidingtile] / sliding_tile_lib.cc
index 4b422c1721da721020713f6410a93b7a5f283edf..a4d522e6745a99507612540f9664ed3ab6f9a8ee 100644 (file)
@@ -1,5 +1,7 @@
 #include "sliding_tile_lib.h"
 
+#include <istream>
+
 signed char adjacent[BOARD_SIZE][5] = {
   1,   4,   -1,  -1,  -1,
   0,   2,   5,   -1,  -1,
@@ -18,3 +20,20 @@ signed char adjacent[BOARD_SIZE][5] = {
   10,  13,  15,  -1,  -1,
   11,  14,  -1,  -1,  -1,
 };
+
+std::istream& operator>>(std::istream& is, Board& board) {
+  for (int i = 0; i < BOARD_SIZE; i++) {
+    if (!is.good()) {
+      is.setstate(std::istream::failbit);
+      break;
+    }
+    if (i > 0 && is.get() != ',') {
+      is.setstate(std::istream::failbit);
+      break;
+    }
+    int numeric;
+    is >> numeric;
+    board[i] = numeric;
+  }
+  return is;
+}