aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/Basic/Statistics.cpp
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-05-21 04:36:41 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-05-21 04:36:41 +0000
commit6f290d8f9e9d7faac295cb51fc96884a18f4ded4 (patch)
tree46e7d426abc0c9f06ac472ac6f7f9e661b5d78cb /lib/Basic/Statistics.cpp
parenta55960edd4dcd7535526de8d2277642522aa0209 (diff)
downloadklee-6f290d8f9e9d7faac295cb51fc96884a18f4ded4.tar.gz
Initial KLEE checkin.
- Lots more tweaks, documentation, and web page content is needed, but this should compile & work on OS X & Linux. git-svn-id: https://llvm.org/svn/llvm-project/klee/trunk@72205 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Basic/Statistics.cpp')
-rw-r--r--lib/Basic/Statistics.cpp84
1 files changed, 84 insertions, 0 deletions
diff --git a/lib/Basic/Statistics.cpp b/lib/Basic/Statistics.cpp
new file mode 100644
index 00000000..9c95a891
--- /dev/null
+++ b/lib/Basic/Statistics.cpp
@@ -0,0 +1,84 @@
+//===-- Statistics.cpp ----------------------------------------------------===//
+//
+// The KLEE Symbolic Virtual Machine
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "klee/Statistics.h"
+
+#include <vector>
+
+using namespace klee;
+
+StatisticManager::StatisticManager()
+ : enabled(true),
+ globalStats(0),
+ indexedStats(0),
+ contextStats(0),
+ index(0) {
+}
+
+StatisticManager::~StatisticManager() {
+ if (globalStats) delete[] globalStats;
+ if (indexedStats) delete[] indexedStats;
+}
+
+void StatisticManager::useIndexedStats(unsigned totalIndices) {
+ if (indexedStats) delete[] indexedStats;
+ indexedStats = new uint64_t[totalIndices * stats.size()];
+ memset(indexedStats, 0, sizeof(*indexedStats) * totalIndices * stats.size());
+}
+
+void StatisticManager::registerStatistic(Statistic &s) {
+ if (globalStats) delete[] globalStats;
+ s.id = stats.size();
+ stats.push_back(&s);
+ globalStats = new uint64_t[stats.size()];
+ memset(globalStats, 0, sizeof(*globalStats)*stats.size());
+}
+
+int StatisticManager::getStatisticID(const std::string &name) const {
+ for (unsigned i=0; i<stats.size(); i++)
+ if (stats[i]->getName() == name)
+ return i;
+ return -1;
+}
+
+Statistic *StatisticManager::getStatisticByName(const std::string &name) const {
+ for (unsigned i=0; i<stats.size(); i++)
+ if (stats[i]->getName() == name)
+ return stats[i];
+ return 0;
+}
+
+StatisticManager *klee::theStatisticManager = 0;
+
+static StatisticManager &getStatisticManager() {
+ static StatisticManager sm;
+ theStatisticManager = &sm;
+ return sm;
+}
+
+/* *** */
+
+Statistic::Statistic(const std::string &_name,
+ const std::string &_shortName)
+ : name(_name),
+ shortName(_shortName) {
+ getStatisticManager().registerStatistic(*this);
+}
+
+Statistic::~Statistic() {
+}
+
+Statistic &Statistic::operator +=(const uint64_t addend) {
+ theStatisticManager->incrementStatistic(*this, addend);
+ return *this;
+}
+
+uint64_t Statistic::getValue() const {
+ return theStatisticManager->getValue(*this);
+}