[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