diff options
Diffstat (limited to 'src/smt/smt_statistics_registry.h')
-rw-r--r-- | src/smt/smt_statistics_registry.h | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/smt/smt_statistics_registry.h b/src/smt/smt_statistics_registry.h new file mode 100644 index 000000000..60a5e7c53 --- /dev/null +++ b/src/smt/smt_statistics_registry.h @@ -0,0 +1,61 @@ +/********************* */ +/*! \file smt_statistic_registry.h + ** \verbatim + ** Original author: Tim King + ** Major contributors: none + ** Minor contributors (to current version): none + ** This file is part of the CVC4 project. + ** Copyright (c) 2009-2016 New York University and The University of Iowa + ** See the file COPYING in the top-level source directory for licensing + ** information.\endverbatim + ** + ** \brief Accessor for the SmtEngine's StatisticsRegistry. + ** + ** Accessor for the SmtEngine's StatisticsRegistry. + **/ + +#include "cvc4_private.h" + +#pragma once + +#include "util/statistics_registry.h" + +namespace CVC4 { + +/** + * This returns the StatisticsRegistry attached to the currently in scope + * SmtEngine. This is a synonym for smt::SmtScope::currentStatisticsRegistry(). + */ +StatisticsRegistry* smtStatisticsRegistry(); + + +/** + * To use a statistic, you need to declare it, initialize it in your + * constructor, register it in your constructor, and deregister it in + * your destructor. Instead, this macro does it all for you (and + * therefore also keeps the statistic type, field name, and output + * string all in the same place in your class's header. Its use is + * like in this example, which takes the place of the declaration of a + * statistics field "d_checkTimer": + * + * KEEP_STATISTIC(TimerStat, d_checkTimer, "theory::uf::checkTime"); + * + * If any args need to be passed to the constructor, you can specify + * them after the string. + * + * The macro works by creating a nested class type, derived from the + * statistic type you give it, which declares a registry-aware + * constructor/destructor pair. + */ +#define KEEP_STATISTIC(_StatType, _StatField, _StatName, _CtorArgs...) \ + struct Statistic_##_StatField : public _StatType { \ + Statistic_##_StatField() : _StatType(_StatName, ## _CtorArgs) { \ + smtStatisticsRegistry()->registerStat(this); \ + } \ + ~Statistic_##_StatField() { \ + smtStatisticsRegistry()->unregisterStat(this); \ + } \ + } _StatField + + +}/* CVC4 namespace */ |