[mathicgb] 185/393: Added support for log aliases.

Doug Torrance dtorrance-guest at moszumanska.debian.org
Fri Apr 3 15:58:57 UTC 2015


This is an automated email from the git hooks/post-receive script.

dtorrance-guest pushed a commit to branch upstream
in repository mathicgb.

commit b32e8d0d311e2fb5df7fdc2aab80110f4336477d
Author: Bjarke Hammersholt Roune <bjarkehr.code at gmail.com>
Date:   Thu Mar 7 13:41:16 2013 +0100

    Added support for log aliases.
---
 src/cli/CommonParams.cpp      |  4 ++--
 src/cli/HelpAction.cpp        |  8 ++++++++
 src/mathicgb/F4Reducer.cpp    |  5 +++++
 src/mathicgb/LogDomain.cpp    |  3 +++
 src/mathicgb/LogDomain.hpp    | 10 ++++++++++
 src/mathicgb/LogDomainSet.cpp | 34 ++++++++++++++++++++++++++++------
 src/mathicgb/LogDomainSet.hpp |  7 +++++++
 7 files changed, 63 insertions(+), 8 deletions(-)

diff --git a/src/cli/CommonParams.cpp b/src/cli/CommonParams.cpp
index 2c24ca8..f370a73 100644
--- a/src/cli/CommonParams.cpp
+++ b/src/cli/CommonParams.cpp
@@ -15,9 +15,9 @@ CommonParams::CommonParams(size_t minDirectParams, size_t maxDirectParams):
     "Specifies how many threads to use at a time.",
     1),
 
-  mLogs("logs",
+  mLogs("log",
     "Enable the specified log. Do \"help logs\" to see all available logs. "
-    "To enable logs X, Y and Z, do \"-logs x,y,z\".",
+    "To enable logs X, Y and Z, do \"-log X,Y,Z\".",
     ""),
 
   mMinDirectParams(minDirectParams),
diff --git a/src/cli/HelpAction.cpp b/src/cli/HelpAction.cpp
index b9c610b..c02a04d 100755
--- a/src/cli/HelpAction.cpp
+++ b/src/cli/HelpAction.cpp
@@ -55,4 +55,12 @@ void HelpAction::performAction() {
       << '\n';
     mathic::display((*it)->description(), "   ");
   }
+
+  const char* aliasDescription =
+    "\nA log alias is a short-hand where one name stands for several log "
+    "specifications. The following is a list of all aliases.\n";
+  mathic::display(aliasDescription);
+  auto& aliases = LogDomainSet::singleton().aliases();
+  for (auto it = aliases.begin(); it != aliases.end(); ++it)
+    std::cerr << "\n " << it->first << "\n   " << it->second << "\n\n";
 }
diff --git a/src/mathicgb/F4Reducer.cpp b/src/mathicgb/F4Reducer.cpp
index 656ae49..cc2f0df 100755
--- a/src/mathicgb/F4Reducer.cpp
+++ b/src/mathicgb/F4Reducer.cpp
@@ -29,6 +29,11 @@ MATHICGB_DEFINE_LOG_DOMAIN(
   "Count number of non-zero entries in F4 matrices."
 );
 
+MATHICGB_DEFINE_LOG_ALIAS(
+  "F4",
+  "F4MatrixEntries-,F4MatrixBottomRows-,F4MatrixTopRows-" ",F4MatrixRows-,F4MatrixBuild+,F4MatrixBuild2+,F4MatrixReduce+"
+);
+
 F4Reducer::F4Reducer(const PolyRing& ring, Type type):
   mType(type),
   mFallback(Reducer::makeReducer(Reducer::Reducer_BjarkeGeo, ring)),
diff --git a/src/mathicgb/LogDomain.cpp b/src/mathicgb/LogDomain.cpp
index f75b87e..ce6e5e2 100755
--- a/src/mathicgb/LogDomain.cpp
+++ b/src/mathicgb/LogDomain.cpp
@@ -91,3 +91,6 @@ void LogDomain<true>::Timer::start() {
   mRealTicks = tbb::tick_count::now();
 }
 
+LogDomainInternal::LogAliasRegisterer::LogAliasRegisterer(const char* alias, const char* of) {
+  LogDomainSet::singleton().registerLogAlias(alias, of);
+}
diff --git a/src/mathicgb/LogDomain.hpp b/src/mathicgb/LogDomain.hpp
index a927923..a77abec 100755
--- a/src/mathicgb/LogDomain.hpp
+++ b/src/mathicgb/LogDomain.hpp
@@ -190,6 +190,10 @@ namespace LogDomainInternal {
   }
   template<class L, class T>
   void operator+(LambdaRunner<L> runner, T&& lambda) {lambda(runner.log);}
