// Copyright 2017 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.

#pragma once

#include <string>
#include <vector>

#include "src/lib/fxl/macros.h"

namespace debugger_utils {

struct BuildId {
  std::string build_id;
  std::string file;
};

class BuildIdTable {
 public:
  BuildIdTable() = default;

  bool ReadIdsFile(const std::string& file);

  const BuildId* LookupBuildId(const std::string& bid);

 private:
  void AddBuildId(const std::string& file_dir, const std::string& build_id,
                  const std::string& path);

  std::vector<BuildId> build_ids_;

  FXL_DISALLOW_COPY_AND_ASSIGN(BuildIdTable);
};

}  // namespace debugger_utils
