OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 // Original code is licensed as follows: | 6 // Original code is licensed as follows: |
7 /* | 7 /* |
8 * Copyright 2007 ZXing authors | 8 * Copyright 2007 ZXing authors |
9 * | 9 * |
10 * Licensed under the Apache License, Version 2.0 (the "License"); | 10 * Licensed under the Apache License, Version 2.0 (the "License"); |
(...skipping 14 matching lines...) Expand all Loading... |
25 #include "BC_ReedSolomonGF256Poly.h" | 25 #include "BC_ReedSolomonGF256Poly.h" |
26 #include "BC_ReedSolomon.h" | 26 #include "BC_ReedSolomon.h" |
27 CBC_ReedSolomonEncoder::CBC_ReedSolomonEncoder(CBC_ReedSolomonGF256* field) | 27 CBC_ReedSolomonEncoder::CBC_ReedSolomonEncoder(CBC_ReedSolomonGF256* field) |
28 { | 28 { |
29 m_field = field; | 29 m_field = field; |
30 } | 30 } |
31 void CBC_ReedSolomonEncoder::Init() | 31 void CBC_ReedSolomonEncoder::Init() |
32 { | 32 { |
33 m_cachedGenerators.Add(FX_NEW CBC_ReedSolomonGF256Poly(m_field, 1)); | 33 m_cachedGenerators.Add(FX_NEW CBC_ReedSolomonGF256Poly(m_field, 1)); |
34 } | 34 } |
35 CBC_ReedSolomonGF256Poly* CBC_ReedSolomonEncoder::BuildGenerator(FX_INT32 degree
, FX_INT32 &e) | 35 CBC_ReedSolomonGF256Poly* CBC_ReedSolomonEncoder::BuildGenerator(int32_t degree,
int32_t &e) |
36 { | 36 { |
37 if(degree >= m_cachedGenerators.GetSize()) { | 37 if(degree >= m_cachedGenerators.GetSize()) { |
38 CBC_ReedSolomonGF256Poly* lastGenerator = (CBC_ReedSolomonGF256Poly*)(m_
cachedGenerators[m_cachedGenerators.GetSize() - 1]); | 38 CBC_ReedSolomonGF256Poly* lastGenerator = (CBC_ReedSolomonGF256Poly*)(m_
cachedGenerators[m_cachedGenerators.GetSize() - 1]); |
39 for(FX_INT32 d = m_cachedGenerators.GetSize(); d <= degree; d++) { | 39 for(int32_t d = m_cachedGenerators.GetSize(); d <= degree; d++) { |
40 CFX_Int32Array temp; | 40 CFX_Int32Array temp; |
41 temp.Add(1); | 41 temp.Add(1); |
42 temp.Add(m_field->Exp(d - 1)); | 42 temp.Add(m_field->Exp(d - 1)); |
43 CBC_ReedSolomonGF256Poly temp_poly; | 43 CBC_ReedSolomonGF256Poly temp_poly; |
44 temp_poly.Init(m_field, &temp, e); | 44 temp_poly.Init(m_field, &temp, e); |
45 BC_EXCEPTION_CHECK_ReturnValue(e, NULL); | 45 BC_EXCEPTION_CHECK_ReturnValue(e, NULL); |
46 CBC_ReedSolomonGF256Poly* nextGenerator = lastGenerator->Multiply(&t
emp_poly, e); | 46 CBC_ReedSolomonGF256Poly* nextGenerator = lastGenerator->Multiply(&t
emp_poly, e); |
47 BC_EXCEPTION_CHECK_ReturnValue(e, NULL); | 47 BC_EXCEPTION_CHECK_ReturnValue(e, NULL); |
48 m_cachedGenerators.Add(nextGenerator); | 48 m_cachedGenerators.Add(nextGenerator); |
49 lastGenerator = nextGenerator; | 49 lastGenerator = nextGenerator; |
50 } | 50 } |
51 } | 51 } |
52 return (CBC_ReedSolomonGF256Poly*)(m_cachedGenerators[degree]); | 52 return (CBC_ReedSolomonGF256Poly*)(m_cachedGenerators[degree]); |
53 } | 53 } |
54 void CBC_ReedSolomonEncoder::Encode(CFX_Int32Array *toEncode, FX_INT32 ecBytes,
FX_INT32 &e) | 54 void CBC_ReedSolomonEncoder::Encode(CFX_Int32Array *toEncode, int32_t ecBytes, i
nt32_t &e) |
55 { | 55 { |
56 if(ecBytes == 0) { | 56 if(ecBytes == 0) { |
57 e = BCExceptionNoCorrectionBytes; | 57 e = BCExceptionNoCorrectionBytes; |
58 BC_EXCEPTION_CHECK_ReturnVoid(e); | 58 BC_EXCEPTION_CHECK_ReturnVoid(e); |
59 } | 59 } |
60 FX_INT32 dataBytes = toEncode->GetSize() - ecBytes; | 60 int32_t dataBytes = toEncode->GetSize() - ecBytes; |
61 if(dataBytes <= 0) { | 61 if(dataBytes <= 0) { |
62 e = BCExceptionNoDataBytesProvided; | 62 e = BCExceptionNoDataBytesProvided; |
63 BC_EXCEPTION_CHECK_ReturnVoid(e); | 63 BC_EXCEPTION_CHECK_ReturnVoid(e); |
64 } | 64 } |
65 CBC_ReedSolomonGF256Poly* generator = BuildGenerator(ecBytes, e); | 65 CBC_ReedSolomonGF256Poly* generator = BuildGenerator(ecBytes, e); |
66 BC_EXCEPTION_CHECK_ReturnVoid(e); | 66 BC_EXCEPTION_CHECK_ReturnVoid(e); |
67 CFX_Int32Array infoCoefficients; | 67 CFX_Int32Array infoCoefficients; |
68 infoCoefficients.SetSize(dataBytes); | 68 infoCoefficients.SetSize(dataBytes); |
69 for(FX_INT32 x = 0; x < dataBytes; x++) { | 69 for(int32_t x = 0; x < dataBytes; x++) { |
70 infoCoefficients[x] = toEncode->operator [](x); | 70 infoCoefficients[x] = toEncode->operator [](x); |
71 } | 71 } |
72 CBC_ReedSolomonGF256Poly info; | 72 CBC_ReedSolomonGF256Poly info; |
73 info.Init(m_field, &infoCoefficients, e); | 73 info.Init(m_field, &infoCoefficients, e); |
74 BC_EXCEPTION_CHECK_ReturnVoid(e); | 74 BC_EXCEPTION_CHECK_ReturnVoid(e); |
75 CBC_ReedSolomonGF256Poly* rsg = info.MultiplyByMonomial(ecBytes, 1, e); | 75 CBC_ReedSolomonGF256Poly* rsg = info.MultiplyByMonomial(ecBytes, 1, e); |
76 BC_EXCEPTION_CHECK_ReturnVoid(e); | 76 BC_EXCEPTION_CHECK_ReturnVoid(e); |
77 CBC_AutoPtr<CBC_ReedSolomonGF256Poly> infoTemp(rsg); | 77 CBC_AutoPtr<CBC_ReedSolomonGF256Poly> infoTemp(rsg); |
78 CFX_PtrArray *pa = infoTemp->Divide(generator, e); | 78 CFX_PtrArray *pa = infoTemp->Divide(generator, e); |
79 BC_EXCEPTION_CHECK_ReturnVoid(e); | 79 BC_EXCEPTION_CHECK_ReturnVoid(e); |
80 CBC_AutoPtr<CFX_PtrArray > temp(pa); | 80 CBC_AutoPtr<CFX_PtrArray > temp(pa); |
81 CBC_ReedSolomonGF256Poly* remainder = (CBC_ReedSolomonGF256Poly*)(temp->oper
ator [](1)); | 81 CBC_ReedSolomonGF256Poly* remainder = (CBC_ReedSolomonGF256Poly*)(temp->oper
ator [](1)); |
82 CFX_Int32Array* coefficients = remainder->GetCoefficients(); | 82 CFX_Int32Array* coefficients = remainder->GetCoefficients(); |
83 FX_INT32 numZeroCoefficients = ecBytes - coefficients->GetSize(); | 83 int32_t numZeroCoefficients = ecBytes - coefficients->GetSize(); |
84 for(FX_INT32 i = 0; i < numZeroCoefficients; i++) { | 84 for(int32_t i = 0; i < numZeroCoefficients; i++) { |
85 (*toEncode)[dataBytes + i] = 0; | 85 (*toEncode)[dataBytes + i] = 0; |
86 } | 86 } |
87 for(FX_INT32 y = 0; y < coefficients->GetSize(); y++) { | 87 for(int32_t y = 0; y < coefficients->GetSize(); y++) { |
88 (*toEncode)[dataBytes + numZeroCoefficients + y] = | 88 (*toEncode)[dataBytes + numZeroCoefficients + y] = |
89 coefficients->operator [](y); | 89 coefficients->operator [](y); |
90 } | 90 } |
91 for (FX_INT32 k = 0; k < temp->GetSize(); k++) { | 91 for (int32_t k = 0; k < temp->GetSize(); k++) { |
92 delete (CBC_ReedSolomonGF256Poly*)(*temp)[k]; | 92 delete (CBC_ReedSolomonGF256Poly*)(*temp)[k]; |
93 } | 93 } |
94 } | 94 } |
95 CBC_ReedSolomonEncoder::~CBC_ReedSolomonEncoder() | 95 CBC_ReedSolomonEncoder::~CBC_ReedSolomonEncoder() |
96 { | 96 { |
97 for (FX_INT32 i = 0; i < m_cachedGenerators.GetSize(); i++) { | 97 for (int32_t i = 0; i < m_cachedGenerators.GetSize(); i++) { |
98 delete (CBC_ReedSolomonGF256Poly*)m_cachedGenerators[i]; | 98 delete (CBC_ReedSolomonGF256Poly*)m_cachedGenerators[i]; |
99 } | 99 } |
100 } | 100 } |
OLD | NEW |