Program Listing for File StatisticsDatabase.cpp

Return to documentation for file (umpire/util/StatisticsDatabase.cpp)

//////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2016-20, Lawrence Livermore National Security, LLC and Umpire
// project contributors. See the COPYRIGHT file for details.
//
// SPDX-License-Identifier: (MIT)
//////////////////////////////////////////////////////////////////////////////

#include "umpire/util/StatisticsDatabase.hpp"

#include "umpire/util/Macros.hpp"

namespace umpire {
namespace util {

StatisticsDatabase* StatisticsDatabase::s_statistics_database_instance(nullptr);

StatisticsDatabase* StatisticsDatabase::getDatabase()
{
  if (!s_statistics_database_instance)
    s_statistics_database_instance = new StatisticsDatabase();

  return s_statistics_database_instance;
}

std::shared_ptr<Statistic>
StatisticsDatabase::getStatistic(const std::string& name)
{
  auto statistic = m_statistics.find(name);
  std::shared_ptr<Statistic> stat;

  if (statistic == m_statistics.end()) {
    stat = std::shared_ptr<Statistic>(new Statistic(name));
    m_statistics[name] = stat;
  } else {
    stat = statistic->second;
  }

  return stat;
}

StatisticsDatabase::StatisticsDatabase() noexcept:
  m_statistics()
{
}

void
StatisticsDatabase::printStatistics(std::ostream& stream) noexcept
{
  stream << "umpire::util::StatisticsDatabase contains " << m_statistics.size() << " statistics" << std::endl;
  for (auto& stat : m_statistics) {
    stat.second->printData(stream);
  }
}

} // end of namespace util
} // end of namespace umpire