| 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 |