chromium/chromecast/common/queryable_data.cc

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

#include "chromecast/common/queryable_data.h"

#include <utility>

#include "base/no_destructor.h"

namespace chromecast {

namespace {
QueryableData& GetQueryableData() {
  static base::NoDestructor<QueryableData> queryable_data;
  return *queryable_data;
}
}  // namespace

// static
void QueryableData::RegisterQueryableValue(const std::string& query_key,
                                           base::Value initial_value) {
  DCHECK_CALLED_ON_VALID_SEQUENCE(GetQueryableData().sequence_checker_);
  GetQueryableData().queryable_values_[query_key] = std::move(initial_value);
}

// static
const base::Value* QueryableData::Query(const std::string& query_key) {
  DCHECK_CALLED_ON_VALID_SEQUENCE(GetQueryableData().sequence_checker_);
  const QueryableData& data = GetQueryableData();

  auto value = data.queryable_values_.find(query_key);
  if (value == data.queryable_values_.end())
    return nullptr;
  return &value->second;
}

// static
const QueryableData::ValueMap& QueryableData::GetValues() {
  DCHECK_CALLED_ON_VALID_SEQUENCE(GetQueryableData().sequence_checker_);
  const QueryableData& data = GetQueryableData();
  return data.queryable_values_;
}

QueryableData::QueryableData() {}

QueryableData::~QueryableData() {
  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
}

}  // namespace chromecast