Skip to content
Open
96 changes: 51 additions & 45 deletions modules/wechat_qrcode/src/zxing/qrcode/version.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,12 @@ unsigned int Version::VERSION_DECODE_INFO[] = {
0x228BA, 0x2379F, 0x24B0B, 0x2542E, 0x26A64, 0x27541, 0x28C69};
int Version::N_VERSION_DECODE_INFOS = 34;

vector<Ref<Version> > Version::VERSIONS;
static int N_VERSIONS = Version::buildVersions();
std::vector<Ref<Version>>& Version::getVersions() {
static std::vector<Ref<Version>> versions = buildVersions();
return versions;
}

int Version::N_VERSIONS = 40;

int Version::getVersionNumber() { return versionNumber_; }

Expand Down Expand Up @@ -101,9 +105,10 @@ Version *Version::getVersionForNumber(int versionNumber, ErrorHandler &err_handl
err_handler = zxing::ReaderErrorHandler("versionNumber must be between 1 and 40");
return NULL;
}
return VERSIONS[versionNumber - 1];
return getVersions()[versionNumber - 1];
}


Version::Version(int versionNumber, vector<int> *alignmentPatternCenters, ECBlocks *ecBlocks1,
ECBlocks *ecBlocks2, ECBlocks *ecBlocks3, ECBlocks *ecBlocks4)
: versionNumber_(versionNumber),
Expand Down Expand Up @@ -294,206 +299,207 @@ Ref<BitMatrix> Version::buildFunctionPattern(ErrorHandler &err_handler) {
return functionPattern;
}

