// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#include "core/fxcrt/fx_basic.h"
#include "xfa/fxbarcode/utils.h"

bool BC_FX_ByteString_Replace(CFX_ByteString& dst,
                              uint32_t first,
                              uint32_t last,
                              int32_t count,
                              char c) {
  if (first > last || count <= 0) {
    return false;
  }
  dst.Delete(first, last - first);
  for (int32_t i = 0; i < count; i++) {
    dst.Insert(0, c);
  }
  return true;
}
void BC_FX_ByteString_Append(CFX_ByteString& dst, int32_t count, char c) {
  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];
  }
}
