readCodewords method
Implementation
Uint8List readCodewords() {
final Uint8List result = Uint8List(_version.totalCodewords);
int resultOffset = 0;
int row = 4;
int column = 0;
final int numRows = _mappingBitMatrix.height;
final int numColumns = _mappingBitMatrix.width;
bool corner1Read = false;
bool corner2Read = false;
bool corner3Read = false;
bool corner4Read = false;
do {
if (row == numRows && column == 0 && !corner1Read) {
result[resultOffset++] = _readCorner1(numRows, numColumns);
row -= 2;
column += 2;
corner1Read = true;
} else if (row == numRows - 2 && column == 0 && (numColumns & 0x03) != 0 && !corner2Read) {
result[resultOffset++] = _readCorner2(numRows, numColumns);
row -= 2;
column += 2;
corner2Read = true;
} else if (row == numRows + 4 && column == 2 && (numColumns & 0x07) == 0 && !corner3Read) {
result[resultOffset++] = _readCorner3(numRows, numColumns);
row -= 2;
column += 2;
corner3Read = true;
} else if (row == numRows - 2 && column == 0 && (numColumns & 0x07) == 4 && !corner4Read) {
result[resultOffset++] = _readCorner4(numRows, numColumns);
row -= 2;
column += 2;
corner4Read = true;
} else {
do {
if (row < numRows && column >= 0 && !_readMappingMatrix.get(column, row)) {
result[resultOffset++] = _readUtah(row, column, numRows, numColumns);
}
row -= 2;
column += 2;
} while (row >= 0 && column < numColumns);
row += 1;
column += 3;
do {
if (row >= 0 && column < numColumns && !_readMappingMatrix.get(column, row)) {
result[resultOffset++] = _readUtah(row, column, numRows, numColumns);
}
row += 2;
column -= 2;
} while (row < numRows && column >= 0);
row += 3;
column += 1;
}
} while (row < numRows || column < numColumns);
if (resultOffset != _version.totalCodewords) throw const UCodeDecodeException("Data Matrix codeword count mismatch");
return result;
}