int Version::buildVersions() {
VERSIONS.push_back(Ref<Version>(new Version(
std::vector<Ref<Version>> Version::buildVersions() {
std::vector<Ref<Version>> versions;
versions.push_back(Ref<Version>(new Version(
1, intArray(0), new ECBlocks(7, new ECB(1, 19)), new ECBlocks(10, new ECB(1, 16)),
new ECBlocks(13, new ECB(1, 13)), new ECBlocks(17, new ECB(1, 9)))));
VERSIONS.push_back(Ref<Version>(new Version(
versions.push_back(Ref<Version>(new Version(
2, intArray(2, 6, 18), new ECBlocks(10, new ECB(1, 34)), new ECBlocks(16, new ECB(1, 28)),
new ECBlocks(22, new ECB(1, 22)), new ECBlocks(28, new ECB(1, 16)))));
VERSIONS.push_back(Ref<Version>(new Version(
versions.push_back(Ref<Version>(new Version(
3, intArray(2, 6, 22), new ECBlocks(15, new ECB(1, 55)), new ECBlocks(26, new ECB(1, 44)),
new ECBlocks(18, new ECB(2, 17)), new ECBlocks(22, new ECB(2, 13)))));
VERSIONS.push_back(Ref<Version>(new Version(
versions.push_back(Ref<Version>(new Version(
4, intArray(2, 6, 26), new ECBlocks(20, new ECB(1, 80)), new ECBlocks(18, new ECB(2, 32)),
new ECBlocks(26, new ECB(2, 24)), new ECBlocks(16, new ECB(4, 9)))));
VERSIONS.push_back(Ref<Version>(new Version(
versions.push_back(Ref<Version>(new Version(
5, intArray(2, 6, 30), new ECBlocks(26, new ECB(1, 108)), new ECBlocks(24, new ECB(2, 43)),
new ECBlocks(18, new ECB(2, 15), new ECB(2, 16)),
new ECBlocks(22, new ECB(2, 11), new ECB(2, 12)))));
VERSIONS.push_back(Ref<Version>(new Version(
versions.push_back(Ref<Version>(new Version(
6, intArray(2, 6, 34), new ECBlocks(18, new ECB(2, 68)), new ECBlocks(16, new ECB(4, 27)),
new ECBlocks(24, new ECB(4, 19)), new ECBlocks(28, new ECB(4, 15)))));
VERSIONS.push_back(Ref<Version>(new Version(
versions.push_back(Ref<Version>(new Version(
7, intArray(3, 6, 22, 38), new ECBlocks(20, new ECB(2, 78)),
new ECBlocks(18, new ECB(4, 31)), new ECBlocks(18, new ECB(2, 14), new ECB(4, 15)),
new ECBlocks(26, new ECB(4, 13), new ECB(1, 14)))));
VERSIONS.push_back(
versions.push_back(
Ref<Version>(new Version(8, intArray(3, 6, 24, 42), new ECBlocks(24, new ECB(2, 97)),
new ECBlocks(22, new ECB(2, 38), new ECB(2, 39)),
new ECBlocks(22, new ECB(4, 18), new ECB(2, 19)),
new ECBlocks(26, new ECB(4, 14), new ECB(2, 15)))));
VERSIONS.push_back(
versions.push_back(
Ref<Version>(new Version(9, intArray(3, 6, 26, 46), new ECBlocks(30, new ECB(2, 116)),
new ECBlocks(22, new ECB(3, 36), new ECB(2, 37)),
new ECBlocks(20, new ECB(4, 16), new ECB(4, 17)),
new ECBlocks(24, new ECB(4, 12), new ECB(4, 13)))));
VERSIONS.push_back(Ref<Version>(new Version(10, intArray(3, 6, 28, 50),
versions.push_back(Ref<Version>(new Version(10, intArray(3, 6, 28, 50),
new ECBlocks(18, new ECB(2, 68), new ECB(2, 69)),
new ECBlocks(26, new ECB(4, 43), new ECB(1, 44)),
new ECBlocks(24, new ECB(6, 19), new ECB(2, 20)),
new ECBlocks(28, new ECB(6, 15), new ECB(2, 16)))));
VERSIONS.push_back(
versions.push_back(
Ref<Version>(new Version(11, intArray(3, 6, 30, 54), new ECBlocks(20, new ECB(4, 81)),
new ECBlocks(30, new ECB(1, 50), new ECB(4, 51)),
new ECBlocks(28, new ECB(4, 22), new ECB(4, 23)),
new ECBlocks(24, new ECB(3, 12), new ECB(8, 13)))));
VERSIONS.push_back(Ref<Version>(new Version(12, intArray(3, 6, 32, 58),
versions.push_back(Ref<Version>(new Version(12, intArray(3, 6, 32, 58),
new ECBlocks(24, new ECB(2, 92), new ECB(2, 93)),
new ECBlocks(22, new ECB(6, 36), new ECB(2, 37)),
new ECBlocks(26, new ECB(4, 20), new ECB(6, 21)),
new ECBlocks(28, new ECB(7, 14), new ECB(4, 15)))));
VERSIONS.push_back(
versions.push_back(
Ref<Version>(new Version(13, intArray(3, 6, 34, 62), new ECBlocks(26, new ECB(4, 107)),
new ECBlocks(22, new ECB(8, 37), new ECB(1, 38)),
new ECBlocks(24, new ECB(8, 20), new ECB(4, 21)),
new ECBlocks(22, new ECB(12, 11), new ECB(4, 12)))));
VERSIONS.push_back(Ref<Version>(new Version(
versions.push_back(Ref<Version>(new Version(
14, intArray(4, 6, 26, 46, 66), new ECBlocks(30, new ECB(3, 115), new ECB(1, 116)),
new ECBlocks(24, new ECB(4, 40), new ECB(5, 41)),
new ECBlocks(20, new ECB(11, 16), new ECB(5, 17)),
new ECBlocks(24, new ECB(11, 12), new ECB(5, 13)))));
VERSIONS.push_back(Ref<Version>(new Version(
versions.push_back(Ref<Version>(new Version(
15, intArray(4, 6, 26, 48, 70), new ECBlocks(22, new ECB(5, 87), new ECB(1, 88)),
new ECBlocks(24, new ECB(5, 41), new ECB(5, 42)),
new ECBlocks(30, new ECB(5, 24), new ECB(7, 25)),
new ECBlocks(24, new ECB(11, 12), new ECB(7, 13)))));
VERSIONS.push_back(Ref<Version>(new Version(
versions.push_back(Ref<Version>(new Version(
16, intArray(4, 6, 26, 50, 74), new ECBlocks(24, new ECB(5, 98), new ECB(1, 99)),
new ECBlocks(28, new ECB(7, 45), new ECB(3, 46)),
new ECBlocks(24, new ECB(15, 19), new ECB(2, 20)),
new ECBlocks(30, new ECB(3, 15), new ECB(13, 16)))));
VERSIONS.push_back(Ref<Version>(new Version(
versions.push_back(Ref<Version>(new Version(
17, intArray(4, 6, 30, 54, 78), new ECBlocks(28, new ECB(1, 107), new ECB(5, 108)),
new ECBlocks(28, new ECB(10, 46), new ECB(1, 47)),
new ECBlocks(28, new ECB(1, 22), new ECB(15, 23)),
new ECBlocks(28, new ECB(2, 14), new ECB(17, 15)))));
VERSIONS.push_back(Ref<Version>(new Version(
versions.push_back(Ref<Version>(new Version(
18, intArray(4, 6, 30, 56, 82), new ECBlocks(30, new ECB(5, 120), new ECB(1, 121)),
new ECBlocks(26, new ECB(9, 43), new ECB(4, 44)),
new ECBlocks(28, new ECB(17, 22), new ECB(1, 23)),
new ECBlocks(28, new ECB(2, 14), new ECB(19, 15)))));
VERSIONS.push_back(Ref<Version>(new Version(
versions.push_back(Ref<Version>(new Version(
19, intArray(4, 6, 30, 58, 86), new ECBlocks(28, new ECB(3, 113), new ECB(4, 114)),
new ECBlocks(26, new ECB(3, 44), new ECB(11, 45)),
new ECBlocks(26, new ECB(17, 21), new ECB(4, 22)),
new ECBlocks(26, new ECB(9, 13), new ECB(16, 14)))));
VERSIONS.push_back(Ref<Version>(new Version(
versions.push_back(Ref<Version>(new Version(
20, intArray(4, 6, 34, 62, 90), new ECBlocks(28, new ECB(3, 107), new ECB(5, 108)),
new ECBlocks(26, new ECB(3, 41), new ECB(13, 42)),
new ECBlocks(30, new ECB(15, 24), new ECB(5, 25)),
new ECBlocks(28, new ECB(15, 15), new ECB(10, 16)))));
VERSIONS.push_back(Ref<Version>(new Version(
versions.push_back(Ref<Version>(new Version(
21, intArray(5, 6, 28, 50, 72, 94), new ECBlocks(28, new ECB(4, 116), new ECB(4, 117)),
new ECBlocks(26, new ECB(17, 42)), new ECBlocks(28, new ECB(17, 22), new ECB(6, 23)),
new ECBlocks(30, new ECB(19, 16), new ECB(6, 17)))));
VERSIONS.push_back(Ref<Version>(new Version(
versions.push_back(Ref<Version>(new Version(
22, intArray(5, 6, 26, 50, 74, 98), new ECBlocks(28, new ECB(2, 111), new ECB(7, 112)),
new ECBlocks(28, new ECB(17, 46)), new ECBlocks(30, new ECB(7, 24), new ECB(16, 25)),
new ECBlocks(24, new ECB(34, 13)))));
VERSIONS.push_back(Ref<Version>(new Version(
versions.push_back(Ref<Version>(new Version(
23, intArray(5, 6, 30, 54, 78, 102), new ECBlocks(30, new ECB(4, 121), new ECB(5, 122)),
new ECBlocks(28, new ECB(4, 47), new ECB(14, 48)),
new ECBlocks(30, new ECB(11, 24), new ECB(14, 25)),
new ECBlocks(30, new ECB(16, 15), new ECB(14, 16)))));
VERSIONS.push_back(Ref<Version>(new Version(
versions.push_back(Ref<Version>(new Version(
24, intArray(5, 6, 28, 54, 80, 106), new ECBlocks(30, new ECB(6, 117), new ECB(4, 118)),
new ECBlocks(28, new ECB(6, 45), new ECB(14, 46)),
new ECBlocks(30, new ECB(11, 24), new ECB(16, 25)),
new ECBlocks(30, new ECB(30, 16), new ECB(2, 17)))));
VERSIONS.push_back(Ref<Version>(new Version(
versions.push_back(Ref<Version>(new Version(
25, intArray(5, 6, 32, 58, 84, 110), new ECBlocks(26, new ECB(8, 106), new ECB(4, 107)),
new ECBlocks(28, new ECB(8, 47), new ECB(13, 48)),
new ECBlocks(30, new ECB(7, 24), new ECB(22, 25)),
new ECBlocks(30, new ECB(22, 15), new ECB(13, 16)))));
VERSIONS.push_back(Ref<Version>(new Version(
versions.push_back(Ref<Version>(new Version(
26, intArray(5, 6, 30, 58, 86, 114), new ECBlocks(28, new ECB(10, 114), new ECB(2, 115)),
new ECBlocks(28, new ECB(19, 46), new ECB(4, 47)),
new ECBlocks(28, new ECB(28, 22), new ECB(6, 23)),
new ECBlocks(30, new ECB(33, 16), new ECB(4, 17)))));
VERSIONS.push_back(Ref<Version>(new Version(
versions.push_back(Ref<Version>(new Version(
27, intArray(5, 6, 34, 62, 90, 118), new ECBlocks(30, new ECB(8, 122), new ECB(4, 123)),
new ECBlocks(28, new ECB(22, 45), new ECB(3, 46)),
new ECBlocks(30, new ECB(8, 23), new ECB(26, 24)),
new ECBlocks(30, new ECB(12, 15), new ECB(28, 16)))));
VERSIONS.push_back(
versions.push_back(
Ref<Version>(new Version(28, intArray(6, 6, 26, 50, 74, 98, 122),
new ECBlocks(30, new ECB(3, 117), new ECB(10, 118)),
new ECBlocks(28, new ECB(3, 45), new ECB(23, 46)),
new ECBlocks(30, new ECB(4, 24), new ECB(31, 25)),
new ECBlocks(30, new ECB(11, 15), new ECB(31, 16)))));
VERSIONS.push_back(
versions.push_back(
Ref<Version>(new Version(29, intArray(6, 6, 30, 54, 78, 102, 126),
new ECBlocks(30, new ECB(7, 116), new ECB(7, 117)),
new ECBlocks(28, new ECB(21, 45), new ECB(7, 46)),
new ECBlocks(30, new ECB(1, 23), new ECB(37, 24)),
new ECBlocks(30, new ECB(19, 15), new ECB(26, 16)))));
VERSIONS.push_back(
versions.push_back(
Ref<Version>(new Version(30, intArray(6, 6, 26, 52, 78, 104, 130),
new ECBlocks(30, new ECB(5, 115), new ECB(10, 116)),
new ECBlocks(28, new ECB(19, 47), new ECB(10, 48)),
new ECBlocks(30, new ECB(15, 24), new ECB(25, 25)),
new ECBlocks(30, new ECB(23, 15), new ECB(25, 16)))));
VERSIONS.push_back(
versions.push_back(
Ref<Version>(new Version(31, intArray(6, 6, 30, 56, 82, 108, 134),
new ECBlocks(30, new ECB(13, 115), new ECB(3, 116)),
new ECBlocks(28, new ECB(2, 46), new ECB(29, 47)),
new ECBlocks(30, new ECB(42, 24), new ECB(1, 25)),
new ECBlocks(30, new ECB(23, 15), new ECB(28, 16)))));
VERSIONS.push_back(Ref<Version>(
versions.push_back(Ref<Version>(
new Version(32, intArray(6, 6, 34, 60, 86, 112, 138), new ECBlocks(30, new ECB(17, 115)),
new ECBlocks(28, new ECB(10, 46), new ECB(23, 47)),
new ECBlocks(30, new ECB(10, 24), new ECB(35, 25)),
new ECBlocks(30, new ECB(19, 15), new ECB(35, 16)))));
VERSIONS.push_back(
versions.push_back(
Ref<Version>(new Version(33, intArray(6, 6, 30, 58, 86, 114, 142),
new ECBlocks(30, new ECB(17, 115), new ECB(1, 116)),
new ECBlocks(28, new ECB(14, 46), new ECB(21, 47)),
new ECBlocks(30, new ECB(29, 24), new ECB(19, 25)),
new ECBlocks(30, new ECB(11, 15), new ECB(46, 16)))));
VERSIONS.push_back(
versions.push_back(
Ref<Version>(new Version(34, intArray(6, 6, 34, 62, 90, 118, 146),
new ECBlocks(30, new ECB(13, 115), new ECB(6, 116)),
new ECBlocks(28, new ECB(14, 46), new ECB(23, 47)),
new ECBlocks(30, new ECB(44, 24), new ECB(7, 25)),
new ECBlocks(30, new ECB(59, 16), new ECB(1, 17)))));
VERSIONS.push_back(
versions.push_back(
Ref<Version>(new Version(35, intArray(7, 6, 30, 54, 78, 102, 126, 150),
new ECBlocks(30, new ECB(12, 121), new ECB(7, 122)),
new ECBlocks(28, new ECB(12, 47), new ECB(26, 48)),
new ECBlocks(30, new ECB(39, 24), new ECB(14, 25)),
new ECBlocks(30, new ECB(22, 15), new ECB(41, 16)))));
VERSIONS.push_back(
versions.push_back(
Ref<Version>(new Version(36, intArray(7, 6, 24, 50, 76, 102, 128, 154),
new ECBlocks(30, new ECB(6, 121), new ECB(14, 122)),
new ECBlocks(28, new ECB(6, 47), new ECB(34, 48)),
new ECBlocks(30, new ECB(46, 24), new ECB(10, 25)),
new ECBlocks(30, new ECB(2, 15), new ECB(64, 16)))));
VERSIONS.push_back(
versions.push_back(
Ref<Version>(new Version(37, intArray(7, 6, 28, 54, 80, 106, 132, 158),
new ECBlocks(30, new ECB(17, 122), new ECB(4, 123)),
new ECBlocks(28, new ECB(29, 46), new ECB(14, 47)),
new ECBlocks(30, new ECB(49, 24), new ECB(10, 25)),
new ECBlocks(30, new ECB(24, 15), new ECB(46, 16)))));
VERSIONS.push_back(
versions.push_back(
Ref<Version>(new Version(38, intArray(7, 6, 32, 58, 84, 110, 136, 162),
new ECBlocks(30, new ECB(4, 122), new ECB(18, 123)),
new ECBlocks(28, new ECB(13, 46), new ECB(32, 47)),
new ECBlocks(30, new ECB(48, 24), new ECB(14, 25)),
new ECBlocks(30, new ECB(42, 15), new ECB(32, 16)))));
VERSIONS.push_back(
versions.push_back(
Ref<Version>(new Version(39, intArray(7, 6, 26, 54, 82, 110, 138, 166),
new ECBlocks(30, new ECB(20, 117), new ECB(4, 118)),
new ECBlocks(28, new ECB(40, 47), new ECB(7, 48)),
new ECBlocks(30, new ECB(43, 24), new ECB(22, 25)),
new ECBlocks(30, new ECB(10, 15), new ECB(67, 16)))));
VERSIONS.push_back(
versions.push_back(
Ref<Version>(new Version(40, intArray(7, 6, 30, 58, 86, 114, 142, 170),
new ECBlocks(30, new ECB(19, 118), new ECB(6, 119)),
new ECBlocks(28, new ECB(18, 47), new ECB(31, 48)),
new ECBlocks(30, new ECB(34, 24), new ECB(34, 25)),
new ECBlocks(30, new ECB(20, 15), new ECB(61, 16)))));
return VERSIONS.size();
return versions;
}

} // namespace qrcode
Expand Down
5 changes: 3 additions & 2 deletions modules/wechat_qrcode/src/zxing/qrcode/version.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,8 @@ class Version : public Counted {
public:
static unsigned int VERSION_DECODE_INFO[];
static int N_VERSION_DECODE_INFOS;
static std::vector<Ref<Version> > VERSIONS;
static int N_VERSIONS;
static std::vector<Ref<Version> >& getVersions();

~Version();
int getVersionNumber();
Expand All @@ -78,7 +79,7 @@ class Version : public Counted {
Ref<BitMatrix> buildFunctionPattern(ErrorHandler &err_handler);
Ref<BitMatrix> buildFixedPatternValue(ErrorHandler &err_handler);
Ref<BitMatrix> buildFixedPatternTemplate(ErrorHandler &err_handler);
static int buildVersions();
static std::vector<Ref<Version>> buildVersions();
};
} // namespace qrcode
} // namespace zxing
Expand Down
Loading