Remove CFX_ArrayTemplate from FX barcode code.

This is now the last usage in pdfium, types to be removed
in a follow-on CL.

Change-Id: I16f67eb3eb99f21bb231829168203be125129ad7
Reviewed-on: https://pdfium-review.googlesource.com/3247
Reviewed-by: dsinclair <dsinclair@chromium.org>
Commit-Queue: dsinclair <dsinclair@chromium.org>
diff --git a/xfa/fxbarcode/BC_UtilCodingConvert.cpp b/xfa/fxbarcode/BC_UtilCodingConvert.cpp
index c06cffc..159bced 100644
--- a/xfa/fxbarcode/BC_UtilCodingConvert.cpp
+++ b/xfa/fxbarcode/BC_UtilCodingConvert.cpp
@@ -22,20 +22,20 @@
 }
 
 void CBC_UtilCodingConvert::LocaleToUtf8(const CFX_ByteString& src,
-                                         CFX_ArrayTemplate<uint8_t>& dst) {
+                                         std::vector<uint8_t>& dst) {
   CFX_WideString unicode = CFX_WideString::FromLocal(src.AsStringC());
   CFX_ByteString utf8 = unicode.UTF8Encode();
   for (int32_t i = 0; i < utf8.GetLength(); i++) {
-    dst.Add(utf8[i]);
+    dst.push_back(utf8[i]);
   }
 }
 