+
+  struct LogAliasRegisterer {
+    LogAliasRegisterer(const char* alias, const char* of);
+  };
 }
 
 /// Defines LogDomainInternal::value_##NAME to be equal to the value of
@@ -237,6 +241,12 @@ namespace LogDomainInternal {
 #define MATHICGB_DEFINE_LOG_DOMAIN(NAME, DESCRIPTION) \
   MATHICGB_DEFINE_LOG_DOMAIN_WITH_DEFAULTS(NAME, DESCRIPTION, 0, 1, 1);
 
+#define MATHICGB_DEFINE_LOG_ALIAS(ALIAS, OF) \
+  namespace LogDomainInternal { \
+    LogAliasRegisterer MATHICGB_CONCATENATE_AFTER_EXPANSION(reg_, __LINE__) \
+      (ALIAS, OF); \
+  }
+
 /// This expression yields an l-value reference to the indicated logger.
 ///
 /// Example:
diff --git a/src/mathicgb/LogDomainSet.cpp b/src/mathicgb/LogDomainSet.cpp
index e4c24e7..a902e55 100644
--- a/src/mathicgb/LogDomainSet.cpp
+++ b/src/mathicgb/LogDomainSet.cpp
@@ -19,6 +19,19 @@ LogDomain<true>* LogDomainSet::logDomain(const char* const name) {
   return it == mLogDomains.end() ? static_cast<LogDomain<true>*>(0) : *it;
 }
 
+const char* LogDomainSet::alias(const char* name) {
+  const auto func = [&](const std::pair<const char*, const char*> p){
+    return std::strcmp(p.first, name) == 0;
+  };
+  const auto it = std::find_if(mAliases.begin(), mAliases.end(), func);
+  return it == mAliases.end() ? static_cast<const char*>(0) : it->second;
+}
+
+void LogDomainSet::registerLogAlias(const char* alias, const char* of) {
+  MATHICGB_ASSERT(this->alias(alias) == 0);
+  mAliases.push_back(std::make_pair(alias, of));
+}
+
 void LogDomainSet::performLogCommand(std::string cmd) {
   if (cmd.empty())
     return;
@@ -26,7 +39,7 @@ void LogDomainSet::performLogCommand(std::string cmd) {
   // This could be more efficient, but this is not supposed to be a
   // method that is called very often.
   const auto isSign = [](const char c) {return c == '+' || c == '-';};
-  char prefix = '+';
+  char prefix = ' ';
   if (isSign(cmd.front())) {
     prefix = cmd.front();
     cmd.erase(cmd.begin());
@@ -39,11 +52,20 @@ void LogDomainSet::performLogCommand(std::string cmd) {
   }
 
   auto log = logDomain(cmd.c_str());
-  if (log == 0)
-    mathic::reportError("Unknown log domain \"" + cmd + "\".\n");
-  log->setEnabled(prefix == '+');
-  if (suffix != ' ')
-    log->setStreamEnabled(suffix == '+');
+  if (log != 0) {
+    log->setEnabled(prefix != '-');
+    if (suffix != ' ')
+      log->setStreamEnabled(suffix == '+');
+    return;
+  }
+
+  auto aliasOf = this->alias(cmd.c_str());
+  if (aliasOf != 0) {
+    performLogCommands(aliasOf);
+    return;
+  }
+
+  mathic::reportError("Unknown log \"" + cmd + "\".\n");
 }
 
 void LogDomainSet::performLogCommands(const std::string& cmds) {
diff --git a/src/mathicgb/LogDomainSet.hpp b/src/mathicgb/LogDomainSet.hpp
index 46ee2c8..70c799e 100755
--- a/src/mathicgb/LogDomainSet.hpp
+++ b/src/mathicgb/LogDomainSet.hpp
@@ -14,6 +14,8 @@ public:
   void registerLogDomain(LogDomain<true>& domain);
   void registerLogDomain(const LogDomain<false>& domain) {}
 
+  void registerLogAlias(const char* alias, const char* of);
+
   /// A log command has the format AXB, where
   ///   X       the name of a compile-time enabled log domain
   ///   A       a prefix
@@ -46,7 +48,11 @@ public:
 
   LogDomain<true>* logDomain(const char* const name);
 
+  const char* alias(const char* name);
+
   const std::vector<LogDomain<true>*>& logDomains() const {return mLogDomains;}
+  const std::vector<std::pair<const char*, const char*>>& aliases() const
+    {return mAliases;}
 
   void printReport(std::ostream& out) const;
   void printTimeReport(std::ostream& out) const;
@@ -58,6 +64,7 @@ private:
   LogDomainSet(); // private for singleton
 
   std::vector<LogDomain<true>*> mLogDomains;
+  std::vector<std::pair<const char*, const char*>> mAliases;
   tbb::tick_count mStartTime;
 };
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/mathicgb.git



More information about the debian-science-commits mailing list