board.js
author Oleksandr Gavenko <gavenkoa@gmail.com>
Sat, 06 Sep 2014 22:57:36 +0300
changeset 6 eb31d2025a1d
child 9 961eff57a23f
permissions -rw-r--r--
Initial implementation of board back-ends.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     1
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     2
////////////////////////////////////////////////////////////////
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     3
// Board as linear array.
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     4
////////////////////////////////////////////////////////////////
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     5
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     6
/* Create board on linear array.
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     7
 * Extract data from 'brd' (which is 2d array) if present. */
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     8
function BoardArr(brd) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     9
    this.brd = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    10
    if (brd) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    11
        for (var i = 0; i < 4; i++)
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    12
            for (var j = 0; j < 4; j++)
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    13
                this.brd[4*i + j] = brd[i][j];
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    14
    }
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    15
}
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    16
/* Doesn't designed to be efficient. */
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    17
BoardArr.prototype.get = function(i, j) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    18
    return this.brd[4*i + j];
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    19
}
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    20
/* Doesn't designed to be efficient. */
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    21
BoardArr.prototype.set = function(i, j, val) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    22
    this.brd[4*i + j] = val;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    23
}
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    24
/* Return and optionally fill 2d board.
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    25
 * Doesn't designed to be efficient. */
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    26
BoardArr.prototype.exportTo = function(brd) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    27
    brd = brd || [[],[],[],[]];
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    28
    for (var i = 0; i < 4; i++)
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    29
        for (var j = 0; j < 4; j++)
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    30
            brd[i][j] = this.brd[4*i + j];
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    31
    return brd;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    32
}
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    33
BoardArr.prototype.copy = function(brd) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    34
    brd = brd || new BoardArr();
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    35
    for (var i = 0; i < 16; i++)
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    36
        brd.brd[i] = this.brd[i];
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    37
    return brd;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    38
}
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    39
BoardArr.prototype.show = function(fn) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    40
BoardArr.prototype.shiftLeft = function(brd) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    41
}
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    42
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    43

eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    44
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    45
////////////////////////////////////////////////////////////////
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    46
// Board as 2d array.
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    47
////////////////////////////////////////////////////////////////
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    48
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    49
/* Create board on 2d array.
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    50
 * Extract data from brd (which is 2d array) if present. */
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    51
function BoardArr2d(brd) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    52
    this.brd = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]];
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    53
    if (brd) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    54
        for (var i = 0; i < 4; i++)
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    55
            for (var j = 0; j < 4; j++)
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    56
                this.brd[i][j] = brd[i][j];
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    57
    }
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    58
}
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    59
BoardArr.prototype.get = function(i, j) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    60
    return this.brd[i][j];
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    61
}
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    62
BoardArr.prototype.set = function(i, j, val) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    63
    this.brd[i][j] = val;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    64
}
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    65
/* Return and optionally fill 2d board. */
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    66
BoardArr.prototype.exportTo = function(brd) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    67
    brd = brd || [[],[],[],[]];
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    68
    for (var i = 0; i < 4; i++)
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    69
        for (var j = 0; j < 4; j++)
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    70
            brd[i][j] = this.brd[i][j];
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    71
    return brd;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    72
}
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    73
BoardArr2d.prototype.copy = function(brd) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    74
    brd = brd || new BoardArr2d();
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    75
    for (var i = 0; i < 4; i++)
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    76
        for (var j = 0; j < 4; j++)
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    77
            brd.brd[i][j] = this.brd[i][j];
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    78
    return brd;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    79
}
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    80
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    81
BoardArr2d.prototype.shiftLeft_unrolled = function(brd) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    82
    var from = this.brd, to = brd.brd;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    83
    for (var i = 3; i >= 0; i--) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    84
        var f0 = from[i][0], f1 = from[i][1], f2 = from[i][2], f3 = from[i][3];
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    85
        if (f3 === 0) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    86
            to[i][0] = 0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    87
            if (f2 === 0) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    88
                to[i][1] = 0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    89
                if (f1 === 0) {      // a 0 0 0
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    90
                    to[i][2] = 0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    91
                    to[i][3] = f0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    92
                } else {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    93
                    if (f0 === f1) {   // a a 0 0
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    94
                        to[i][2] = 0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    95
                        to[i][3] = f0 + 1;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    96
                    } else {           // a b 0 0
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    97
                        to[i][2] = f0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    98
                        to[i][3] = f1;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    99
                    }
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   100
                }
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   101
            } else {               // f2 !== 0
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   102
                if (f1 === 0) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   103
                    to[i][1] = 0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   104
                    if (f0 === f2) {   // a 0 a 0
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   105
                        to[i][3] = f2 + 1;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   106
                        to[i][2] = 0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   107
                    } else {           // a 0 b 0
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   108
                        to[i][3] = f2;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   109
                        to[i][2] = f0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   110
                    }
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   111
                } else {             // f1 !== 0
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   112
                    if (f1 === f2) {   // a b b 0
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   113
                        to[i][3] = f2 + 1;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   114
                        to[i][2] = f0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   115
                        to[i][1] = 0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   116
                    } else {           // f1 !== f2
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   117
                        to[i][3] = f2;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   118
                        if (f0 === f1) { // a a b 0
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   119
                            to[i][2] = f1 + 1;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   120
                            to[i][1] = 0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   121
                        } else {         // a b c 0
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   122
                            to[i][2] = f1;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   123
                            to[i][1] = f0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   124
                        }
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   125
                    }
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   126
                }
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   127
            }
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   128
        } else {                 // f3 !== 0
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   129
            if (f2 === f3) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   130
                to[i][3] = f2 + 1;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   131
                to[i][0] = 0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   132
                if (f1 === 0) { // a 0 b b
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   133
                    to[i][2] = f0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   134
                    to[i][1] = 0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   135
                } else {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   136
                    if (f0 === f1) { // a a b b
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   137
                        to[i][2] = f1 + 1;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   138
                        to[i][1] = 0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   139
                    } else { // a b c c
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   140
                        to[i][2] = f1;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   141
                        to[i][1] = f0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   142
                    }
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   143
                }
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   144
            } else { // f2 !== f3
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   145
                to[i][3] = f3;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   146
                if (f2 === 0) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   147
                    to[i][0] = 0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   148
                    if (f1 === 0) { // a 0 0 b
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   149
                        to[i][1] = 0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   150
                        to[i][2] = f0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   151
                    } else {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   152
                        if (f0 === f1) { // a a 0 b
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   153
                            to[i][1] = 0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   154
                            to[i][2] = f1 + 1;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   155
                        } else { // a b 0 c
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   156
                            to[i][1] = f0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   157
                            to[i][2] = f1;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   158
                        }
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   159
                    }
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   160
                } else { // f2 !== 0 && f2 !== f3
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   161
                    if (f1 === 0) { // a 0 b c
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   162
                        to[i][0] = 0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   163
                        to[i][1] = f0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   164
                        to[i][2] = f2;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   165
                    } else {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   166
                        if (f0 === f1) { // a a b c
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   167
                            to[i][0] = 0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   168
                            to[i][1] = f1 + 1;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   169
                            to[i][2] = f2;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   170
                        } else { // a b c d
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   171
                            to[i][0] = f0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   172
                            to[i][1] = f1;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   173
                            to[i][2] = f2;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   174
                        }
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   175
                    }
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   176
                }
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   177
            }
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   178
        }
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   179
    }
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   180
}
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   181
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   182
BoardArr2d.prototype.shiftLeft_mostly_unrolled = function(brd) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   183
    var from = this.brd, to = brd.brd;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   184
    for (var i = 3; i >= 0; i--) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   185
        var f0 = from[i][0], f1 = from[i][1], f2 = from[i][2], f3 = from[i][3];
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   186
        if (f3 === 0) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   187
            if (f2 === 0) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   188
                if (f1 === 0) { // a 0 0 0
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   189
                    f3 = f0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   190
                    f2 = 0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   191
                } else {  // a b 0 0
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   192
                    f3 = f1;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   193
                    f2 = f0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   194
                }
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   195
                f1 = 0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   196
            } else { // f2 !== 0 && f3 === 0
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   197
                if (f1 === 0) { // a 0 b 0
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   198
                    f3 = f2;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   199
                    f2 = f0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   200
                } else { // a b c 0
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   201
                    f3 = f2;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   202
                    f2 = f1;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   203
                    f1 = f0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   204
                }
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   205
            }
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   206
            f0 = 0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   207
        } else { // f3 !== 0
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   208
            if (f2 === 0) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   209
                if (f1 === 0) { // a 0 0 b
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   210
                    f2 = f0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   211
                } else {  // a b 0 c
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   212
                    f2 = f1;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   213
                    f1 = f0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   214
                }
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   215
                f0 = 0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   216
            } else { // f2 !== 0 && f3 !== 0
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   217
                if (f1 === 0) { // a 0 b c
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   218
                    f1 = f0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   219
                    f0 = 0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   220
                } // else: a b c d
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   221
            }
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   222
        }
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   223
        if (f2 === 0) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   224
            to[i][0] = 0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   225
            to[i][1] = 0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   226
            to[i][2] = 0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   227
            to[i][3] = f3;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   228
            continue;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   229
        }
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   230
        if (f1 === 0) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   231
            to[i][0] = 0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   232
            to[i][1] = 0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   233
            if (f2 === f3) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   234
                to[i][2] = 0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   235
                to[i][3] = f3 + 1;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   236
            } else {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   237
                to[i][2] = f2;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   238
                to[i][3] = f3;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   239
            }
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   240
            continue;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   241
        }
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   242
        if (f2 === f3) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   243
            to[i][0] = 0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   244
            to[i][3] = f3 + 1;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   245
            if (f0 === f1) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   246
                to[i][1] = 0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   247
                to[i][2] = f1 + 1;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   248
            } else {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   249
                to[i][1] = f0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   250
                to[i][2] = f1;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   251
            }
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   252
        } else {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   253
            to[i][3] = f3;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   254
            if (f1 === f2) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   255
                to[i][0] = 0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   256
                to[i][1] = f0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   257
                to[i][2] = f2 + 1;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   258
            } else {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   259
                to[i][0] = f0;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   260
                to[i][1] = f1;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   261
                to[i][2] = f2;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   262
            }
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   263
        }
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   264
    }
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   265
}
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   266
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   267

eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   268
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   269
////////////////////////////////////////////////////////////////
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   270
// Board as properties.
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   271
////////////////////////////////////////////////////////////////
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   272
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   273
/* Create board as properties of object.
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   274
 * Extract data from 'brd' (which is 2d array) if present. */
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   275
function BoardObj(brd) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   276
    if (brd)
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   277
        this.brd = { aa: brd[0][0], ab: brd[0][1], ac: brd[0][2], ad: brd[0][3],
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   278
                     ba: brd[1][0], bb: brd[1][1], bc: brd[1][2], bd: brd[1][3],
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   279
                     ca: brd[2][0], cb: brd[2][1], cc: brd[2][2], cd: brd[2][3],
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   280
                     da: brd[3][0], db: brd[3][1], dc: brd[3][2], dd: brd[3][3] };
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   281
    else
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   282
        this.brd = { aa: 0, ab: 0, ac: 0, ad: 0,
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   283
                     ba: 0, bb: 0, bc: 0, bd: 0,
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   284
                     ca: 0, cb: 0, cc: 0, cd: 0,
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   285
                     da: 0, db: 0, dc: 0, dd: 0 };
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   286
}
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   287
BoardObj.arrMap = [["aa", "ab", "ac", "ad"], ["ba", "bb", "bc", "bd"], ["ca", "cb", "cc", "cd"], ["da", "db", "dc", "dd"]];
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   288
/* Doesn't designed to be efficient. */
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   289
BoardObj.prototype.get = function(i, j) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   290
    return this.brd[BoardObj.arrMap[i][j]];
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   291
}
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   292
/* Doesn't designed to be efficient. */
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   293
BoardObj.prototype.set = function(i, j, val) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   294
    this.brd[BoardObj.arrMap[i][j]] = val;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   295
}
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   296
/* Return and optionally fill 2d board.
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   297
 * Doesn't designed to be efficient. */
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   298
BoardObj.prototype.exportTo = function(brd) {
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   299
    brd = brd || [[],[],[],[]];
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   300
    for (var i = 0; i < 4; i++)
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   301
        for (var j = 0; j < 4; j++)
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   302
            brd[i][j] = this.brd[4*i + j];
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   303
    return brd;
eb31d2025a1d Initial implementation of board back-ends.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   304
}