-void CBC_UtilCodingConvert::Utf8ToLocale(const CFX_ArrayTemplate<uint8_t>& src,
+void CBC_UtilCodingConvert::Utf8ToLocale(const std::vector<uint8_t>& src,
                                          CFX_ByteString& dst) {
   CFX_ByteString utf8;
-  for (int32_t i = 0; i < src.GetSize(); i++) {
-    utf8 += src[i];
-  }
+  for (uint8_t value : src)
+    utf8 += value;
+
   CFX_WideString unicode = CFX_WideString::FromUTF8(utf8.AsStringC());
   dst = CFX_ByteString::FromUnicode(unicode);
 }
diff --git a/xfa/fxbarcode/BC_UtilCodingConvert.h b/xfa/fxbarcode/BC_UtilCodingConvert.h
index 859eeea..51cc93d 100644
--- a/xfa/fxbarcode/BC_UtilCodingConvert.h
+++ b/xfa/fxbarcode/BC_UtilCodingConvert.h
@@ -7,6 +7,8 @@
 #ifndef XFA_FXBARCODE_BC_UTILCODINGCONVERT_H_
 #define XFA_FXBARCODE_BC_UTILCODINGCONVERT_H_
 
+#include <vector>
+
 #include "core/fxcrt/fx_basic.h"
 
 class CBC_UtilCodingConvert {
@@ -18,8 +20,8 @@
   static void LocaleToUtf8(const CFX_ByteString& source,
                            CFX_ByteString& result);
   static void LocaleToUtf8(const CFX_ByteString& source,
-                           CFX_ArrayTemplate<uint8_t>& result);
-  static void Utf8ToLocale(const CFX_ArrayTemplate<uint8_t>& source,
+                           std::vector<uint8_t>& result);
+  static void Utf8ToLocale(const std::vector<uint8_t>& source,
                            CFX_ByteString& result);
   static void Utf8ToLocale(const uint8_t* source,
                            int32_t count,
diff --git a/xfa/fxbarcode/BC_Utils.cpp b/xfa/fxbarcode/BC_Utils.cpp
index b1dcf4a..d0e89dc 100644
--- a/xfa/fxbarcode/BC_Utils.cpp
+++ b/xfa/fxbarcode/BC_Utils.cpp
@@ -4,6 +4,8 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
+#include <vector>
+
 #include "core/fxcrt/fx_basic.h"
 #include "xfa/fxbarcode/utils.h"
 
@@ -21,14 +23,13 @@
   }
   return true;
 }
+
 void BC_FX_ByteString_Append(CFX_ByteString& dst, int32_t count, char c) {
-  for (int32_t i = 0; i < count; i++) {
+  for (int32_t i = 0; i < count; i++)
     dst += c;
-  }
 }
 void BC_FX_ByteString_Append(CFX_ByteString& dst,
-                             const CFX_ArrayTemplate<uint8_t>& ba) {
-  for (int32_t i = 0; i < ba.GetSize(); i++) {
-    dst += ba[i];
-  }
+                             const std::vector<uint8_t>& ba) {
+  for (uint8_t value : ba)
+    dst += value;
 }
diff --git a/xfa/fxbarcode/common/BC_CommonBitArray.cpp b/xfa/fxbarcode/common/BC_CommonBitArray.cpp
index 0371837..f53e677 100644
--- a/xfa/fxbarcode/common/BC_CommonBitArray.cpp
+++ b/xfa/fxbarcode/common/BC_CommonBitArray.cpp
@@ -21,49 +21,63 @@
  */
 
 #include "xfa/fxbarcode/common/BC_CommonBitArray.h"
+
+#include <utility>
+
 #include "xfa/fxbarcode/utils.h"
 
 CBC_CommonBitArray::CBC_CommonBitArray(CBC_CommonBitArray* array) {
   m_size = array->GetSize();
-  m_bits.Copy(array->GetBits());
+  m_bits = array->GetBits();
 }
+
 CBC_CommonBitArray::CBC_CommonBitArray() {
-  m_bits.SetSize(1);
+  m_bits.resize(1);
   m_size = 0;
 }
+
 CBC_CommonBitArray::CBC_CommonBitArray(int32_t size) {
-  m_bits.SetSize((size + 31) >> 5);
+  m_bits.resize((size + 31) >> 5);
   m_size = size;
 }
-CBC_CommonBitArray::~CBC_CommonBitArray() {
-  m_size = 0;
-}
-int32_t CBC_CommonBitArray::GetSize() {
+
+CBC_CommonBitArray::~CBC_CommonBitArray() {}
+
+size_t CBC_CommonBitArray::GetSize() {
   return m_size;
 }
-CFX_ArrayTemplate<int32_t>& CBC_CommonBitArray::GetBits() {
+
+std::vector<int32_t>& CBC_CommonBitArray::GetBits() {
   return m_bits;
 }
-int32_t CBC_CommonBitArray::GetSizeInBytes() {
+
+size_t CBC_CommonBitArray::GetSizeInBytes() {
   return (m_size + 7) >> 3;
 }
-bool CBC_CommonBitArray::Get(int32_t i) {
+
+bool CBC_CommonBitArray::Get(size_t i) {
   return (m_bits[i >> 5] & (1 << (i & 0x1f))) != 0;
 }
-void CBC_CommonBitArray::Set(int32_t i) {
+
+void CBC_CommonBitArray::Set(size_t i) {
   m_bits[i >> 5] |= 1 << (i & 0x1F);
 }
-void CBC_CommonBitArray::Flip(int32_t i) {
+
+void CBC_CommonBitArray::Flip(size_t i) {
   m_bits[i >> 5] ^= 1 << (i & 0x1F);
 }
-void CBC_CommonBitArray::SetBulk(int32_t i, int32_t newBits) {
+
+void CBC_CommonBitArray::SetBulk(size_t i, int32_t newBits) {
   m_bits[i >> 5] = newBits;
 }
+
 void CBC_CommonBitArray::Clear() {
-  FXSYS_memset(&m_bits[0], 0x00, m_bits.GetSize() * sizeof(int32_t));
+  for (auto& value : m_bits)
+    value = 0;
 }
-bool CBC_CommonBitArray::IsRange(int32_t start,
-                                 int32_t end,
+
+bool CBC_CommonBitArray::IsRange(size_t start,
+                                 size_t end,
                                  bool value,
                                  int32_t& e) {
   if (end < start) {
@@ -95,19 +109,16 @@
   }
   return true;
 }
+
 int32_t* CBC_CommonBitArray::GetBitArray() {
-  return &m_bits[0];
+  return m_bits.data();
 }
+
 void CBC_CommonBitArray::Reverse() {
-  int32_t* newBits = FX_Alloc(int32_t, m_bits.GetSize());
-  FXSYS_memset(newBits, 0x00, m_bits.GetSize() * sizeof(int32_t));
-  int32_t size = m_size;
-  int32_t i;
-  for (i = 0; i < size; i++) {
-    if (Get(size - i - 1)) {
+  std::vector<int32_t> newBits(m_bits.size());
+  for (size_t i = 0; i < m_size; i++) {
+    if (Get(m_size - i - 1))
       newBits[i >> 5] |= 1 << (i & 0x1F);
-    }
   }
-  FXSYS_memcpy(&m_bits[0], newBits, m_bits.GetSize() * sizeof(int32_t));
-  FX_Free(newBits);
+  m_bits = std::move(newBits);
 }
diff --git a/xfa/fxbarcode/common/BC_CommonBitArray.h b/xfa/fxbarcode/common/BC_CommonBitArray.h
index 6ad8ab3..841ca99 100644
--- a/xfa/fxbarcode/common/BC_CommonBitArray.h
+++ b/xfa/fxbarcode/common/BC_CommonBitArray.h
@@ -7,6 +7,8 @@
 #ifndef XFA_FXBARCODE_COMMON_BC_COMMONBITARRAY_H_
 #define XFA_FXBARCODE_COMMON_BC_COMMONBITARRAY_H_
 
+#include <vector>
+
 #include "core/fxcrt/fx_basic.h"
 
 class CBC_CommonBitArray {
@@ -16,21 +18,21 @@
   CBC_CommonBitArray();
   virtual ~CBC_CommonBitArray();
 
-  int32_t GetSize();
-  CFX_ArrayTemplate<int32_t>& GetBits();
-  int32_t GetSizeInBytes();
-  bool Get(int32_t i);
-  void Set(int32_t i);
-  void Flip(int32_t i);
-  void SetBulk(int32_t i, int32_t newBits);
-  bool IsRange(int32_t start, int32_t end, bool value, int32_t& e);
+  size_t GetSize();
+  size_t GetSizeInBytes();
+  std::vector<int32_t>& GetBits();
   int32_t* GetBitArray();
+  bool Get(size_t i);
+  void Set(size_t i);
+  void Flip(size_t i);
+  void SetBulk(size_t i, int32_t newBits);
+  bool IsRange(size_t start, size_t end, bool value, int32_t& e);
   void Reverse();
   void Clear();
 
  private:
-  int32_t m_size;
-  CFX_ArrayTemplate<int32_t> m_bits;
+  size_t m_size;
+  std::vector<int32_t> m_bits;
 };
 
 #endif  // XFA_FXBARCODE_COMMON_BC_COMMONBITARRAY_H_
diff --git a/xfa/fxbarcode/common/BC_CommonBitMatrix.cpp b/xfa/fxbarcode/common/BC_CommonBitMatrix.cpp
index b9b218c..5e65bd7 100644
--- a/xfa/fxbarcode/common/BC_CommonBitMatrix.cpp
+++ b/xfa/fxbarcode/common/BC_CommonBitMatrix.cpp
@@ -104,7 +104,7 @@
 CBC_CommonBitArray* CBC_CommonBitMatrix::GetRow(int32_t y,
                                                 CBC_CommonBitArray* row) {
   CBC_CommonBitArray* rowArray = nullptr;
-  if (!row || row->GetSize() < m_width) {
+  if (!row || static_cast<int32_t>(row->GetSize()) < m_width) {
     rowArray = new CBC_CommonBitArray(m_width);
   } else {
     rowArray = new CBC_CommonBitArray(row);
@@ -123,11 +123,12 @@
     l++;
   }
 }
+
 void CBC_CommonBitMatrix::SetCol(int32_t y, CBC_CommonBitArray* col) {
-  for (int32_t i = 0; i < col->GetBits().GetSize(); i++) {
+  for (size_t i = 0; i < col->GetBits().size(); ++i)
     m_bits[i * m_rowSize + y] = col->GetBitArray()[i];
-  }
 }
+
 int32_t CBC_CommonBitMatrix::GetWidth() {
   return m_width;
 }
diff --git a/xfa/fxbarcode/common/BC_CommonByteArray.cpp b/xfa/fxbarcode/common/BC_CommonByteArray.cpp
index 050ecb0..e950f0f 100644
--- a/xfa/fxbarcode/common/BC_CommonByteArray.cpp
+++ b/xfa/fxbarcode/common/BC_CommonByteArray.cpp
@@ -85,7 +85,7 @@
   FXSYS_memcpy(m_bytes, source + offset, count);
   m_index = count;
 }
-void CBC_CommonByteArray::Set(CFX_ArrayTemplate<uint8_t>* source,
+void CBC_CommonByteArray::Set(std::vector<uint8_t>* source,
                               int32_t offset,
                               int32_t count) {
   FX_Free(m_bytes);
diff --git a/xfa/fxbarcode/common/BC_CommonByteArray.h b/xfa/fxbarcode/common/BC_CommonByteArray.h
index 009f625..e1fe4c7 100644
--- a/xfa/fxbarcode/common/BC_CommonByteArray.h
+++ b/xfa/fxbarcode/common/BC_CommonByteArray.h
@@ -7,6 +7,8 @@
 #ifndef XFA_FXBARCODE_COMMON_BC_COMMONBYTEARRAY_H_
 #define XFA_FXBARCODE_COMMON_BC_COMMONBYTEARRAY_H_
 
+#include <vector>
+
 #include "core/fxcrt/fx_basic.h"
 
 // TODO(weili): The usage of this class should be replaced by
@@ -25,7 +27,7 @@
   void AppendByte(int32_t value);
   void Reserve(int32_t capacity);
   void Set(uint8_t* source, int32_t offset, int32_t count);
-  void Set(CFX_ArrayTemplate<uint8_t>* source, int32_t offset, int32_t count);
+  void Set(std::vector<uint8_t>* source, int32_t offset, int32_t count);
 
  private:
   int32_t m_size;
diff --git a/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomon.cpp b/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomon.cpp
index 7698890..82a729b 100644
--- a/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomon.cpp
+++ b/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomon.cpp
@@ -30,18 +30,17 @@
 CBC_ReedSolomonEncoder::CBC_ReedSolomonEncoder(CBC_ReedSolomonGF256* field) {
   m_field = field;
 }
+
 void CBC_ReedSolomonEncoder::Init() {
-  m_cachedGenerators.Add(new CBC_ReedSolomonGF256Poly(m_field, 1));
+  m_cachedGenerators.push_back(new CBC_ReedSolomonGF256Poly(m_field, 1));
 }
-CBC_ReedSolomonGF256Poly* CBC_ReedSolomonEncoder::BuildGenerator(int32_t degree,
+
+CBC_ReedSolomonGF256Poly* CBC_ReedSolomonEncoder::BuildGenerator(size_t degree,
                                                                  int32_t& e) {
-  if (degree >= m_cachedGenerators.GetSize()) {
-    CBC_ReedSolomonGF256Poly* lastGenerator =
-        m_cachedGenerators[m_cachedGenerators.GetSize() - 1];
-    for (int32_t d = m_cachedGenerators.GetSize(); d <= degree; d++) {
-      CFX_ArrayTemplate<int32_t> temp;
-      temp.Add(1);
-      temp.Add(m_field->Exp(d - 1));
+  if (degree >= m_cachedGenerators.size()) {
+    CBC_ReedSolomonGF256Poly* lastGenerator = m_cachedGenerators.back();
+    for (size_t d = m_cachedGenerators.size(); d <= degree; ++d) {
+      std::vector<int32_t> temp = {1, m_field->Exp(d - 1)};
       CBC_ReedSolomonGF256Poly temp_poly;
       temp_poly.Init(m_field, &temp, e);
       if (e != BCExceptionNO)
@@ -50,31 +49,31 @@
           lastGenerator->Multiply(&temp_poly, e);
       if (e != BCExceptionNO)
         return nullptr;
-      m_cachedGenerators.Add(nextGenerator);
+      m_cachedGenerators.push_back(nextGenerator);
       lastGenerator = nextGenerator;
     }
   }
   return m_cachedGenerators[degree];
 }
-void CBC_ReedSolomonEncoder::Encode(CFX_ArrayTemplate<int32_t>* toEncode,
-                                    int32_t ecBytes,
+
+void CBC_ReedSolomonEncoder::Encode(std::vector<int32_t>* toEncode,
+                                    size_t ecBytes,
                                     int32_t& e) {
   if (ecBytes == 0) {
     e = BCExceptionNoCorrectionBytes;
     return;
   }
-  int32_t dataBytes = toEncode->GetSize() - ecBytes;
-  if (dataBytes <= 0) {
+  if (toEncode->size() <= ecBytes) {
     e = BCExceptionNoDataBytesProvided;
     return;
   }
   CBC_ReedSolomonGF256Poly* generator = BuildGenerator(ecBytes, e);
   if (e != BCExceptionNO)
     return;
-  CFX_ArrayTemplate<int32_t> infoCoefficients;
-  infoCoefficients.SetSize(dataBytes);
-  for (int32_t x = 0; x < dataBytes; x++) {
-    infoCoefficients[x] = toEncode->operator[](x);
+  size_t dataBytes = toEncode->size() - ecBytes;
+  std::vector<int32_t> infoCoefficients(dataBytes);
+  for (size_t x = 0; x < dataBytes; x++) {
+    infoCoefficients[x] = (*toEncode)[x];
   }
   CBC_ReedSolomonGF256Poly info;
   info.Init(m_field, &infoCoefficients, e);
@@ -84,25 +83,23 @@
       info.MultiplyByMonomial(ecBytes, 1, e));
   if (e != BCExceptionNO)
     return;
-  std::unique_ptr<CFX_ArrayTemplate<CBC_ReedSolomonGF256Poly*>> temp(
+  std::unique_ptr<std::vector<CBC_ReedSolomonGF256Poly*>> temp(
       infoTemp->Divide(generator, e));
   if (e != BCExceptionNO)
     return;
   CBC_ReedSolomonGF256Poly* remainder = (*temp)[1];
-  CFX_ArrayTemplate<int32_t>* coefficients = remainder->GetCoefficients();
-  int32_t numZeroCoefficients = ecBytes - coefficients->GetSize();
-  for (int32_t i = 0; i < numZeroCoefficients; i++) {
+  std::vector<int32_t>* coefficients = remainder->GetCoefficients();
+  size_t numZeroCoefficients =
+      ecBytes > coefficients->size() ? ecBytes - coefficients->size() : 0;
+  for (size_t i = 0; i < numZeroCoefficients; i++)
     (*toEncode)[dataBytes + i] = 0;
-  }
-  for (int32_t y = 0; y < coefficients->GetSize(); y++) {
-    (*toEncode)[dataBytes + numZeroCoefficients + y] =
-        coefficients->operator[](y);
-  }
-  for (int32_t k = 0; k < temp->GetSize(); k++) {
+  for (size_t y = 0; y < coefficients->size(); y++)
+    (*toEncode)[dataBytes + numZeroCoefficients + y] = (*coefficients)[y];
+  for (size_t k = 0; k < temp->size(); k++)
     delete (*temp)[k];
-  }
 }
+
 CBC_ReedSolomonEncoder::~CBC_ReedSolomonEncoder() {
-  for (int32_t i = 0; i < m_cachedGenerators.GetSize(); i++)
+  for (size_t i = 0; i < m_cachedGenerators.size(); i++)
     delete m_cachedGenerators[i];
 }
diff --git a/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomon.h b/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomon.h
index 95828f1..5e5c7c5 100644
--- a/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomon.h
+++ b/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomon.h
@@ -7,6 +7,8 @@
 #ifndef XFA_FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMON_H_
 #define XFA_FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMON_H_
 
+#include <vector>
+
 #include "core/fxcrt/fx_basic.h"
 
 class CBC_ReedSolomonGF256;
@@ -17,16 +19,14 @@
   explicit CBC_ReedSolomonEncoder(CBC_ReedSolomonGF256* field);
   virtual ~CBC_ReedSolomonEncoder();
 
-  void Encode(CFX_ArrayTemplate<int32_t>* toEncode,
-              int32_t ecBytes,
-              int32_t& e);
+  void Encode(std::vector<int32_t>* toEncode, size_t ecBytes, int32_t& e);
   virtual void Init();
 
  private:
-  CBC_ReedSolomonGF256Poly* BuildGenerator(int32_t degree, int32_t& e);
+  CBC_ReedSolomonGF256Poly* BuildGenerator(size_t degree, int32_t& e);
 
   CBC_ReedSolomonGF256* m_field;
-  CFX_ArrayTemplate<CBC_ReedSolomonGF256Poly*> m_cachedGenerators;
+  std::vector<CBC_ReedSolomonGF256Poly*> m_cachedGenerators;
 };
 
 #endif  // XFA_FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMON_H_
diff --git a/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.cpp b/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.cpp
index ce84d8e..349ed07 100644
--- a/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.cpp
+++ b/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.cpp
@@ -22,6 +22,8 @@
 
 #include "xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h"
 
+#include <vector>
+
 #include "third_party/base/ptr_util.h"
 #include "xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.h"
 
@@ -86,8 +88,7 @@
       return nullptr;
     return temp;
   }
-  CFX_ArrayTemplate<int32_t> coefficients;
-  coefficients.SetSize(degree + 1);
+  std::vector<int32_t> coefficients(degree + 1);
   coefficients[0] = coefficient;
   CBC_ReedSolomonGF256Poly* temp = new CBC_ReedSolomonGF256Poly();
   temp->Init(this, &coefficients, e);
diff --git a/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.cpp b/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.cpp
index a0bbc02..e4ee30b 100644
--- a/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.cpp
+++ b/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.cpp
@@ -23,7 +23,9 @@
 #include "xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.h"
 
 #include <memory>
+#include <utility>
 
+#include "third_party/base/stl_util.h"
 #include "xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h"
 
 CBC_ReedSolomonGF256Poly::CBC_ReedSolomonGF256Poly(CBC_ReedSolomonGF256* field,
@@ -32,69 +34,75 @@
     return;
 
   m_field = field;
-  m_coefficients.Add(coefficients);
+  m_coefficients.push_back(coefficients);
 }
+
 CBC_ReedSolomonGF256Poly::CBC_ReedSolomonGF256Poly() {
   m_field = nullptr;
 }
+
 void CBC_ReedSolomonGF256Poly::Init(CBC_ReedSolomonGF256* field,
-                                    CFX_ArrayTemplate<int32_t>* coefficients,
+                                    std::vector<int32_t>* coefficients,
                                     int32_t& e) {
-  if (!coefficients || coefficients->GetSize() == 0) {
+  if (!coefficients || coefficients->empty()) {
     e = BCExceptionCoefficientsSizeIsNull;
     return;
   }
   m_field = field;
-  int32_t coefficientsLength = coefficients->GetSize();
-  if ((coefficientsLength > 1 && (*coefficients)[0] == 0)) {
-    int32_t firstNonZero = 1;
-    while ((firstNonZero < coefficientsLength) &&
-           ((*coefficients)[firstNonZero] == 0)) {
+  size_t coefficientsLength = coefficients->size();
+  if (coefficientsLength > 1 && coefficients->front() == 0) {
+    size_t firstNonZero = 1;
+    while (firstNonZero < coefficientsLength &&
+           (*coefficients)[firstNonZero] == 0) {
       firstNonZero++;
     }
     if (firstNonZero == coefficientsLength) {
-      m_coefficients.Copy(*(m_field->GetZero()->GetCoefficients()));
+      m_coefficients = *(m_field->GetZero()->GetCoefficients());
     } else {
-      m_coefficients.SetSize(coefficientsLength - firstNonZero);
-      for (int32_t i = firstNonZero, j = 0; i < coefficientsLength; i++, j++) {
-        m_coefficients[j] = coefficients->operator[](i);
-      }
+      m_coefficients.resize(coefficientsLength - firstNonZero);
+      for (size_t i = firstNonZero, j = 0; i < coefficientsLength; i++, j++)
+        m_coefficients[j] = (*coefficients)[i];
     }
   } else {
-    m_coefficients.Copy(*coefficients);
+    m_coefficients = *coefficients;
   }
 }
-CFX_ArrayTemplate<int32_t>* CBC_ReedSolomonGF256Poly::GetCoefficients() {
+
+std::vector<int32_t>* CBC_ReedSolomonGF256Poly::GetCoefficients() {
   return &m_coefficients;
 }
+
 int32_t CBC_ReedSolomonGF256Poly::GetDegree() {
-  return m_coefficients.GetSize() - 1;
+  return pdfium::CollectionSize<int32_t>(m_coefficients) - 1;
 }
+
 bool CBC_ReedSolomonGF256Poly::IsZero() {
-  return m_coefficients[0] == 0;
+  return m_coefficients.front() == 0;
 }
+
 int32_t CBC_ReedSolomonGF256Poly::GetCoefficients(int32_t degree) {
-  return m_coefficients[m_coefficients.GetSize() - 1 - degree];
+  return m_coefficients[m_coefficients.size() - 1 - degree];
 }
+
 int32_t CBC_ReedSolomonGF256Poly::EvaluateAt(int32_t a) {
   if (a == 0) {
     return GetCoefficients(0);
   }
-  int32_t size = m_coefficients.GetSize();
+  size_t size = m_coefficients.size();
   if (a == 1) {
     int32_t result = 0;
-    for (int32_t i = 0; i < size; i++) {
+    for (size_t i = 0; i < size; i++)
       result = CBC_ReedSolomonGF256::AddOrSubtract(result, m_coefficients[i]);
-    }
     return result;
   }
   int32_t result = m_coefficients[0];
-  for (int32_t j = 1; j < size; j++) {
+  for (size_t j = 1; j < size; j++) {
     result = CBC_ReedSolomonGF256::AddOrSubtract(m_field->Multiply(a, result),
                                                  m_coefficients[j]);
   }
   return result;
 }
+
 CBC_ReedSolomonGF256Poly* CBC_ReedSolomonGF256Poly::Clone(int32_t& e) {
   CBC_ReedSolomonGF256Poly* temp = new CBC_ReedSolomonGF256Poly();
   temp->Init(m_field, &m_coefficients, e);
@@ -110,26 +118,19 @@
   if (other->IsZero())
     return Clone(e);
 
-  CFX_ArrayTemplate<int32_t> smallerCoefficients;
-  smallerCoefficients.Copy(m_coefficients);
-  CFX_ArrayTemplate<int32_t> largerCoefficients;
-  largerCoefficients.Copy(*(other->GetCoefficients()));
-  if (smallerCoefficients.GetSize() > largerCoefficients.GetSize()) {
-    CFX_ArrayTemplate<int32_t> temp;
-    temp.Copy(smallerCoefficients);
-    smallerCoefficients.Copy(largerCoefficients);
-    largerCoefficients.Copy(temp);
+  std::vector<int32_t> smallerCoefficients = m_coefficients;
+  std::vector<int32_t> largerCoefficients = *(other->GetCoefficients());
+  if (smallerCoefficients.size() > largerCoefficients.size()) {
+    std::swap(smallerCoefficients, largerCoefficients);
   }
-  CFX_ArrayTemplate<int32_t> sumDiff;
-  sumDiff.SetSize(largerCoefficients.GetSize());
-  int32_t lengthDiff =
-      largerCoefficients.GetSize() - smallerCoefficients.GetSize();
-  for (int32_t i = 0; i < lengthDiff; i++) {
+  std::vector<int32_t> sumDiff(largerCoefficients.size());
+  size_t lengthDiff = largerCoefficients.size() - smallerCoefficients.size();
+  for (size_t i = 0; i < lengthDiff; i++) {
     sumDiff[i] = largerCoefficients[i];
   }
-  for (int32_t j = lengthDiff; j < largerCoefficients.GetSize(); j++) {
-    sumDiff[j] = (CBC_ReedSolomonGF256::AddOrSubtract(
-        smallerCoefficients[j - lengthDiff], largerCoefficients[j]));
+  for (size_t j = lengthDiff; j < largerCoefficients.size(); j++) {
+    sumDiff[j] = CBC_ReedSolomonGF256::AddOrSubtract(
+        smallerCoefficients[j - lengthDiff], largerCoefficients[j]);
   }
   CBC_ReedSolomonGF256Poly* temp = new CBC_ReedSolomonGF256Poly();
   temp->Init(m_field, &sumDiff, e);
@@ -143,20 +144,17 @@
   if (IsZero() || other->IsZero())
     return m_field->GetZero()->Clone(e);
 
-  CFX_ArrayTemplate<int32_t> aCoefficients;
-  aCoefficients.Copy(m_coefficients);
-  int32_t aLength = m_coefficients.GetSize();
-  CFX_ArrayTemplate<int32_t> bCoefficients;
-  bCoefficients.Copy(*(other->GetCoefficients()));
-  int32_t bLength = other->GetCoefficients()->GetSize();
-  CFX_ArrayTemplate<int32_t> product;
-  product.SetSize(aLength + bLength - 1);
-  for (int32_t i = 0; i < aLength; i++) {
+  std::vector<int32_t> aCoefficients = m_coefficients;
+  std::vector<int32_t> bCoefficients = *(other->GetCoefficients());
+  size_t aLength = aCoefficients.size();
+  size_t bLength = bCoefficients.size();
+  std::vector<int32_t> product(aLength + bLength - 1);
+  for (size_t i = 0; i < aLength; i++) {
     int32_t aCoeff = m_coefficients[i];
-    for (int32_t j = 0; j < bLength; j++) {
+    for (size_t j = 0; j < bLength; j++) {
       product[i + j] = CBC_ReedSolomonGF256::AddOrSubtract(
           product[i + j],
-          m_field->Multiply(aCoeff, other->GetCoefficients()->operator[](j)));
+          m_field->Multiply(aCoeff, (*other->GetCoefficients())[j]));
     }
   }
   CBC_ReedSolomonGF256Poly* temp = new CBC_ReedSolomonGF256Poly();
@@ -172,10 +170,9 @@
   if (scalar == 1)
     return Clone(e);
 
-  int32_t size = m_coefficients.GetSize();
-  CFX_ArrayTemplate<int32_t> product;
-  product.SetSize(size);
-  for (int32_t i = 0; i < size; i++) {
+  size_t size = m_coefficients.size();
+  std::vector<int32_t> product(size);
+  for (size_t i = 0; i < size; i++) {
     product[i] = m_field->Multiply(m_coefficients[i], scalar);
   }
   CBC_ReedSolomonGF256Poly* temp = new CBC_ReedSolomonGF256Poly();
@@ -195,11 +192,10 @@
   if (coefficient == 0)
     return m_field->GetZero()->Clone(e);
 
-  int32_t size = m_coefficients.GetSize();
-  CFX_ArrayTemplate<int32_t> product;
-  product.SetSize(size + degree);
-  for (int32_t i = 0; i < size; i++) {
-    product[i] = (m_field->Multiply(m_coefficients[i], coefficient));
+  size_t size = m_coefficients.size();
+  std::vector<int32_t> product(size + degree);
+  for (size_t i = 0; i < size; i++) {
+    product[i] = m_field->Multiply(m_coefficients[i], coefficient);
   }
   CBC_ReedSolomonGF256Poly* temp = new CBC_ReedSolomonGF256Poly();
   temp->Init(m_field, &product, e);
@@ -208,7 +204,7 @@
   return temp;
 }
 
-CFX_ArrayTemplate<CBC_ReedSolomonGF256Poly*>* CBC_ReedSolomonGF256Poly::Divide(
+std::vector<CBC_ReedSolomonGF256Poly*>* CBC_ReedSolomonGF256Poly::Divide(
     CBC_ReedSolomonGF256Poly* other,
     int32_t& e) {
   if (other->IsZero()) {
@@ -247,13 +243,11 @@
     if (e != BCExceptionNO)
       return nullptr;
   }
-  CFX_ArrayTemplate<CBC_ReedSolomonGF256Poly*>* tempPtrA =
-      new CFX_ArrayTemplate<CBC_ReedSolomonGF256Poly*>();
-  tempPtrA->Add(quotient.release());
-  tempPtrA->Add(remainder.release());
+  std::vector<CBC_ReedSolomonGF256Poly*>* tempPtrA =
+      new std::vector<CBC_ReedSolomonGF256Poly*>();
+  tempPtrA->push_back(quotient.release());
+  tempPtrA->push_back(remainder.release());
   return tempPtrA;
 }
 
-CBC_ReedSolomonGF256Poly::~CBC_ReedSolomonGF256Poly() {
-  m_coefficients.RemoveAll();
-}
+CBC_ReedSolomonGF256Poly::~CBC_ReedSolomonGF256Poly() {}
diff --git a/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.h b/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.h
index ff93264..6fc7509 100644
--- a/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.h
+++ b/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.h
@@ -7,6 +7,8 @@
 #ifndef XFA_FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMONGF256POLY_H_
 #define XFA_FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMONGF256POLY_H_
 
+#include <vector>
+
 #include "core/fxcrt/fx_basic.h"
 
 class CBC_ReedSolomonGF256;
@@ -17,11 +19,11 @@
   CBC_ReedSolomonGF256Poly();
   ~CBC_ReedSolomonGF256Poly();
   void Init(CBC_ReedSolomonGF256* field,
-            CFX_ArrayTemplate<int32_t>* coefficients,
+            std::vector<int32_t>* coefficients,
             int32_t& e);
 
   int32_t GetCoefficients(int32_t degree);
-  CFX_ArrayTemplate<int32_t>* GetCoefficients();
+  std::vector<int32_t>* GetCoefficients();
   int32_t GetDegree();
   bool IsZero();
   int32_t EvaluateAt(int32_t a);
@@ -33,7 +35,7 @@
   CBC_ReedSolomonGF256Poly* MultiplyByMonomial(int32_t degree,
                                                int32_t coefficient,
                                                int32_t& e);
-  CFX_ArrayTemplate<CBC_ReedSolomonGF256Poly*>* Divide(
+  std::vector<CBC_ReedSolomonGF256Poly*>* Divide(
       CBC_ReedSolomonGF256Poly* other,
       int32_t& e);
 
@@ -41,7 +43,7 @@
 
  private:
   CBC_ReedSolomonGF256* m_field;
-  CFX_ArrayTemplate<int32_t> m_coefficients;
+  std::vector<int32_t> m_coefficients;
 };
 
 #endif  // XFA_FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMONGF256POLY_H_
diff --git a/xfa/fxbarcode/datamatrix/BC_DefaultPlacement.cpp b/xfa/fxbarcode/datamatrix/BC_DefaultPlacement.cpp
index e7eef07..f027486 100644
--- a/xfa/fxbarcode/datamatrix/BC_DefaultPlacement.cpp
+++ b/xfa/fxbarcode/datamatrix/BC_DefaultPlacement.cpp
@@ -29,21 +29,20 @@
   m_codewords = codewords;
   m_numcols = numcols;
   m_numrows = numrows;
-  m_bits.SetSize(numcols * numrows);
+  m_bits.resize(numcols * numrows);
   for (int32_t i = 0; i < numcols * numrows; i++) {
     m_bits[i] = (uint8_t)2;
   }
 }
-CBC_DefaultPlacement::~CBC_DefaultPlacement() {
-  m_bits.RemoveAll();
-}
+CBC_DefaultPlacement::~CBC_DefaultPlacement() {}
+
 int32_t CBC_DefaultPlacement::getNumrows() {
   return m_numrows;
 }
 int32_t CBC_DefaultPlacement::getNumcols() {
   return m_numcols;
 }
-CFX_ArrayTemplate<uint8_t>& CBC_DefaultPlacement::getBits() {
+std::vector<uint8_t>& CBC_DefaultPlacement::getBits() {
   return m_bits;
 }
 bool CBC_DefaultPlacement::getBit(int32_t col, int32_t row) {
diff --git a/xfa/fxbarcode/datamatrix/BC_DefaultPlacement.h b/xfa/fxbarcode/datamatrix/BC_DefaultPlacement.h
index 36a7ab2..d3c38ca 100644
--- a/xfa/fxbarcode/datamatrix/BC_DefaultPlacement.h
+++ b/xfa/fxbarcode/datamatrix/BC_DefaultPlacement.h
@@ -7,6 +7,8 @@
 #ifndef XFA_FXBARCODE_DATAMATRIX_BC_DEFAULTPLACEMENT_H_
 #define XFA_FXBARCODE_DATAMATRIX_BC_DEFAULTPLACEMENT_H_
 
+#include <vector>
+
 #include "core/fxcrt/fx_basic.h"
 
 class CBC_DefaultPlacement {
@@ -18,7 +20,7 @@
 
   int32_t getNumrows();
   int32_t getNumcols();
-  CFX_ArrayTemplate<uint8_t>& getBits();
+  std::vector<uint8_t>& getBits();
   bool getBit(int32_t col, int32_t row);
   void setBit(int32_t col, int32_t row, bool bit);
   bool hasBit(int32_t col, int32_t row);
@@ -28,7 +30,7 @@
   CFX_WideString m_codewords;
   int32_t m_numrows;
   int32_t m_numcols;
-  CFX_ArrayTemplate<uint8_t> m_bits;
+  std::vector<uint8_t> m_bits;
   void module(int32_t row, int32_t col, int32_t pos, int32_t bit);
   void utah(int32_t row, int32_t col, int32_t pos);
   void corner1(int32_t pos);
diff --git a/xfa/fxbarcode/datamatrix/BC_ErrorCorrection.cpp b/xfa/fxbarcode/datamatrix/BC_ErrorCorrection.cpp
index ffdd308..0af52fa 100644
--- a/xfa/fxbarcode/datamatrix/BC_ErrorCorrection.cpp
+++ b/xfa/fxbarcode/datamatrix/BC_ErrorCorrection.cpp
@@ -20,6 +20,8 @@
  * limitations under the License.
  */
 
+#include <vector>
+
 #include "xfa/fxbarcode/datamatrix/BC_Encoder.h"
 #include "xfa/fxbarcode/datamatrix/BC_ErrorCorrection.h"
 #include "xfa/fxbarcode/datamatrix/BC_SymbolInfo.h"
@@ -133,12 +135,9 @@
       return CFX_WideString();
     sb += ecc;
   } else {
-    CFX_ArrayTemplate<int32_t> dataSizes;
-    dataSizes.SetSize(blockCount);
-    CFX_ArrayTemplate<int32_t> errorSizes;
-    errorSizes.SetSize(blockCount);
-    CFX_ArrayTemplate<int32_t> startPos;
-    startPos.SetSize(blockCount);
+    std::vector<int32_t> dataSizes(blockCount);
+    std::vector<int32_t> errorSizes(blockCount);
+    std::vector<int32_t> startPos(blockCount);
     for (int32_t i = 0; i < blockCount; i++) {
       dataSizes[i] = symbolInfo->getDataLengthForInterleavedBlock(i + 1);
       errorSizes[i] = symbolInfo->getErrorLengthForInterleavedBlock(i + 1);
diff --git a/xfa/fxbarcode/datamatrix/BC_HighLevelEncoder.cpp b/xfa/fxbarcode/datamatrix/BC_HighLevelEncoder.cpp
index 90877c7..3ece55f 100644
--- a/xfa/fxbarcode/datamatrix/BC_HighLevelEncoder.cpp
+++ b/xfa/fxbarcode/datamatrix/BC_HighLevelEncoder.cpp
@@ -58,13 +58,12 @@
 CBC_HighLevelEncoder::CBC_HighLevelEncoder() {}
 CBC_HighLevelEncoder::~CBC_HighLevelEncoder() {}
 
-CFX_ArrayTemplate<uint8_t>& CBC_HighLevelEncoder::getBytesForMessage(
+std::vector<uint8_t>& CBC_HighLevelEncoder::getBytesForMessage(
     CFX_WideString msg) {
   CFX_ByteString bytestr;
   CBC_UtilCodingConvert::UnicodeToUTF8(msg, bytestr);
-  for (int32_t i = 0; i < bytestr.GetLength(); i++) {
-    m_bytearray.Add(bytestr.GetAt(i));
-  }
+  for (int32_t i = 0; i < bytestr.GetLength(); i++)
+    m_bytearray.push_back(bytestr.GetAt(i));
   return m_bytearray;
 }
 CFX_WideString CBC_HighLevelEncoder::encodeHighLevel(CFX_WideString msg,
@@ -161,10 +160,8 @@
   while (true) {
     if ((startpos + charsProcessed) == msg.GetLength()) {
       int32_t min = std::numeric_limits<int32_t>::max();
-      CFX_ArrayTemplate<uint8_t> mins;
-      mins.SetSize(6);
-      CFX_ArrayTemplate<int32_t> intCharCounts;
-      intCharCounts.SetSize(6);
+      std::vector<uint8_t> mins(6);
+      std::vector<int32_t> intCharCounts(6);
       min = findMinimums(charCounts, intCharCounts, min, mins);
       int32_t minCount = getMinimumCount(mins);
       if (intCharCounts[ASCII_ENCODATION] == min) {
@@ -229,10 +226,8 @@
       charCounts[BASE256_ENCODATION]++;
     }
     if (charsProcessed >= 4) {
-      CFX_ArrayTemplate<int32_t> intCharCounts;
-      intCharCounts.SetSize(6);
-      CFX_ArrayTemplate<uint8_t> mins;
-      mins.SetSize(6);
+      std::vector<int32_t> intCharCounts(6);
+      std::vector<uint8_t> mins(6);
       findMinimums(charCounts, intCharCounts,
                    std::numeric_limits<int32_t>::max(), mins);
       int32_t minCount = getMinimumCount(mins);
@@ -317,31 +312,27 @@
   return tempVariable <= 254 ? (wchar_t)tempVariable
                              : (wchar_t)(tempVariable - 254);
 }
-int32_t CBC_HighLevelEncoder::findMinimums(
-    std::vector<float>& charCounts,
-    CFX_ArrayTemplate<int32_t>& intCharCounts,
-    int32_t min,
-    CFX_ArrayTemplate<uint8_t>& mins) {
-  for (int32_t l = 0; l < mins.GetSize(); l++) {
-    mins[l] = (uint8_t)0;
-  }
-  for (int32_t i = 0; i < 6; i++) {
-    intCharCounts[i] = (int32_t)ceil(charCounts[i]);
+int32_t CBC_HighLevelEncoder::findMinimums(std::vector<float>& charCounts,
+                                           std::vector<int32_t>& intCharCounts,
+                                           int32_t min,
+                                           std::vector<uint8_t>& mins) {
+  for (size_t l = 0; l < mins.size(); l++)
+    mins[l] = 0;
+
+  for (size_t i = 0; i < 6; i++) {
+    intCharCounts[i] = static_cast<int32_t>(ceil(charCounts[i]));
     int32_t current = intCharCounts[i];
     if (min > current) {
       min = current;
-      for (int32_t j = 0; j < mins.GetSize(); j++) {
-        mins[j] = (uint8_t)0;
-      }
+      for (size_t j = 0; j < mins.size(); j++)
+        mins[j] = 0;
     }
-    if (min == current) {
+    if (min == current)
       mins[i]++;
-    }
   }
   return min;
 }
-int32_t CBC_HighLevelEncoder::getMinimumCount(
-    CFX_ArrayTemplate<uint8_t>& mins) {
+int32_t CBC_HighLevelEncoder::getMinimumCount(std::vector<uint8_t>& mins) {
   int32_t minCount = 0;
   for (int32_t i = 0; i < 6; i++) {
     minCount += mins[i];
diff --git a/xfa/fxbarcode/datamatrix/BC_HighLevelEncoder.h b/xfa/fxbarcode/datamatrix/BC_HighLevelEncoder.h
index 821dedd..6819e29 100644
--- a/xfa/fxbarcode/datamatrix/BC_HighLevelEncoder.h
+++ b/xfa/fxbarcode/datamatrix/BC_HighLevelEncoder.h
@@ -23,7 +23,7 @@
   CBC_HighLevelEncoder();
   ~CBC_HighLevelEncoder() override;
 
-  CFX_ArrayTemplate<uint8_t>& getBytesForMessage(CFX_WideString msg);
+  std::vector<uint8_t>& getBytesForMessage(CFX_WideString msg);
   static CFX_WideString encodeHighLevel(CFX_WideString msg,
                                         CFX_WideString ecLevel,
                                         int32_t& e);
@@ -59,15 +59,15 @@
   static const wchar_t* MACRO_05_HEADER;
   static const wchar_t* MACRO_06_HEADER;
   static const wchar_t MACRO_TRAILER;
-  CFX_ArrayTemplate<uint8_t> m_bytearray;
+  std::vector<uint8_t> m_bytearray;
 
  private:
   static wchar_t randomize253State(wchar_t ch, int32_t codewordPosition);
   static int32_t findMinimums(std::vector<float>& charCounts,
-                              CFX_ArrayTemplate<int32_t>& intCharCounts,
+                              std::vector<int32_t>& intCharCounts,
                               int32_t min,
-                              CFX_ArrayTemplate<uint8_t>& mins);
-  static int32_t getMinimumCount(CFX_ArrayTemplate<uint8_t>& mins);
+                              std::vector<uint8_t>& mins);
+  static int32_t getMinimumCount(std::vector<uint8_t>& mins);
   static bool isNativeC40(wchar_t ch);
   static bool isNativeText(wchar_t ch);
   static bool isNativeX12(wchar_t ch);
diff --git a/xfa/fxbarcode/oned/BC_OnedCode128Writer.cpp b/xfa/fxbarcode/oned/BC_OnedCode128Writer.cpp
index c1e28a5..7adbb1f 100644
--- a/xfa/fxbarcode/oned/BC_OnedCode128Writer.cpp
+++ b/xfa/fxbarcode/oned/BC_OnedCode128Writer.cpp
@@ -187,7 +187,7 @@
     e = BCExceptionContentsLengthShouldBetween1and80;
     return nullptr;
   }
-  CFX_ArrayTemplate<const int32_t*> patterns;
+  std::vector<const int32_t*> patterns;
   int32_t checkSum = 0;
   if (m_codeFormat == BC_CODE128_B) {
     checkSum = Encode128B(contents, &patterns);
@@ -198,20 +198,20 @@
     return nullptr;
   }
   checkSum %= 103;
-  patterns.Add(CODE_PATTERNS[checkSum]);
-  patterns.Add(CODE_PATTERNS[CODE_STOP]);
+  patterns.push_back(CODE_PATTERNS[checkSum]);
+  patterns.push_back(CODE_PATTERNS[CODE_STOP]);
   m_iContentLen = contents.GetLength() + 3;
   int32_t codeWidth = 0;
-  for (int32_t k = 0; k < patterns.GetSize(); k++) {
+  for (size_t k = 0; k < patterns.size(); k++) {
     const int32_t* pattern = patterns[k];
-    for (int32_t j = 0; j < 7; j++) {
+    for (size_t j = 0; j < 7; j++) {
       codeWidth += pattern[j];
     }
   }
   outLength = codeWidth;
   uint8_t* result = FX_Alloc(uint8_t, outLength);
   int32_t pos = 0;
-  for (int32_t j = 0; j < patterns.GetSize(); j++) {
+  for (size_t j = 0; j < patterns.size(); j++) {
     const int32_t* pattern = patterns[j];
     pos += AppendPattern(result, pos, pattern, 7, 1, e);
     if (e != BCExceptionNO) {
@@ -224,17 +224,17 @@
 
 int32_t CBC_OnedCode128Writer::Encode128B(
     const CFX_ByteString& contents,
-    CFX_ArrayTemplate<const int32_t*>* patterns) {
+    std::vector<const int32_t*>* patterns) {
   int32_t checkSum = 0;
   int32_t checkWeight = 1;
   int32_t position = 0;
-  patterns->Add(CODE_PATTERNS[CODE_START_B]);
+  patterns->push_back(CODE_PATTERNS[CODE_START_B]);
   checkSum += CODE_START_B * checkWeight;
   while (position < contents.GetLength()) {
     int32_t patternIndex = 0;
     patternIndex = contents[position] - ' ';
     position += 1;
-    patterns->Add(CODE_PATTERNS[patternIndex]);
+    patterns->push_back(CODE_PATTERNS[patternIndex]);
     checkSum += patternIndex * checkWeight;
     if (position != 0) {
       checkWeight++;
@@ -245,11 +245,11 @@
 
 int32_t CBC_OnedCode128Writer::Encode128C(
     const CFX_ByteString& contents,
-    CFX_ArrayTemplate<const int32_t*>* patterns) {
+    std::vector<const int32_t*>* patterns) {
   int32_t checkSum = 0;
   int32_t checkWeight = 1;
   int32_t position = 0;
-  patterns->Add(CODE_PATTERNS[CODE_START_C]);
+  patterns->push_back(CODE_PATTERNS[CODE_START_C]);
   checkSum += CODE_START_C * checkWeight;
   while (position < contents.GetLength()) {
     int32_t patternIndex = 0;
@@ -266,7 +266,7 @@
         position += 2;
       }
     }
-    patterns->Add(CODE_PATTERNS[patternIndex]);
+    patterns->push_back(CODE_PATTERNS[patternIndex]);
     checkSum += patternIndex * checkWeight;
     if (position != 0) {
       checkWeight++;
diff --git a/xfa/fxbarcode/oned/BC_OnedCode128Writer.h b/xfa/fxbarcode/oned/BC_OnedCode128Writer.h
index 60a2f03..ff6e4d0 100644
--- a/xfa/fxbarcode/oned/BC_OnedCode128Writer.h
+++ b/xfa/fxbarcode/oned/BC_OnedCode128Writer.h
@@ -7,6 +7,8 @@
 #ifndef XFA_FXBARCODE_ONED_BC_ONEDCODE128WRITER_H_
 #define XFA_FXBARCODE_ONED_BC_ONEDCODE128WRITER_H_
 
+#include <vector>
+
 #include "core/fxcrt/fx_string.h"
 #include "core/fxcrt/fx_system.h"
 #include "xfa/fxbarcode/oned/BC_OneDimWriter.h"
@@ -43,9 +45,9 @@
  private:
   bool IsDigits(const CFX_ByteString& contents, int32_t start, int32_t length);
   int32_t Encode128B(const CFX_ByteString& contents,
-                     CFX_ArrayTemplate<const int32_t*>* patterns);
+                     std::vector<const int32_t*>* patterns);
   int32_t Encode128C(const CFX_ByteString& contents,
-                     CFX_ArrayTemplate<const int32_t*>* patterns);
+                     std::vector<const int32_t*>* patterns);
 
   BC_TYPE m_codeFormat;
 };
diff --git a/xfa/fxbarcode/pdf417/BC_PDF417.cpp b/xfa/fxbarcode/pdf417/BC_PDF417.cpp
index f7aad69..0bc6680 100644
--- a/xfa/fxbarcode/pdf417/BC_PDF417.cpp
+++ b/xfa/fxbarcode/pdf417/BC_PDF417.cpp
@@ -412,12 +412,12 @@
   if (e != BCExceptionNO)
     return;
   int32_t sourceCodeWords = highLevel.GetLength();
-  CFX_ArrayTemplate<int32_t>* dimension =
+  std::vector<int32_t>* dimension =
       determineDimensions(sourceCodeWords, errorCorrectionCodeWords, e);
   if (e != BCExceptionNO)
     return;
-  int32_t cols = dimension->GetAt(0);
-  int32_t rows = dimension->GetAt(1);
+  int32_t cols = (*dimension)[0];
+  int32_t rows = (*dimension)[1];
   delete dimension;
   int32_t pad = getNumberOfPadCodewords(sourceCodeWords,
                                         errorCorrectionCodeWords, cols, rows);
@@ -536,12 +536,12 @@
   }
 }
 
-CFX_ArrayTemplate<int32_t>* CBC_PDF417::determineDimensions(
+std::vector<int32_t>* CBC_PDF417::determineDimensions(
     int32_t sourceCodeWords,
     int32_t errorCorrectionCodeWords,
     int32_t& e) {
   float ratio = 0.0f;
-  CFX_ArrayTemplate<int32_t>* dimension = nullptr;
+  std::vector<int32_t>* dimension = nullptr;
   for (int32_t cols = m_minCols; cols <= m_maxCols; cols++) {
     int32_t rows =
         calculateNumberOfRows(sourceCodeWords, errorCorrectionCodeWords, cols);
@@ -559,21 +559,21 @@
     }
     ratio = newRatio;
     delete dimension;
-    dimension = new CFX_ArrayTemplate<int32_t>;
-    dimension->Add(cols);
-    dimension->Add(rows);
+    dimension = new std::vector<int32_t>;
+    dimension->push_back(cols);
+    dimension->push_back(rows);
   }
   if (!dimension) {
     int32_t rows = calculateNumberOfRows(sourceCodeWords,
                                          errorCorrectionCodeWords, m_minCols);
     if (rows < m_minRows) {
-      dimension = new CFX_ArrayTemplate<int32_t>;
-      dimension->Add(m_minCols);
-      dimension->Add(m_minRows);
+      dimension = new std::vector<int32_t>;
+      dimension->push_back(m_minCols);
+      dimension->push_back(m_minRows);
     } else if (rows >= 3 && rows <= 90) {
-      dimension = new CFX_ArrayTemplate<int32_t>;
-      dimension->Add(m_minCols);
-      dimension->Add(rows);
+      dimension = new std::vector<int32_t>;
+      dimension->push_back(m_minCols);
+      dimension->push_back(rows);
     }
   }
   if (!dimension) {
diff --git a/xfa/fxbarcode/pdf417/BC_PDF417.h b/xfa/fxbarcode/pdf417/BC_PDF417.h
index b382e5d..0d8fbfa 100644
--- a/xfa/fxbarcode/pdf417/BC_PDF417.h
+++ b/xfa/fxbarcode/pdf417/BC_PDF417.h
@@ -8,6 +8,7 @@
 #define XFA_FXBARCODE_PDF417_BC_PDF417_H_
 
 #include <memory>
+#include <vector>
 
 #include "core/fxcrt/fx_basic.h"
 #include "xfa/fxbarcode/pdf417/BC_PDF417Compaction.h"
@@ -51,10 +52,9 @@
                       int32_t r,
                       int32_t errorCorrectionLevel,
                       CBC_BarcodeMatrix* logic);
-  CFX_ArrayTemplate<int32_t>* determineDimensions(
-      int32_t sourceCodeWords,
-      int32_t errorCorrectionCodeWords,
-      int32_t& e);
+  std::vector<int32_t>* determineDimensions(int32_t sourceCodeWords,
+                                            int32_t errorCorrectionCodeWords,
+                                            int32_t& e);
 
   std::unique_ptr<CBC_BarcodeMatrix> m_barcodeMatrix;
   bool m_compact;
diff --git a/xfa/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.cpp b/xfa/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.cpp
index c1f4da1..68bc799 100644
--- a/xfa/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.cpp
+++ b/xfa/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.cpp
@@ -24,23 +24,22 @@
 #include "xfa/fxbarcode/pdf417/BC_PDF417BarcodeRow.h"
 
 CBC_BarcodeMatrix::CBC_BarcodeMatrix(int32_t height, int32_t width) {
-  m_matrix.SetSize(height + 2);
-  for (int32_t i = 0, matrixLength = m_matrix.GetSize(); i < matrixLength;
-       i++) {
+  m_matrix.resize(height + 2);
+  for (size_t i = 0, matrixLength = m_matrix.size(); i < matrixLength; ++i)
     m_matrix[i] = new CBC_BarcodeRow((width + 4) * 17 + 1);
-  }
+
   m_width = width * 17;
   m_height = height + 2;
   m_currentRow = 0;
   m_outHeight = 0;
   m_outWidth = 0;
 }
-CBC_BarcodeMatrix::~CBC_BarcodeMatrix() {
-  for (int32_t i = 0; i < m_matrix.GetSize(); i++)
-    delete m_matrix.GetAt(i);
 
-  m_matrixOut.RemoveAll();
+CBC_BarcodeMatrix::~CBC_BarcodeMatrix() {
+  for (size_t i = 0; i < m_matrix.size(); i++)
+    delete m_matrix[i];
 }
+
 void CBC_BarcodeMatrix::set(int32_t x, int32_t y, uint8_t value) {
   m_matrix[y]->set(x, value);
 }
@@ -59,30 +58,27 @@
 int32_t CBC_BarcodeMatrix::getHeight() {
   return m_outHeight;
 }
-CFX_ArrayTemplate<uint8_t>& CBC_BarcodeMatrix::getMatrix() {
+std::vector<uint8_t>& CBC_BarcodeMatrix::getMatrix() {
   return getScaledMatrix(1, 1);
 }
-CFX_ArrayTemplate<uint8_t>& CBC_BarcodeMatrix::getScaledMatrix(int32_t scale) {
+std::vector<uint8_t>& CBC_BarcodeMatrix::getScaledMatrix(int32_t scale) {
   return getScaledMatrix(scale, scale);
 }
-CFX_ArrayTemplate<uint8_t>& CBC_BarcodeMatrix::getScaledMatrix(int32_t xScale,
-                                                               int32_t yScale) {
-  int32_t yMax = m_height * yScale;
-  CFX_ArrayTemplate<uint8_t> bytearray;
-  bytearray.Copy(m_matrix[0]->getScaledRow(xScale));
-  int32_t xMax = bytearray.GetSize();
-  m_matrixOut.SetSize(xMax * yMax);
+std::vector<uint8_t>& CBC_BarcodeMatrix::getScaledMatrix(int32_t xScale,
+                                                         int32_t yScale) {
+  size_t yMax = m_height * yScale;
+  std::vector<uint8_t> bytearray = m_matrix[0]->getScaledRow(xScale);
+  size_t xMax = bytearray.size();
+  m_matrixOut.resize(xMax * yMax);
   m_outWidth = xMax;
   m_outHeight = yMax;
   int32_t k = 0;
-  for (int32_t i = 0; i < yMax; i++) {
-    if (i != 0) {
-      bytearray.Copy(m_matrix[i / yScale]->getScaledRow(xScale));
-    }
+  for (size_t i = 0; i < yMax; i++) {
+    if (i != 0)
+      bytearray = m_matrix[i / yScale]->getScaledRow(xScale);
     k = i * xMax;
-    for (int32_t l = 0; l < xMax; l++) {
-      m_matrixOut[k + l] = bytearray.GetAt(l);
-    }
+    for (size_t l = 0; l < xMax; l++)
+      m_matrixOut[k + l] = bytearray[l];
   }
   return m_matrixOut;
 }
diff --git a/xfa/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.h b/xfa/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.h
index 95ab547..bf86b7b 100644
--- a/xfa/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.h
+++ b/xfa/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.h
@@ -7,6 +7,8 @@
 #ifndef XFA_FXBARCODE_PDF417_BC_PDF417BARCODEMATRIX_H_
 #define XFA_FXBARCODE_PDF417_BC_PDF417BARCODEMATRIX_H_
 
+#include <vector>
+
 #include "core/fxcrt/fx_basic.h"
 
 class CBC_BarcodeRow;
@@ -21,15 +23,15 @@
   void setMatrix(int32_t x, int32_t y, bool black);
   void startRow();
   CBC_BarcodeRow* getCurrentRow();
-  CFX_ArrayTemplate<uint8_t>& getMatrix();
-  CFX_ArrayTemplate<uint8_t>& getScaledMatrix(int32_t scale);
-  CFX_ArrayTemplate<uint8_t>& getScaledMatrix(int32_t xScale, int32_t yScale);
+  std::vector<uint8_t>& getMatrix();
+  std::vector<uint8_t>& getScaledMatrix(int32_t scale);
+  std::vector<uint8_t>& getScaledMatrix(int32_t xScale, int32_t yScale);
   int32_t getWidth();
   int32_t getHeight();
 
  private:
-  CFX_ArrayTemplate<CBC_BarcodeRow*> m_matrix;
-  CFX_ArrayTemplate<uint8_t> m_matrixOut;
+  std::vector<CBC_BarcodeRow*> m_matrix;
+  std::vector<uint8_t> m_matrixOut;
   int32_t m_currentRow;
   int32_t m_height;
   int32_t m_width;
diff --git a/xfa/fxbarcode/pdf417/BC_PDF417BarcodeRow.cpp b/xfa/fxbarcode/pdf417/BC_PDF417BarcodeRow.cpp
index 243af70..427da9d 100644
--- a/xfa/fxbarcode/pdf417/BC_PDF417BarcodeRow.cpp
+++ b/xfa/fxbarcode/pdf417/BC_PDF417BarcodeRow.cpp
@@ -22,32 +22,31 @@
 
 #include "xfa/fxbarcode/pdf417/BC_PDF417BarcodeRow.h"
 
-CBC_BarcodeRow::CBC_BarcodeRow(int32_t width) {
-  m_row.SetSize(width);
-  m_currentLocation = 0;
-}
-CBC_BarcodeRow::~CBC_BarcodeRow() {
-  m_output.RemoveAll();
-  m_row.RemoveAll();
-}
+CBC_BarcodeRow::CBC_BarcodeRow(size_t width)
+    : m_row(width), m_currentLocation(0) {}
+
+CBC_BarcodeRow::~CBC_BarcodeRow() {}
+
 void CBC_BarcodeRow::set(int32_t x, uint8_t value) {
-  m_row.SetAt(x, value);
+  m_row[x] = value;
 }
+
 void CBC_BarcodeRow::set(int32_t x, bool black) {
-  m_row.SetAt(x, (uint8_t)(black ? 1 : 0));
+  m_row[x] = black ? 1 : 0;
 }
+
 void CBC_BarcodeRow::addBar(bool black, int32_t width) {
-  for (int32_t ii = 0; ii < width; ii++) {
+  for (int32_t ii = 0; ii < width; ii++)
     set(m_currentLocation++, black);
-  }
 }
-CFX_ArrayTemplate<uint8_t>& CBC_BarcodeRow::getRow() {
+
+std::vector<uint8_t>& CBC_BarcodeRow::getRow() {
   return m_row;
 }
-CFX_ArrayTemplate<uint8_t>& CBC_BarcodeRow::getScaledRow(int32_t scale) {
-  m_output.SetSize(m_row.GetSize() * scale);
-  for (int32_t i = 0; i < m_output.GetSize(); i++) {
-    m_output[i] = (m_row[i / scale]);
-  }
+
+std::vector<uint8_t>& CBC_BarcodeRow::getScaledRow(int32_t scale) {
+  m_output.resize(m_row.size() * scale);
+  for (size_t i = 0; i < m_output.size(); i++)
+    m_output[i] = m_row[i / scale];
   return m_output;
 }
diff --git a/xfa/fxbarcode/pdf417/BC_PDF417BarcodeRow.h b/xfa/fxbarcode/pdf417/BC_PDF417BarcodeRow.h
index 7d9d19c..9130a0c 100644
--- a/xfa/fxbarcode/pdf417/BC_PDF417BarcodeRow.h
+++ b/xfa/fxbarcode/pdf417/BC_PDF417BarcodeRow.h
@@ -7,22 +7,24 @@
 #ifndef XFA_FXBARCODE_PDF417_BC_PDF417BARCODEROW_H_
 #define XFA_FXBARCODE_PDF417_BC_PDF417BARCODEROW_H_
 
+#include <vector>
+
 #include "core/fxcrt/fx_basic.h"
 
 class CBC_BarcodeRow {
  public:
-  explicit CBC_BarcodeRow(int32_t width);
+  explicit CBC_BarcodeRow(size_t width);
   virtual ~CBC_BarcodeRow();
 
   void set(int32_t x, uint8_t value);
   void set(int32_t x, bool black);
   void addBar(bool black, int32_t width);
-  CFX_ArrayTemplate<uint8_t>& getRow();
-  CFX_ArrayTemplate<uint8_t>& getScaledRow(int32_t scale);
+  std::vector<uint8_t>& getRow();
+  std::vector<uint8_t>& getScaledRow(int32_t scale);
 
  private:
-  CFX_ArrayTemplate<uint8_t> m_row;
-  CFX_ArrayTemplate<uint8_t> m_output;
+  std::vector<uint8_t> m_row;
+  std::vector<uint8_t> m_output;
   int32_t m_currentLocation;
 };
 
diff --git a/xfa/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.cpp b/xfa/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.cpp
index 0d9c7cf..5402f3d 100644
--- a/xfa/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.cpp
+++ b/xfa/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.cpp
@@ -71,9 +71,9 @@
     }
     msg += ch;
   }
-  CFX_ArrayTemplate<uint8_t> byteArr;
+  std::vector<uint8_t> byteArr;
   for (int32_t k = 0; k < bytes.GetLength(); k++) {
-    byteArr.Add(bytes.GetAt(k));
+    byteArr.push_back(bytes.GetAt(k));
   }
   CFX_WideString sb;
   len = msg.GetLength();
@@ -82,7 +82,7 @@
   if (compaction == TEXT) {
     encodeText(msg, p, len, sb, textSubMode);
   } else if (compaction == BYTES) {
-    encodeBinary(&byteArr, p, byteArr.GetSize(), BYTE_COMPACTION, sb);
+    encodeBinary(&byteArr, p, byteArr.size(), BYTE_COMPACTION, sb);
   } else if (compaction == NUMERIC) {
     sb += (wchar_t)LATCH_TO_NUMERIC;
     encodeNumeric(msg, p, len, sb);
@@ -261,7 +261,7 @@
   }
   return submode;
 }
-void CBC_PDF417HighLevelEncoder::encodeBinary(CFX_ArrayTemplate<uint8_t>* bytes,
+void CBC_PDF417HighLevelEncoder::encodeBinary(std::vector<uint8_t>* bytes,
                                               int32_t startpos,
                                               int32_t count,
                                               int32_t startmode,
@@ -278,7 +278,7 @@
       int64_t t = 0;
       for (i = 0; i < 6; i++) {
         t <<= 8;
-        t += bytes->GetAt(idx + i) & 0xff;
+        t += (*bytes)[idx + i] & 0xff;
       }
       for (i = 0; i < 5; i++) {
         chars[i] = (wchar_t)(t % 900);
@@ -294,7 +294,7 @@
     sb += (wchar_t)LATCH_TO_BYTE_PADDED;
   }
   for (i = idx; i < startpos + count; i++) {
-    int32_t ch = bytes->GetAt(i) & 0xff;
+    int32_t ch = (*bytes)[i] & 0xff;
     sb += (wchar_t)ch;
   }
 }
@@ -388,7 +388,7 @@
 }
 int32_t CBC_PDF417HighLevelEncoder::determineConsecutiveBinaryCount(
     CFX_WideString msg,
-    CFX_ArrayTemplate<uint8_t>* bytes,
+    std::vector<uint8_t>* bytes,
     int32_t startpos,
     int32_t& e) {
   int32_t len = msg.GetLength();
@@ -420,7 +420,7 @@
       return idx - startpos;
     }
     ch = msg.GetAt(idx);
-    if (bytes->GetAt(idx) == 63 && ch != '?') {
+    if ((*bytes)[idx] == 63 && ch != '?') {
       e = BCExceptionNonEncodableCharacterDetected;
       return -1;
     }
diff --git a/xfa/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.h b/xfa/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.h
index 01c2be0..48b8d00 100644
--- a/xfa/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.h
+++ b/xfa/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.h
@@ -7,6 +7,8 @@
 #ifndef XFA_FXBARCODE_PDF417_BC_PDF417HIGHLEVELENCODER_H_
 #define XFA_FXBARCODE_PDF417_BC_PDF417HIGHLEVELENCODER_H_
 
+#include <vector>
+
 #include "core/fxcrt/fx_basic.h"
 #include "core/fxcrt/fx_string.h"
 #include "xfa/fxbarcode/pdf417/BC_PDF417Compaction.h"
@@ -39,7 +41,7 @@
                             int32_t count,
                             CFX_WideString& sb,
                             int32_t initialSubmode);
-  static void encodeBinary(CFX_ArrayTemplate<uint8_t>* bytes,
+  static void encodeBinary(std::vector<uint8_t>* bytes,
                            int32_t startpos,
                            int32_t count,
                            int32_t startmode,
@@ -58,11 +60,10 @@
                                                 int32_t startpos);
   static int32_t determineConsecutiveTextCount(CFX_WideString msg,
                                                int32_t startpos);
-  static int32_t determineConsecutiveBinaryCount(
-      CFX_WideString msg,
-      CFX_ArrayTemplate<uint8_t>* bytes,
-      int32_t startpos,
-      int32_t& e);
+  static int32_t determineConsecutiveBinaryCount(CFX_WideString msg,
+                                                 std::vector<uint8_t>* bytes,
+                                                 int32_t startpos,
+                                                 int32_t& e);
 
   friend class PDF417HighLevelEncoder_EncodeNumeric_Test;
   friend class PDF417HighLevelEncoder_EncodeBinary_Test;
diff --git a/xfa/fxbarcode/pdf417/BC_PDF417HighLevelEncoder_unittest.cpp b/xfa/fxbarcode/pdf417/BC_PDF417HighLevelEncoder_unittest.cpp
index 2cd60fe..a1f3283 100644
--- a/xfa/fxbarcode/pdf417/BC_PDF417HighLevelEncoder_unittest.cpp
+++ b/xfa/fxbarcode/pdf417/BC_PDF417HighLevelEncoder_unittest.cpp
@@ -43,11 +43,11 @@
   CBC_PDF417HighLevelEncoder::Initialize();
   for (size_t i = 0; i < FX_ArraySize(encode_binary_cases); ++i) {
     EncodeBinaryCase* ptr = &encode_binary_cases[i];
-    CFX_ArrayTemplate<uint8_t> input_array;
+    std::vector<uint8_t> input_array;
     size_t input_length = strlen(ptr->input);
-    input_array.SetSize(input_length);
+    input_array.resize(input_length);
     for (size_t j = 0; j < input_length; ++j) {
-      input_array.SetAt(j, ptr->input[j]);
+      input_array[j] = ptr->input[j];
     }
     CFX_WideString expected(ptr->expected, ptr->expected_length);
     CFX_WideString result;
diff --git a/xfa/fxbarcode/pdf417/BC_PDF417Writer.cpp b/xfa/fxbarcode/pdf417/BC_PDF417Writer.cpp
index 2c75a14..ddd740d 100644
--- a/xfa/fxbarcode/pdf417/BC_PDF417Writer.cpp
+++ b/xfa/fxbarcode/pdf417/BC_PDF417Writer.cpp
@@ -64,9 +64,8 @@
   int32_t lineThickness = 2;
   int32_t aspectRatio = 4;
   CBC_BarcodeMatrix* barcodeMatrix = encoder.getBarcodeMatrix();
-  CFX_ArrayTemplate<uint8_t> originalScale;
-  originalScale.Copy(barcodeMatrix->getScaledMatrix(
-      lineThickness, aspectRatio * lineThickness));
+  std::vector<uint8_t> originalScale = barcodeMatrix->getScaledMatrix(
+      lineThickness, aspectRatio * lineThickness);
   int32_t width = outWidth;
   int32_t height = outHeight;
   outWidth = barcodeMatrix->getWidth();
@@ -88,9 +87,8 @@
     scale = scaleY;
   }
   if (scale > 1) {
-    originalScale.RemoveAll();
-    originalScale.Copy(barcodeMatrix->getScaledMatrix(
-        scale * lineThickness, scale * aspectRatio * lineThickness));
+    originalScale = barcodeMatrix->getScaledMatrix(
+        scale * lineThickness, scale * aspectRatio * lineThickness);
     if (rotated) {
       rotateArray(originalScale, outHeight, outWidth);
       int32_t temp = outHeight;
@@ -99,14 +97,13 @@
     }
   }
   uint8_t* result = FX_Alloc2D(uint8_t, outHeight, outWidth);
-  FXSYS_memcpy(result, originalScale.GetData(), outHeight * outWidth);
+  FXSYS_memcpy(result, originalScale.data(), outHeight * outWidth);
   return result;
 }
-void CBC_PDF417Writer::rotateArray(CFX_ArrayTemplate<uint8_t>& bitarray,
+void CBC_PDF417Writer::rotateArray(std::vector<uint8_t>& bitarray,
                                    int32_t height,
                                    int32_t width) {
-  CFX_ArrayTemplate<uint8_t> temp;
-  temp.Copy(bitarray);
+  std::vector<uint8_t> temp = bitarray;
   for (int32_t ii = 0; ii < height; ii++) {
     int32_t inverseii = height - ii - 1;
     for (int32_t jj = 0; jj < width; jj++) {
diff --git a/xfa/fxbarcode/pdf417/BC_PDF417Writer.h b/xfa/fxbarcode/pdf417/BC_PDF417Writer.h
index 420c441..564f808 100644
--- a/xfa/fxbarcode/pdf417/BC_PDF417Writer.h
+++ b/xfa/fxbarcode/pdf417/BC_PDF417Writer.h
@@ -7,6 +7,8 @@
 #ifndef XFA_FXBARCODE_PDF417_BC_PDF417WRITER_H_
 #define XFA_FXBARCODE_PDF417_BC_PDF417WRITER_H_
 
+#include <vector>
+
 #include "core/fxcrt/fx_string.h"
 #include "core/fxcrt/fx_system.h"
 #include "xfa/fxbarcode/BC_TwoDimWriter.h"
@@ -27,7 +29,7 @@
   void SetTruncated(bool truncated);
 
  private:
-  void rotateArray(CFX_ArrayTemplate<uint8_t>& bitarray,
+  void rotateArray(std::vector<uint8_t>& bitarray,
                    int32_t width,
                    int32_t height);
   bool m_bTruncated;
diff --git a/xfa/fxbarcode/qrcode/BC_QRCoderECBlocks.cpp b/xfa/fxbarcode/qrcode/BC_QRCoderECBlocks.cpp
index 507c918..8894695 100644
--- a/xfa/fxbarcode/qrcode/BC_QRCoderECBlocks.cpp
+++ b/xfa/fxbarcode/qrcode/BC_QRCoderECBlocks.cpp
@@ -26,19 +26,19 @@
 CBC_QRCoderECBlocks::CBC_QRCoderECBlocks(int32_t ecCodeWordsPerBlock,
                                          CBC_QRCoderECB* ecBlocks)
     : m_ecCodeWordsPerBlock(ecCodeWordsPerBlock) {
-  m_ecBlocksArray.Add(ecBlocks);
+  m_ecBlocksArray.push_back(ecBlocks);
 }
 
 CBC_QRCoderECBlocks::CBC_QRCoderECBlocks(int32_t ecCodeWordsPerBlock,
                                          CBC_QRCoderECB* ecBlocks1,
                                          CBC_QRCoderECB* ecBlocks2)
     : m_ecCodeWordsPerBlock(ecCodeWordsPerBlock) {
-  m_ecBlocksArray.Add(ecBlocks1);
-  m_ecBlocksArray.Add(ecBlocks2);
+  m_ecBlocksArray.push_back(ecBlocks1);
+  m_ecBlocksArray.push_back(ecBlocks2);
 }
 
 CBC_QRCoderECBlocks::~CBC_QRCoderECBlocks() {
-  for (int32_t i = 0; i < m_ecBlocksArray.GetSize(); i++)
+  for (size_t i = 0; i < m_ecBlocksArray.size(); i++)
     delete m_ecBlocksArray[i];
 }
 
@@ -48,7 +48,7 @@
 
 int32_t CBC_QRCoderECBlocks::GetNumBlocks() const {
   int32_t total = 0;
-  for (int32_t i = 0; i < m_ecBlocksArray.GetSize(); i++)
+  for (size_t i = 0; i < m_ecBlocksArray.size(); i++)
     total += m_ecBlocksArray[i]->GetCount();
 
   return total;
@@ -58,6 +58,6 @@
   return m_ecCodeWordsPerBlock * GetNumBlocks();
 }
 
-CFX_ArrayTemplate<CBC_QRCoderECB*>* CBC_QRCoderECBlocks::GetECBlocks() {
+std::vector<CBC_QRCoderECB*>* CBC_QRCoderECBlocks::GetECBlocks() {
   return &m_ecBlocksArray;
 }
diff --git a/xfa/fxbarcode/qrcode/BC_QRCoderECBlocks.h b/xfa/fxbarcode/qrcode/BC_QRCoderECBlocks.h
index a428f06..816a983 100644
--- a/xfa/fxbarcode/qrcode/BC_QRCoderECBlocks.h
+++ b/xfa/fxbarcode/qrcode/BC_QRCoderECBlocks.h
@@ -7,6 +7,8 @@
 #ifndef XFA_FXBARCODE_QRCODE_BC_QRCODERECBLOCKS_H_
 #define XFA_FXBARCODE_QRCODE_BC_QRCODERECBLOCKS_H_
 
+#include <vector>
+
 #include "core/fxcrt/fx_basic.h"
 
 class CBC_QRCoderECB;
@@ -22,11 +24,11 @@
   int32_t GetECCodeWordsPerBlock() const;
   int32_t GetNumBlocks() const;
   int32_t GetTotalECCodeWords() const;
-  CFX_ArrayTemplate<CBC_QRCoderECB*>* GetECBlocks();
+  std::vector<CBC_QRCoderECB*>* GetECBlocks();
 
  private:
   int32_t m_ecCodeWordsPerBlock;
-  CFX_ArrayTemplate<CBC_QRCoderECB*> m_ecBlocksArray;
+  std::vector<CBC_QRCoderECB*> m_ecBlocksArray;
 };
 
 #endif  // XFA_FXBARCODE_QRCODE_BC_QRCODERECBLOCKS_H_
diff --git a/xfa/fxbarcode/qrcode/BC_QRCoderEncoder.cpp b/xfa/fxbarcode/qrcode/BC_QRCoderEncoder.cpp
index 3a442be..2534675 100644
--- a/xfa/fxbarcode/qrcode/BC_QRCoderEncoder.cpp
+++ b/xfa/fxbarcode/qrcode/BC_QRCoderEncoder.cpp
@@ -101,12 +101,12 @@
       if (e != BCExceptionNO)
         return;
     } else if (tempMode == CBC_QRCoderMode::sBYTE) {
-      CFX_ArrayTemplate<uint8_t> bytes;
+      std::vector<uint8_t> bytes;
       CBC_UtilCodingConvert::LocaleToUtf8(splitResult.second, bytes);
       AppendModeInfo(tempMode, &headerAndDataBits, e);
       if (e != BCExceptionNO)
         return;
-      AppendLengthInfo(bytes.GetSize(), qrCode->GetVersion(), tempMode,
+      AppendLengthInfo(bytes.size(), qrCode->GetVersion(), tempMode,
                        &headerAndDataBits, e);
       if (e != BCExceptionNO)
         return;
@@ -765,10 +765,10 @@
   }
 }
 
-void CBC_QRCoderEncoder::Append8BitBytes(CFX_ArrayTemplate<uint8_t>& bytes,
+void CBC_QRCoderEncoder::Append8BitBytes(std::vector<uint8_t>& bytes,
                                          CBC_QRCoderBitVector* bits,
                                          int32_t& e) {
-  for (int32_t i = 0; i < bytes.GetSize(); i++) {
+  for (size_t i = 0; i < bytes.size(); i++) {
     bits->AppendBits(bytes[i], 8, e);
     if (e != BCExceptionNO)
       return;
@@ -778,9 +778,9 @@
 void CBC_QRCoderEncoder::AppendKanjiBytes(const CFX_ByteString& content,
                                           CBC_QRCoderBitVector* bits,
                                           int32_t& e) {
-  CFX_ArrayTemplate<uint8_t> bytes;
+  std::vector<uint8_t> bytes;
   uint32_t value = 0;
-  for (int32_t i = 0; i < bytes.GetSize(); i += 2) {
+  for (size_t i = 0; i < bytes.size(); i += 2) {
     value = (uint32_t)((uint8_t)(content[i] << 8) | (uint8_t)content[i + 1]);
     if (value <= 0x9ffc && value >= 0x8140) {
       value -= 0x8140;
@@ -870,7 +870,7 @@
   int32_t dataBytesOffset = 0;
   int32_t maxNumDataBytes = 0;
   int32_t maxNumEcBytes = 0;
-  CFX_ArrayTemplate<CBC_QRCoderBlockPair*> blocks;
+  std::vector<CBC_QRCoderBlockPair*> blocks;
   int32_t i;
   for (i = 0; i < numRSBlocks; i++) {
     int32_t numDataBytesInBlock;
@@ -886,7 +886,7 @@
       return;
     maxNumDataBytes = std::max(maxNumDataBytes, dataBytes->Size());
     maxNumEcBytes = std::max(maxNumEcBytes, ecBytes->Size());
-    blocks.Add(
+    blocks.push_back(
         new CBC_QRCoderBlockPair(std::move(dataBytes), std::move(ecBytes)));
     dataBytesOffset += numDataBytesInBlock;
   }
@@ -895,7 +895,7 @@
     return;
   }
   for (int32_t x = 0; x < maxNumDataBytes; x++) {
-    for (int32_t j = 0; j < blocks.GetSize(); j++) {
+    for (size_t j = 0; j < blocks.size(); j++) {
       const CBC_CommonByteArray* dataBytes = blocks[j]->GetDataBytes();
       if (x < dataBytes->Size()) {
         result->AppendBits(dataBytes->At(x), 8, e);
@@ -905,7 +905,7 @@
     }
   }
   for (int32_t y = 0; y < maxNumEcBytes; y++) {
-    for (int32_t l = 0; l < blocks.GetSize(); l++) {
+    for (size_t l = 0; l < blocks.size(); l++) {
       const CBC_CommonByteArray* ecBytes = blocks[l]->GetErrorCorrectionBytes();
       if (y < ecBytes->Size()) {
         result->AppendBits(ecBytes->At(y), 8, e);
@@ -914,7 +914,7 @@
       }
     }
   }
-  for (int32_t k = 0; k < blocks.GetSize(); k++) {
+  for (size_t k = 0; k < blocks.size(); k++) {
     delete blocks[k];
   }
   if (numTotalBytes != result->sizeInBytes())
@@ -953,8 +953,7 @@
     int32_t numEcBytesInBlock,
     int32_t& e) {
   int32_t numDataBytes = dataBytes->Size();
-  CFX_ArrayTemplate<int32_t> toEncode;
-  toEncode.SetSize(numDataBytes + numEcBytesInBlock);
+  std::vector<int32_t> toEncode(numDataBytes + numEcBytesInBlock);
   for (int32_t i = 0; i < numDataBytes; i++) {
     toEncode[i] = (dataBytes->At(i));
   }
diff --git a/xfa/fxbarcode/qrcode/BC_QRCoderEncoder.h b/xfa/fxbarcode/qrcode/BC_QRCoderEncoder.h
index a1b078f..77de6e5 100644
--- a/xfa/fxbarcode/qrcode/BC_QRCoderEncoder.h
+++ b/xfa/fxbarcode/qrcode/BC_QRCoderEncoder.h
@@ -62,7 +62,7 @@
                               CBC_QRCoderBitVector* bits,
                               CFX_ByteString encoding,
                               int32_t& e);
-  static void Append8BitBytes(CFX_ArrayTemplate<uint8_t>& bytes,
+  static void Append8BitBytes(std::vector<uint8_t>& bytes,
                               CBC_QRCoderBitVector* bits,
                               int32_t& e);
   static void AppendKanjiBytes(const CFX_ByteString& content,
diff --git a/xfa/fxbarcode/qrcode/BC_QRCoderVersion.cpp b/xfa/fxbarcode/qrcode/BC_QRCoderVersion.cpp
index befdc17..da13700 100644
--- a/xfa/fxbarcode/qrcode/BC_QRCoderVersion.cpp
+++ b/xfa/fxbarcode/qrcode/BC_QRCoderVersion.cpp
@@ -54,14 +54,14 @@
     0x1CC1A, 0x1D33F, 0x1ED75, 0x1F250, 0x209D5, 0x216F0, 0x228BA,
     0x2379F, 0x24B0B, 0x2542E, 0x26A64, 0x27541, 0x28C69};
 
-CFX_ArrayTemplate<CBC_QRCoderVersion*>* CBC_QRCoderVersion::VERSION = nullptr;
+std::vector<CBC_QRCoderVersion*>* CBC_QRCoderVersion::VERSION = nullptr;
 
 void CBC_QRCoderVersion::Initialize() {
-  VERSION = new CFX_ArrayTemplate<CBC_QRCoderVersion*>();
+  VERSION = new std::vector<CBC_QRCoderVersion*>();
 }
 void CBC_QRCoderVersion::Finalize() {
-  for (int32_t i = 0; i < VERSION->GetSize(); i++)
-    delete VERSION->GetAt(i);
+  for (size_t i = 0; i < VERSION->size(); i++)
+    delete (*VERSION)[i];
 
   delete VERSION;
   VERSION = nullptr;
@@ -72,14 +72,14 @@
                                        CBC_QRCoderECBlocks* ecBlocks3,
                                        CBC_QRCoderECBlocks* ecBlocks4) {
   m_versionNumber = versionNumber;
-  m_ecBlocksArray.Add(ecBlocks1);
-  m_ecBlocksArray.Add(ecBlocks2);
-  m_ecBlocksArray.Add(ecBlocks3);
-  m_ecBlocksArray.Add(ecBlocks4);
+  m_ecBlocksArray.push_back(ecBlocks1);
+  m_ecBlocksArray.push_back(ecBlocks2);
+  m_ecBlocksArray.push_back(ecBlocks3);
+  m_ecBlocksArray.push_back(ecBlocks4);
   int32_t total = 0;
   int32_t ecCodeWords = ecBlocks1->GetECCodeWordsPerBlock();
-  CFX_ArrayTemplate<CBC_QRCoderECB*>* ecbArray = ecBlocks1->GetECBlocks();
-  for (int32_t i = 0; i < ecbArray->GetSize(); i++) {
+  std::vector<CBC_QRCoderECB*>* ecbArray = ecBlocks1->GetECBlocks();
+  for (size_t i = 0; i < ecbArray->size(); i++) {
     CBC_QRCoderECB* ecBlock = (*ecbArray)[i];
     total += ecBlock->GetCount() * (ecBlock->GetDataCodeWords() + ecCodeWords);
   }
@@ -88,273 +88,273 @@
     case 1:
       break;
     case 2:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(18);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(18);
       break;
     case 3:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(22);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(22);
       break;
     case 4:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(26);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(26);
       break;
     case 5:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(30);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(30);
       break;
     case 6:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(34);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(34);
       break;
     case 7:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(22);
-      m_alignmentPatternCenters.Add(38);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(22);
+      m_alignmentPatternCenters.push_back(38);
       break;
     case 8:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(24);
-      m_alignmentPatternCenters.Add(42);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(24);
+      m_alignmentPatternCenters.push_back(42);
       break;
     case 9:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(26);
-      m_alignmentPatternCenters.Add(46);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(26);
+      m_alignmentPatternCenters.push_back(46);
       break;
     case 10:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(28);
-      m_alignmentPatternCenters.Add(50);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(28);
+      m_alignmentPatternCenters.push_back(50);
       break;
     case 11:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(30);
-      m_alignmentPatternCenters.Add(54);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(30);
+      m_alignmentPatternCenters.push_back(54);
       break;
     case 12:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(32);
-      m_alignmentPatternCenters.Add(58);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(32);
+      m_alignmentPatternCenters.push_back(58);
       break;
     case 13:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(34);
-      m_alignmentPatternCenters.Add(62);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(34);
+      m_alignmentPatternCenters.push_back(62);
       break;
     case 14:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(26);
-      m_alignmentPatternCenters.Add(46);
-      m_alignmentPatternCenters.Add(66);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(26);
+      m_alignmentPatternCenters.push_back(46);
+      m_alignmentPatternCenters.push_back(66);
       break;
     case 15:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(26);
-      m_alignmentPatternCenters.Add(48);
-      m_alignmentPatternCenters.Add(70);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(26);
+      m_alignmentPatternCenters.push_back(48);
+      m_alignmentPatternCenters.push_back(70);
       break;
     case 16:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(26);
-      m_alignmentPatternCenters.Add(50);
-      m_alignmentPatternCenters.Add(74);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(26);
+      m_alignmentPatternCenters.push_back(50);
+      m_alignmentPatternCenters.push_back(74);
       break;
     case 17:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(30);
-      m_alignmentPatternCenters.Add(54);
-      m_alignmentPatternCenters.Add(78);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(30);
+      m_alignmentPatternCenters.push_back(54);
+      m_alignmentPatternCenters.push_back(78);
       break;
     case 18:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(30);
-      m_alignmentPatternCenters.Add(56);
-      m_alignmentPatternCenters.Add(82);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(30);
+      m_alignmentPatternCenters.push_back(56);
+      m_alignmentPatternCenters.push_back(82);
       break;
     case 19:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(30);
-      m_alignmentPatternCenters.Add(58);
-      m_alignmentPatternCenters.Add(86);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(30);
+      m_alignmentPatternCenters.push_back(58);
+      m_alignmentPatternCenters.push_back(86);
       break;
     case 20:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(34);
-      m_alignmentPatternCenters.Add(62);
-      m_alignmentPatternCenters.Add(90);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(34);
+      m_alignmentPatternCenters.push_back(62);
+      m_alignmentPatternCenters.push_back(90);
       break;
     case 21:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(28);
-      m_alignmentPatternCenters.Add(50);
-      m_alignmentPatternCenters.Add(72);
-      m_alignmentPatternCenters.Add(94);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(28);
+      m_alignmentPatternCenters.push_back(50);
+      m_alignmentPatternCenters.push_back(72);
+      m_alignmentPatternCenters.push_back(94);
       break;
     case 22:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(26);
-      m_alignmentPatternCenters.Add(50);
-      m_alignmentPatternCenters.Add(74);
-      m_alignmentPatternCenters.Add(98);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(26);
+      m_alignmentPatternCenters.push_back(50);
+      m_alignmentPatternCenters.push_back(74);
+      m_alignmentPatternCenters.push_back(98);
       break;
     case 23:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(30);
-      m_alignmentPatternCenters.Add(54);
-      m_alignmentPatternCenters.Add(74);
-      m_alignmentPatternCenters.Add(102);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(30);
+      m_alignmentPatternCenters.push_back(54);
+      m_alignmentPatternCenters.push_back(74);
+      m_alignmentPatternCenters.push_back(102);
       break;
     case 24:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(28);
-      m_alignmentPatternCenters.Add(54);
-      m_alignmentPatternCenters.Add(80);
-      m_alignmentPatternCenters.Add(106);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(28);
+      m_alignmentPatternCenters.push_back(54);
+      m_alignmentPatternCenters.push_back(80);
+      m_alignmentPatternCenters.push_back(106);
       break;
     case 25:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(32);
-      m_alignmentPatternCenters.Add(58);
-      m_alignmentPatternCenters.Add(84);
-      m_alignmentPatternCenters.Add(110);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(32);
+      m_alignmentPatternCenters.push_back(58);
+      m_alignmentPatternCenters.push_back(84);
+      m_alignmentPatternCenters.push_back(110);
       break;
     case 26:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(30);
-      m_alignmentPatternCenters.Add(58);
-      m_alignmentPatternCenters.Add(86);
-      m_alignmentPatternCenters.Add(114);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(30);
+      m_alignmentPatternCenters.push_back(58);
+      m_alignmentPatternCenters.push_back(86);
+      m_alignmentPatternCenters.push_back(114);
       break;
     case 27:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(34);
-      m_alignmentPatternCenters.Add(62);
-      m_alignmentPatternCenters.Add(90);
-      m_alignmentPatternCenters.Add(118);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(34);
+      m_alignmentPatternCenters.push_back(62);
+      m_alignmentPatternCenters.push_back(90);
+      m_alignmentPatternCenters.push_back(118);
       break;
     case 28:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(26);
-      m_alignmentPatternCenters.Add(50);
-      m_alignmentPatternCenters.Add(74);
-      m_alignmentPatternCenters.Add(98);
-      m_alignmentPatternCenters.Add(122);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(26);
+      m_alignmentPatternCenters.push_back(50);
+      m_alignmentPatternCenters.push_back(74);
+      m_alignmentPatternCenters.push_back(98);
+      m_alignmentPatternCenters.push_back(122);
       break;
     case 29:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(30);
-      m_alignmentPatternCenters.Add(54);
-      m_alignmentPatternCenters.Add(78);
-      m_alignmentPatternCenters.Add(102);
-      m_alignmentPatternCenters.Add(126);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(30);
+      m_alignmentPatternCenters.push_back(54);
+      m_alignmentPatternCenters.push_back(78);
+      m_alignmentPatternCenters.push_back(102);
+      m_alignmentPatternCenters.push_back(126);
       break;
     case 30:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(26);
-      m_alignmentPatternCenters.Add(52);
-      m_alignmentPatternCenters.Add(78);
-      m_alignmentPatternCenters.Add(104);
-      m_alignmentPatternCenters.Add(130);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(26);
+      m_alignmentPatternCenters.push_back(52);
+      m_alignmentPatternCenters.push_back(78);
+      m_alignmentPatternCenters.push_back(104);
+      m_alignmentPatternCenters.push_back(130);
       break;
     case 31:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(30);
-      m_alignmentPatternCenters.Add(56);
-      m_alignmentPatternCenters.Add(82);
-      m_alignmentPatternCenters.Add(108);
-      m_alignmentPatternCenters.Add(134);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(30);
+      m_alignmentPatternCenters.push_back(56);
+      m_alignmentPatternCenters.push_back(82);
+      m_alignmentPatternCenters.push_back(108);
+      m_alignmentPatternCenters.push_back(134);
       break;
     case 32:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(34);
-      m_alignmentPatternCenters.Add(60);
-      m_alignmentPatternCenters.Add(86);
-      m_alignmentPatternCenters.Add(112);
-      m_alignmentPatternCenters.Add(138);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(34);
+      m_alignmentPatternCenters.push_back(60);
+      m_alignmentPatternCenters.push_back(86);
+      m_alignmentPatternCenters.push_back(112);
+      m_alignmentPatternCenters.push_back(138);
       break;
     case 33:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(30);
-      m_alignmentPatternCenters.Add(58);
-      m_alignmentPatternCenters.Add(86);
-      m_alignmentPatternCenters.Add(114);
-      m_alignmentPatternCenters.Add(142);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(30);
+      m_alignmentPatternCenters.push_back(58);
+      m_alignmentPatternCenters.push_back(86);
+      m_alignmentPatternCenters.push_back(114);
+      m_alignmentPatternCenters.push_back(142);
       break;
     case 34:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(34);
-      m_alignmentPatternCenters.Add(62);
-      m_alignmentPatternCenters.Add(90);
-      m_alignmentPatternCenters.Add(118);
-      m_alignmentPatternCenters.Add(146);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(34);
+      m_alignmentPatternCenters.push_back(62);
+      m_alignmentPatternCenters.push_back(90);
+      m_alignmentPatternCenters.push_back(118);
+      m_alignmentPatternCenters.push_back(146);
       break;
     case 35:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(30);
-      m_alignmentPatternCenters.Add(54);
-      m_alignmentPatternCenters.Add(78);
-      m_alignmentPatternCenters.Add(102);
-      m_alignmentPatternCenters.Add(126);
-      m_alignmentPatternCenters.Add(150);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(30);
+      m_alignmentPatternCenters.push_back(54);
+      m_alignmentPatternCenters.push_back(78);
+      m_alignmentPatternCenters.push_back(102);
+      m_alignmentPatternCenters.push_back(126);
+      m_alignmentPatternCenters.push_back(150);
       break;
     case 36:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(24);
-      m_alignmentPatternCenters.Add(50);
-      m_alignmentPatternCenters.Add(76);
-      m_alignmentPatternCenters.Add(102);
-      m_alignmentPatternCenters.Add(128);
-      m_alignmentPatternCenters.Add(154);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(24);
+      m_alignmentPatternCenters.push_back(50);
+      m_alignmentPatternCenters.push_back(76);
+      m_alignmentPatternCenters.push_back(102);
+      m_alignmentPatternCenters.push_back(128);
+      m_alignmentPatternCenters.push_back(154);
       break;
     case 37:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(28);
-      m_alignmentPatternCenters.Add(54);
-      m_alignmentPatternCenters.Add(80);
-      m_alignmentPatternCenters.Add(106);
-      m_alignmentPatternCenters.Add(132);
-      m_alignmentPatternCenters.Add(158);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(28);
+      m_alignmentPatternCenters.push_back(54);
+      m_alignmentPatternCenters.push_back(80);
+      m_alignmentPatternCenters.push_back(106);
+      m_alignmentPatternCenters.push_back(132);
+      m_alignmentPatternCenters.push_back(158);
       break;
     case 38:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(32);
-      m_alignmentPatternCenters.Add(58);
-      m_alignmentPatternCenters.Add(84);
-      m_alignmentPatternCenters.Add(110);
-      m_alignmentPatternCenters.Add(136);
-      m_alignmentPatternCenters.Add(162);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(32);
+      m_alignmentPatternCenters.push_back(58);
+      m_alignmentPatternCenters.push_back(84);
+      m_alignmentPatternCenters.push_back(110);
+      m_alignmentPatternCenters.push_back(136);
+      m_alignmentPatternCenters.push_back(162);
       break;
     case 39:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(26);
-      m_alignmentPatternCenters.Add(54);
-      m_alignmentPatternCenters.Add(82);
-      m_alignmentPatternCenters.Add(110);
-      m_alignmentPatternCenters.Add(138);
-      m_alignmentPatternCenters.Add(166);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(26);
+      m_alignmentPatternCenters.push_back(54);
+      m_alignmentPatternCenters.push_back(82);
+      m_alignmentPatternCenters.push_back(110);
+      m_alignmentPatternCenters.push_back(138);
+      m_alignmentPatternCenters.push_back(166);
       break;
     case 40:
-      m_alignmentPatternCenters.Add(6);
-      m_alignmentPatternCenters.Add(30);
-      m_alignmentPatternCenters.Add(58);
-      m_alignmentPatternCenters.Add(86);
-      m_alignmentPatternCenters.Add(114);
-      m_alignmentPatternCenters.Add(142);
-      m_alignmentPatternCenters.Add(170);
+      m_alignmentPatternCenters.push_back(6);
+      m_alignmentPatternCenters.push_back(30);
+      m_alignmentPatternCenters.push_back(58);
+      m_alignmentPatternCenters.push_back(86);
+      m_alignmentPatternCenters.push_back(114);
+      m_alignmentPatternCenters.push_back(142);
+      m_alignmentPatternCenters.push_back(170);
       break;
   }
 }
 
 CBC_QRCoderVersion::~CBC_QRCoderVersion() {
-  for (int32_t i = 0; i < m_ecBlocksArray.GetSize(); ++i)
+  for (size_t i = 0; i < m_ecBlocksArray.size(); ++i)
     delete m_ecBlocksArray[i];
 }
 
 int32_t CBC_QRCoderVersion::GetVersionNumber() {
   return m_versionNumber;
 }
-CFX_ArrayTemplate<int32_t>* CBC_QRCoderVersion::GetAlignmentPatternCenters() {
+std::vector<int32_t>* CBC_QRCoderVersion::GetAlignmentPatternCenters() {
   return &m_alignmentPatternCenters;
 }
 int32_t CBC_QRCoderVersion::GetTotalCodeWords() {
@@ -419,10 +419,10 @@
   bitMatrix->SetRegion(0, dimension - 8, 9, 8, e);
   if (e != BCExceptionNO)
     return nullptr;
-  int32_t max = m_alignmentPatternCenters.GetSize();
-  for (int32_t x = 0; x < max; x++) {
+  size_t max = m_alignmentPatternCenters.size();
+  for (size_t x = 0; x < max; x++) {
     int32_t i = m_alignmentPatternCenters[x] - 2;
-    for (int32_t y = 0; y < max; y++) {
+    for (size_t y = 0; y < max; y++) {
       if ((x == 0 && (y == 0 || y == max - 1)) || (x == max - 1 && y == 0)) {
         continue;
       }
@@ -450,47 +450,47 @@
 CBC_QRCoderVersion* CBC_QRCoderVersion::GetVersionForNumber(
     int32_t versionNumber,
     int32_t& e) {
-  if (VERSION->GetSize() == 0) {
-    VERSION->Add(new CBC_QRCoderVersion(
+  if (VERSION->empty()) {
+    VERSION->push_back(new CBC_QRCoderVersion(
         1, new CBC_QRCoderECBlocks(7, new CBC_QRCoderECB(1, 19)),
         new CBC_QRCoderECBlocks(10, new CBC_QRCoderECB(1, 16)),
         new CBC_QRCoderECBlocks(13, new CBC_QRCoderECB(1, 13)),
         new CBC_QRCoderECBlocks(17, new CBC_QRCoderECB(1, 9))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         2, new CBC_QRCoderECBlocks(10, new CBC_QRCoderECB(1, 34)),
         new CBC_QRCoderECBlocks(16, new CBC_QRCoderECB(1, 28)),
         new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(1, 22)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(1, 16))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         3, new CBC_QRCoderECBlocks(15, new CBC_QRCoderECB(1, 55)),
         new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(1, 44)),
         new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 17)),
         new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(2, 13))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         4, new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(1, 80)),
         new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 32)),
         new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(2, 24)),
         new CBC_QRCoderECBlocks(16, new CBC_QRCoderECB(4, 9))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         5, new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(1, 108)),
         new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(2, 43)),
         new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 15),
                                 new CBC_QRCoderECB(2, 16)),
         new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(2, 11),
                                 new CBC_QRCoderECB(2, 12))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         6, new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 68)),
         new CBC_QRCoderECBlocks(16, new CBC_QRCoderECB(4, 27)),
         new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(4, 19)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(4, 15))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         7, new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(2, 78)),
         new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(4, 31)),
         new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 14),
                                 new CBC_QRCoderECB(4, 15)),
         new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 13),
                                 new CBC_QRCoderECB(1, 14))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         8, new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(2, 97)),
         new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(2, 38),
                                 new CBC_QRCoderECB(2, 39)),
@@ -498,7 +498,7 @@
                                 new CBC_QRCoderECB(2, 19)),
         new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 14),
                                 new CBC_QRCoderECB(2, 15))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         9, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(2, 116)),
         new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(3, 36),
                                 new CBC_QRCoderECB(2, 37)),
@@ -506,7 +506,7 @@
                                 new CBC_QRCoderECB(4, 17)),
         new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(4, 12),
                                 new CBC_QRCoderECB(4, 13))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         10, new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 68),
                                     new CBC_QRCoderECB(2, 69)),
         new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 43),
@@ -515,7 +515,7 @@
                                 new CBC_QRCoderECB(2, 20)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(6, 15),
                                 new CBC_QRCoderECB(2, 16))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         11, new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(4, 81)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(1, 50),
                                 new CBC_QRCoderECB(4, 51)),
@@ -523,7 +523,7 @@
                                 new CBC_QRCoderECB(4, 23)),
         new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(3, 12),
                                 new CBC_QRCoderECB(8, 13))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         12, new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(2, 92),
                                     new CBC_QRCoderECB(2, 93)),
         new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(6, 36),
@@ -532,7 +532,7 @@
                                 new CBC_QRCoderECB(6, 21)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(7, 14),
                                 new CBC_QRCoderECB(4, 15))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         13, new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 107)),
         new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(8, 37),
                                 new CBC_QRCoderECB(1, 38)),
@@ -540,7 +540,7 @@
                                 new CBC_QRCoderECB(4, 21)),
         new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(12, 11),
                                 new CBC_QRCoderECB(4, 12))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         14, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(3, 115),
                                     new CBC_QRCoderECB(1, 116)),
         new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(4, 40),
@@ -549,7 +549,7 @@
                                 new CBC_QRCoderECB(5, 17)),
         new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(11, 12),
                                 new CBC_QRCoderECB(5, 13))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         15, new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(5, 87),
                                     new CBC_QRCoderECB(1, 88)),
         new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(5, 41),
@@ -558,7 +558,7 @@
                                 new CBC_QRCoderECB(7, 25)),
         new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(11, 12),
                                 new CBC_QRCoderECB(7, 13))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         16, new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(5, 98),
                                     new CBC_QRCoderECB(1, 99)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(7, 45),
@@ -567,7 +567,7 @@
                                 new CBC_QRCoderECB(2, 20)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(3, 15),
                                 new CBC_QRCoderECB(13, 16))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         17, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(1, 107),
                                     new CBC_QRCoderECB(5, 108)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(10, 46),
@@ -576,7 +576,7 @@
                                 new CBC_QRCoderECB(15, 23)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(2, 14),
                                 new CBC_QRCoderECB(17, 15))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         18, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(5, 120),
                                     new CBC_QRCoderECB(1, 121)),
         new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(9, 43),
@@ -585,7 +585,7 @@
                                 new CBC_QRCoderECB(1, 23)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(2, 14),
                                 new CBC_QRCoderECB(19, 15))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         19, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(3, 113),
                                     new CBC_QRCoderECB(4, 114)),
         new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(3, 44),
@@ -594,7 +594,7 @@
                                 new CBC_QRCoderECB(4, 22)),
         new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(9, 13),
                                 new CBC_QRCoderECB(16, 14))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         20, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(3, 107),
                                     new CBC_QRCoderECB(5, 108)),
         new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(3, 41),
@@ -603,7 +603,7 @@
                                 new CBC_QRCoderECB(5, 25)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(15, 15),
                                 new CBC_QRCoderECB(10, 16))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         21, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(4, 116),
                                     new CBC_QRCoderECB(4, 117)),
         new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(17, 42)),
@@ -611,14 +611,14 @@
                                 new CBC_QRCoderECB(6, 23)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(19, 16),
                                 new CBC_QRCoderECB(6, 17))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         22, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(2, 111),
                                     new CBC_QRCoderECB(7, 112)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(17, 46)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(7, 24),
                                 new CBC_QRCoderECB(16, 25)),
         new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(34, 13))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         23, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(4, 121),
                                     new CBC_QRCoderECB(5, 122)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(4, 47),
@@ -627,7 +627,7 @@
                                 new CBC_QRCoderECB(14, 25)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(16, 15),
                                 new CBC_QRCoderECB(14, 16))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         24, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(6, 117),
                                     new CBC_QRCoderECB(4, 118)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(6, 45),
@@ -636,7 +636,7 @@
                                 new CBC_QRCoderECB(16, 25)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(30, 16),
                                 new CBC_QRCoderECB(2, 17))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         25, new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(8, 106),
                                     new CBC_QRCoderECB(4, 107)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(8, 47),
@@ -645,7 +645,7 @@
                                 new CBC_QRCoderECB(22, 25)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(22, 15),
                                 new CBC_QRCoderECB(13, 16))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         26, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(10, 114),
                                     new CBC_QRCoderECB(2, 115)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(19, 46),
@@ -654,7 +654,7 @@
                                 new CBC_QRCoderECB(6, 23)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(33, 16),
                                 new CBC_QRCoderECB(4, 17))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         27, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(8, 122),
                                     new CBC_QRCoderECB(4, 123)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(22, 45),
@@ -663,7 +663,7 @@
                                 new CBC_QRCoderECB(26, 24)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(12, 15),
                                 new CBC_QRCoderECB(28, 16))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         28, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(3, 117),
                                     new CBC_QRCoderECB(10, 118)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(3, 45),
@@ -672,7 +672,7 @@
                                 new CBC_QRCoderECB(31, 25)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(11, 15),
                                 new CBC_QRCoderECB(31, 16))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         29, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(7, 116),
                                     new CBC_QRCoderECB(7, 117)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(21, 45),
@@ -681,7 +681,7 @@
                                 new CBC_QRCoderECB(37, 24)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(19, 15),
                                 new CBC_QRCoderECB(26, 16))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         30, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(5, 115),
                                     new CBC_QRCoderECB(10, 116)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(19, 47),
@@ -690,7 +690,7 @@
                                 new CBC_QRCoderECB(25, 25)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(23, 15),
                                 new CBC_QRCoderECB(25, 16))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         31, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(13, 115),
                                     new CBC_QRCoderECB(3, 116)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(2, 46),
@@ -699,7 +699,7 @@
                                 new CBC_QRCoderECB(1, 25)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(23, 15),
                                 new CBC_QRCoderECB(28, 16))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         32, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(17, 115)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(10, 46),
                                 new CBC_QRCoderECB(23, 47)),
