// Copyright 2023 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "binary_content.h"

#include <cstdint>
#include <string>

namespace {

uint32_t TwosComplementEncoding(int value) {
  if (value >= 0)
    return value;
  uint32_t binary = -static_cast<int64_t>(value);
  binary = ~binary;
  ++binary;
  return binary;
}

}  // namespace

void BinaryContent::s(std::string s) {
  for (auto c : s) {
    data.push_back(static_cast<uint8_t>(c));
  }
}

void BinaryContent::u1(int v) {
  const uint32_t b = TwosComplementEncoding(v);
  data.push_back(b & 0xffu);
}

void BinaryContent::u2(int v) {
  const uint32_t b = TwosComplementEncoding(v);
  data.push_back((b >> 8) & 0xffu);
  data.push_back(b & 0xffu);
}

void BinaryContent::u4(int v) {
  const uint32_t b = TwosComplementEncoding(v);
  data.push_back((b >> 24) & 0xffu);
  data.push_back((b >> 16) & 0xffu);
  data.push_back((b >> 8) & 0xffu);
  data.push_back(b & 0xffu);
}
