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

#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 std::vector<uint8_t>& ba) {
  for (uint8_t value : ba)
    dst += value;
}