@@ -707,7 +707,7 @@
                                 new CBC_QRCoderECB(35, 25)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(19, 15),
                                 new CBC_QRCoderECB(35, 16))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         33, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(17, 115),
                                     new CBC_QRCoderECB(1, 116)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(14, 46),
@@ -716,7 +716,7 @@
                                 new CBC_QRCoderECB(19, 25)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(11, 15),
                                 new CBC_QRCoderECB(46, 16))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         34, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(13, 115),
                                     new CBC_QRCoderECB(6, 116)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(14, 46),
@@ -725,7 +725,7 @@
                                 new CBC_QRCoderECB(7, 25)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(59, 16),
                                 new CBC_QRCoderECB(1, 17))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         35, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(12, 121),
                                     new CBC_QRCoderECB(7, 122)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(12, 47),
@@ -734,7 +734,7 @@
                                 new CBC_QRCoderECB(14, 25)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(22, 15),
                                 new CBC_QRCoderECB(41, 16))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         36, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(6, 121),
                                     new CBC_QRCoderECB(14, 122)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(6, 47),
@@ -743,7 +743,7 @@
                                 new CBC_QRCoderECB(10, 25)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(2, 15),
                                 new CBC_QRCoderECB(64, 16))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         37, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(17, 122),
                                     new CBC_QRCoderECB(4, 123)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(29, 46),
