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

#include <memory>

#include "garnet/bin/debug_agent/arch.h"

namespace debug_agent {
namespace arch {

namespace {

std::unique_ptr<ArchProvider> arch_provider = nullptr;

}  // namespace

ArchProvider& ArchProvider::Get() {
  if (!arch_provider) {
    arch_provider = std::make_unique<ArchProvider>();
  }
  return *arch_provider.get();
}

void ArchProvider::Set(std::unique_ptr<ArchProvider> arch) {
  arch_provider = std::move(arch);
}

ArchProvider::~ArchProvider() = default;

}  // namespace arch
}  // namespace debug_agent
