summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2014-05-24 14:07:19 +0300
committerAndrei Karas <akaras@inbox.ru>2014-05-24 14:07:41 +0300
commitcb343652934540050a4da3f9a8446463db37b98b (patch)
treea663e4c86d28790a29faf058fff4fd80fc8081a5
parent04dc442ed114e37bcd7a3c2722ea38bab27023a9 (diff)
downloadmplint-cb343652934540050a4da3f9a8446463db37b98b.tar.gz
mplint-cb343652934540050a4da3f9a8446463db37b98b.tar.bz2
mplint-cb343652934540050a4da3f9a8446463db37b98b.tar.xz
mplint-cb343652934540050a4da3f9a8446463db37b98b.zip
Add macro for quick rules definiton.
-rw-r--r--src/Makefile.am4
-rw-r--r--src/lintmanager.cpp14
-rw-r--r--src/lintmanager.h2
-rw-r--r--src/rulebase.cpp5
-rw-r--r--src/rulebase.h2
-rw-r--r--src/rules/dump.cpp16
-rw-r--r--src/template.hpp (renamed from src/rules/dump.h)31
7 files changed, 47 insertions, 27 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 4367755..b90361d 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -13,8 +13,8 @@ mplint_SOURCES = \
main.cpp \
rulebase.cpp \
rulebase.h \
- rules/dump.cpp \
- rules/dump.h
+ template.hpp \
+ rules/dump.cpp
# set the include path found by configure
AM_CPPFLAGS = $(all_includes)
diff --git a/src/lintmanager.cpp b/src/lintmanager.cpp
index 69cd21c..01c28e8 100644
--- a/src/lintmanager.cpp
+++ b/src/lintmanager.cpp
@@ -22,8 +22,6 @@
#include "rulebase.h"
-#include "rules/dump.h"
-
#include <dirent.h>
#include <fstream>
#include <regex>
@@ -48,6 +46,18 @@ void LintManager::addRule(RuleBase *const rule)
mRules.push_back(rule);
}
+void LintManager::deleteRule(RuleBase *const rule)
+{
+ FOR_EACH (std::vector<RuleBase*>::iterator, it, mRules)
+ {
+ if (*it == rule)
+ {
+ mRules.erase(it);
+ return;
+ }
+ }
+}
+
void LintManager::enumFiles(std::string path)
{
path += "/";
diff --git a/src/lintmanager.h b/src/lintmanager.h
index 4fe6902..b504482 100644
--- a/src/lintmanager.h
+++ b/src/lintmanager.h
@@ -37,6 +37,8 @@ class LintManager final
void addRule(RuleBase *const rule);
+ void deleteRule(RuleBase *const rule);
+
protected:
void enumFiles(std::string path);
diff --git a/src/rulebase.cpp b/src/rulebase.cpp
index 7a53c9b..c5a795d 100644
--- a/src/rulebase.cpp
+++ b/src/rulebase.cpp
@@ -45,3 +45,8 @@ void RuleBase::addMask(const std::string &mask)
{
mFileMasks.insert(mask);
}
+
+void RuleBase::deleteSelf()
+{
+ lint.deleteRule(this);
+}
diff --git a/src/rulebase.h b/src/rulebase.h
index 7d8b0b0..a92516b 100644
--- a/src/rulebase.h
+++ b/src/rulebase.h
@@ -59,6 +59,8 @@ class RuleBase
void addMask(const std::string &mask);
+ void deleteSelf();
+
std::set<std::string> mFileMasks;
std::string file;
diff --git a/src/rules/dump.cpp b/src/rules/dump.cpp
index 3140e6a..87c1aff 100644
--- a/src/rules/dump.cpp
+++ b/src/rules/dump.cpp
@@ -18,27 +18,23 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "rules/dump.h"
+#include "template.hpp"
-#include "localconsts.h"
+registerRule(dump)
-namespace
-{
- Dump instance;
-}
-
-Dump::Dump()
+constructRule(dump)
{
addMask("(.+)[.]cpp");
addMask("(.+)[.]h");
+ deleteSelf();
}
-void Dump::init()
+initRule(dump)
{
printRaw("Checking file: " + file);
}
-void Dump::parseLine(const std::string &data)
+parseLineRule(dump)
{
print(data);
}
diff --git a/src/rules/dump.h b/src/template.hpp
index 6a91ef9..3aa0003 100644
--- a/src/rules/dump.h
+++ b/src/template.hpp
@@ -18,21 +18,26 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef RULES_DUMP_H
-#define RULES_DUMP_H
-
#include "rulebase.h"
#include "localconsts.h"
-class Dump : public RuleBase
-{
- public:
- Dump();
-
- void init();
-
- void parseLine(const std::string &data);
-};
+#define registerRule(name) \
+class name : public RuleBase \
+{ \
+ public: \
+ name(); \
+\
+ void init(); \
+\
+ void parseLine(const std::string &data); \
+}; \
+\
+namespace \
+{ \
+ name instance; \
+} \
-#endif // RULES_DUMP_H
+#define constructRule(name) name::name()
+#define initRule(name) void name::init()
+#define parseLineRule(name) void name::parseLine(const std::string &data)