@@ -752,7 +752,7 @@
                                 new CBC_QRCoderECB(10, 25)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(24, 15),
                                 new CBC_QRCoderECB(46, 16))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         38, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(4, 122),
                                     new CBC_QRCoderECB(18, 123)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(13, 46),
@@ -761,7 +761,7 @@
                                 new CBC_QRCoderECB(14, 25)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(42, 15),
                                 new CBC_QRCoderECB(32, 16))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         39, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(20, 117),
                                     new CBC_QRCoderECB(4, 118)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(40, 47),
@@ -770,7 +770,7 @@
                                 new CBC_QRCoderECB(22, 25)),
         new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(10, 15),
                                 new CBC_QRCoderECB(67, 16))));
-    VERSION->Add(new CBC_QRCoderVersion(
+    VERSION->push_back(new CBC_QRCoderVersion(
         40, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(19, 118),
                                     new CBC_QRCoderECB(6, 119)),
         new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(18, 47),
@@ -788,7 +788,7 @@
 }
 
 void CBC_QRCoderVersion::Destroy() {
-  for (int32_t i = 0; i < VERSION->GetSize(); i++)
+  for (size_t i = 0; i < VERSION->size(); i++)
     delete (*VERSION)[i];
-  VERSION->RemoveAll();
+  VERSION->clear();
 }
diff --git a/xfa/fxbarcode/qrcode/BC_QRCoderVersion.h b/xfa/fxbarcode/qrcode/BC_QRCoderVersion.h
index 030dd51..853a93e 100644
--- a/xfa/fxbarcode/qrcode/BC_QRCoderVersion.h
+++ b/xfa/fxbarcode/qrcode/BC_QRCoderVersion.h
@@ -7,6 +7,8 @@
 #ifndef XFA_FXBARCODE_QRCODE_BC_QRCODERVERSION_H_
 #define XFA_FXBARCODE_QRCODE_BC_QRCODERVERSION_H_
 
+#include <vector>
+
 #include "core/fxcrt/fx_basic.h"
 
 class CBC_CommonBitMatrix;
@@ -23,7 +25,7 @@
   int32_t GetTotalCodeWords();
   int32_t GetDimensionForVersion();
   CBC_CommonBitMatrix* BuildFunctionPattern(int32_t& e);
-  CFX_ArrayTemplate<int32_t>* GetAlignmentPatternCenters();
+  std::vector<int32_t>* GetAlignmentPatternCenters();
   CBC_QRCoderECBlocks* GetECBlocksForLevel(
       CBC_QRCoderErrorCorrectionLevel* ecLevel);
   static CBC_QRCoderVersion* GetVersionForNumber(int32_t versionNumber,
@@ -44,12 +46,12 @@
                      CBC_QRCoderECBlocks* ecBlocks4);
 
   static const int32_t VERSION_DECODE_INFO[34];
-  static CFX_ArrayTemplate<CBC_QRCoderVersion*>* VERSION;
+  static std::vector<CBC_QRCoderVersion*>* VERSION;
 
   int32_t m_versionNumber;
   int32_t m_totalCodeWords;
-  CFX_ArrayTemplate<int32_t> m_alignmentPatternCenters;
-  CFX_ArrayTemplate<CBC_QRCoderECBlocks*> m_ecBlocksArray;
+  std::vector<int32_t> m_alignmentPatternCenters;
+  std::vector<CBC_QRCoderECBlocks*> m_ecBlocksArray;
 };
 
 #endif  // XFA_FXBARCODE_QRCODE_BC_QRCODERVERSION_H_
diff --git a/xfa/fxbarcode/utils.h b/xfa/fxbarcode/utils.h
index 21ef383..93a3c57 100644
--- a/xfa/fxbarcode/utils.h
+++ b/xfa/fxbarcode/utils.h
@@ -7,6 +7,8 @@
 #ifndef XFA_FXBARCODE_UTILS_H_
 #define XFA_FXBARCODE_UTILS_H_
 
+#include <vector>
+
 #include "core/fxcrt/fx_basic.h"
 
 bool BC_FX_ByteString_Replace(CFX_ByteString& dst,
@@ -16,7 +18,7 @@
                               char c);
 void BC_FX_ByteString_Append(CFX_ByteString& dst, int32_t count, char c);
 void BC_FX_ByteString_Append(CFX_ByteString& dst,
-                             const CFX_ArrayTemplate<uint8_t>& ba);
+                             const std::vector<uint8_t>& ba);
 
 #if (_FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_)
 #include <limits>