From aa9b4e6a6809bb1f7551cf9231376e1a7fbb54ad Mon Sep 17 00:00:00 2001 From: Nathan Binkert Date: Wed, 22 Apr 2009 13:38:01 -0700 Subject: stats: Move flags into info.hh and use base/flags.hh to manage the flags --- src/base/statistics.cc | 2 +- src/base/statistics.hh | 7 ++--- src/base/stats/flags.hh | 74 ------------------------------------------------- src/base/stats/info.hh | 31 +++++++++++++++++++-- src/base/stats/mysql.cc | 1 - src/base/stats/text.cc | 20 ++++++------- 6 files changed, 43 insertions(+), 92 deletions(-) delete mode 100644 src/base/stats/flags.hh diff --git a/src/base/statistics.cc b/src/base/statistics.cc index 8a896f8cd..abe3b53bb 100644 --- a/src/base/statistics.cc +++ b/src/base/statistics.cc @@ -90,7 +90,7 @@ InfoAccess::setParams(const StorageParams *params) void InfoAccess::setInit() { - info()->flags |= init; + info()->flags.set(init); } Info * diff --git a/src/base/statistics.hh b/src/base/statistics.hh index 62f24b4b3..52caa48fa 100644 --- a/src/base/statistics.hh +++ b/src/base/statistics.hh @@ -64,7 +64,6 @@ #include "base/intmath.hh" #include "base/refcnt.hh" #include "base/str.hh" -#include "base/stats/flags.hh" #include "base/stats/info.hh" #include "base/stats/types.hh" #include "base/stats/visit.hh" @@ -246,7 +245,7 @@ class DataWrap : public InfoAccess { Info *info = this->info(); info->setName(name); - info->flags |= print; + info->flags.set(print); return this->self(); } const std::string &name() const { return this->info()->name; } @@ -282,9 +281,9 @@ class DataWrap : public InfoAccess * @return A reference to this stat. */ Derived & - flags(StatFlags _flags) + flags(Flags _flags) { - this->info()->flags |= _flags; + this->info()->flags.set(_flags); return this->self(); } diff --git a/src/base/stats/flags.hh b/src/base/stats/flags.hh deleted file mode 100644 index 07cdb8580..000000000 --- a/src/base/stats/flags.hh +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) 2004-2005 The Regents of The University of Michigan - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution; - * neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Authors: Nathan Binkert - */ - -#ifndef __BASE_STATS_FLAGS_HH__ -#define __BASE_STATS_FLAGS_HH__ - -namespace Stats { - -/** - * Define the storage for format flags. - * @todo Can probably shrink this. - */ -typedef uint32_t StatFlags; - -/** Nothing extra to print. */ -const StatFlags none = 0x00000000; -/** This Stat is Initialized */ -const StatFlags init = 0x00000001; -/** Print this stat. */ -const StatFlags print = 0x00000002; -/** Print the total. */ -const StatFlags total = 0x00000010; -/** Print the percent of the total that this entry represents. */ -const StatFlags pdf = 0x00000020; -/** Print the cumulative percentage of total upto this entry. */ -const StatFlags cdf = 0x00000040; -/** Print the distribution. */ -const StatFlags dist = 0x00000080; -/** Don't print if this is zero. */ -const StatFlags nozero = 0x00000100; -/** Don't print if this is NAN */ -const StatFlags nonan = 0x00000200; - -/** Mask of flags that can't be set directly */ -const StatFlags __reserved = init | print; - -enum DisplayMode -{ - mode_m5, - mode_simplescalar -}; - -extern DisplayMode DefaultMode; - -/* namespace Stats */ } - -#endif // __BASE_STATS_FLAGS_HH__ diff --git a/src/base/stats/info.hh b/src/base/stats/info.hh index d0ff6b170..f24ad11d7 100644 --- a/src/base/stats/info.hh +++ b/src/base/stats/info.hh @@ -28,11 +28,38 @@ * Authors: Nathan Binkert */ -#include "base/stats/flags.hh" +#include "base/flags.hh" #include "base/stats/types.hh" namespace Stats { +typedef uint16_t FlagsType; +typedef ::Flags Flags; + +/** Nothing extra to print. */ +const FlagsType none = 0x0000; +/** This Stat is Initialized */ +const FlagsType init = 0x0001; +/** Print this stat. */ +const FlagsType print = 0x0002; +/** Print the total. */ +const FlagsType total = 0x0010; +/** Print the percent of the total that this entry represents. */ +const FlagsType pdf = 0x0020; +/** Print the cumulative percentage of total upto this entry. */ +const FlagsType cdf = 0x0040; +/** Print the distribution. */ +const FlagsType dist = 0x0080; +/** Don't print if this is zero. */ +const FlagsType nozero = 0x0100; +/** Don't print if this is NAN */ +const FlagsType nonan = 0x0200; +/** Used for SS compatability. */ +const FlagsType __substat = 0x8000; + +/** Mask of flags that can't be set directly */ +const FlagsType __reserved = init | print | __substat; + struct StorageParams { virtual ~StorageParams(); @@ -48,7 +75,7 @@ class Info /** The description of the stat. */ std::string desc; /** The formatting flags. */ - StatFlags flags; + Flags flags; /** The display precision. */ int precision; /** A pointer to a prerequisite Stat. */ diff --git a/src/base/stats/mysql.cc b/src/base/stats/mysql.cc index 84e131e4f..9adc07147 100644 --- a/src/base/stats/mysql.cc +++ b/src/base/stats/mysql.cc @@ -36,7 +36,6 @@ #include "base/misc.hh" #include "base/mysql.hh" -#include "base/stats/flags.hh" #include "base/stats/info.hh" #include "base/stats/mysql.hh" #include "base/stats/mysql_run.hh" diff --git a/src/base/stats/text.cc b/src/base/stats/text.cc index fbb1ad1e6..d3eea7f49 100644 --- a/src/base/stats/text.cc +++ b/src/base/stats/text.cc @@ -151,7 +151,7 @@ Text::output() bool Text::noOutput(const Info &info) { - if (!(info.flags & print)) + if (!info.flags.isSet(print)) return true; if (info.prereq && info.prereq->zero()) @@ -186,7 +186,7 @@ struct ScalarPrint Result value; string name; string desc; - StatFlags flags; + Flags flags; bool descriptions; int precision; Result pdf; @@ -198,8 +198,8 @@ struct ScalarPrint void ScalarPrint::operator()(ostream &stream) const { - if ((flags & nozero && value == 0.0) || - (flags & nonan && isnan(value))) + if ((flags.isSet(nozero) && value == 0.0) || + (flags.isSet(nonan) && isnan(value))) return; stringstream pdfstr, cdfstr; @@ -226,7 +226,7 @@ struct VectorPrint string desc; vector subnames; vector subdescs; - StatFlags flags; + Flags flags; bool descriptions; int precision; VResult vec; @@ -241,7 +241,7 @@ VectorPrint::operator()(std::ostream &stream) const size_type _size = vec.size(); Result _total = 0.0; - if (flags & (pdf | cdf)) { + if (flags.isSet(pdf | cdf)) { for (off_type i = 0; i < _size; ++i) { _total += vec[i]; } @@ -274,7 +274,7 @@ VectorPrint::operator()(std::ostream &stream) const print.desc = subdescs.empty() ? desc : subdescs[i]; print.value = vec[i]; - if (_total && flags & pdf) { + if (_total && flags.isSet(pdf)) { print.pdf = vec[i] / _total; print.cdf += print.pdf; } @@ -282,7 +282,7 @@ VectorPrint::operator()(std::ostream &stream) const print(stream); } - if (flags & ::Stats::total) { + if (flags.isSet(::Stats::total)) { print.pdf = NAN; print.cdf = NAN; print.name = base + "total"; @@ -296,7 +296,7 @@ struct DistPrint { string name; string desc; - StatFlags flags; + Flags flags; bool descriptions; int precision; @@ -568,7 +568,7 @@ Text::visit(const Vector2dInfo &info) print(*stream); } - if ((info.flags & ::Stats::total) && (info.x > 1)) { + if (info.flags.isSet(::Stats::total) && (info.x > 1)) { print.name = info.name; print.desc = info.desc; print.vec = tot_vec; -- cgit v1.2.3