use lambda instead of inner class for name assignment functions
Change-Id: Icebc0df03aad489a945365b829338d9dc2879fdd
diff --git a/src/name-assignments/assignment-hash.cpp b/src/name-assignments/assignment-hash.cpp
index 4849324..ebcf6d0 100644
--- a/src/name-assignments/assignment-hash.cpp
+++ b/src/name-assignments/assignment-hash.cpp
@@ -31,40 +31,32 @@
if (startIndex != factoryParam.size()) {
paramList.push_back(factoryParam.substr(startIndex));
}
- return HashAssignmentFunc(paramList);
-}
+ return [paramList](const std::vector<std::tuple<std::string, std::string>> params){
+ if (params.size() > paramList.size() * 8) { // might be attack
+ BOOST_THROW_EXCEPTION(std::runtime_error("Too many extra parameters given"));
+ }
+ std::map<std::string, std::string> paramMap;
+ for (const auto& param : params) {
+ paramMap[std::get<0>(param)] = std::get<1>(param);
+ }
-AssignmentHash::HashAssignmentFunc::HashAssignmentFunc(std::list<std::string> paramList)
- : m_paramList(std::move(paramList))
-{}
+ //construct name
+ PartialName name;
+ for (const auto& field : paramList) {
+ auto it = paramMap.find(field);
+ if (it == paramMap.end()) {
+ return std::vector<PartialName>();
+ } else {
+ name.append(it->second);
+ }
+ }
+ std::vector<PartialName> nameList;
+ util::Sha256 digest;
+ digest << name.wireEncode();
+ nameList.emplace_back(digest.toString());
-std::vector<PartialName>
-AssignmentHash::HashAssignmentFunc::operator() (const std::vector<std::tuple<std::string, std::string>> params)
-{
- if (params.size() > m_paramList.size() * 8) { // might be attack
- BOOST_THROW_EXCEPTION(std::runtime_error("Too many extra parameters given"));
- }
- std::map<std::string, std::string> paramMap;
- for (const auto& param : params) {
- paramMap[std::get<0>(param)] = std::get<1>(param);
- }
-
- //construct name
- PartialName name;
- for (const auto& field : m_paramList) {
- auto it = paramMap.find(field);
- if (it == paramMap.end()) {
- return std::vector<PartialName>();
- } else {
- name.append(it->second);
- }
- }
- std::vector<PartialName> nameList;
- util::Sha256 digest;
- digest << name.wireEncode();
- nameList.emplace_back(digest.toString());
-
- return nameList;
+ return nameList;
+ };
}
}
diff --git a/src/name-assignments/assignment-hash.hpp b/src/name-assignments/assignment-hash.hpp
index 19b0618..8ff253f 100644
--- a/src/name-assignments/assignment-hash.hpp
+++ b/src/name-assignments/assignment-hash.hpp
@@ -19,16 +19,6 @@
NameAssignmentFunc getFunction(const std::string &factoryParam) override;
- class HashAssignmentFunc {
- public:
- HashAssignmentFunc(std::list<std::string> paramList);
-
- std::vector<PartialName>
- operator() (const std::vector<std::tuple<std::string, std::string>> params);
- private:
- std::list<std::string> m_paramList;
- };
-
};
}
}
diff --git a/src/name-assignments/assignment-or.cpp b/src/name-assignments/assignment-or.cpp
index 6fc3e97..78cfc3e 100644
--- a/src/name-assignments/assignment-or.cpp
+++ b/src/name-assignments/assignment-or.cpp
@@ -18,7 +18,15 @@
NameAssignmentFunc
AssignmentOr::getFunction(std::list<NameAssignmentFunc> funcs){
if (funcs.size() == 1) return *funcs.begin();
- return OrAssignmentFunc(funcs);
+ return [funcs](const std::vector<std::tuple<std::string, std::string>> params){
+ std::vector<PartialName> nameList;
+ for (const auto& func : funcs) {
+ auto result = func(params);
+ nameList.insert(nameList.end(), result.begin(), result.end());
+ }
+
+ return nameList;
+ };
}
NameAssignmentFunc
@@ -51,21 +59,5 @@
return getFunction(paramList);
}
-AssignmentOr::OrAssignmentFunc::OrAssignmentFunc(std::list<NameAssignmentFunc> funcList)
- : m_funcList(std::move(funcList))
-{}
-
-std::vector<PartialName>
-AssignmentOr::OrAssignmentFunc::operator() (const std::vector<std::tuple<std::string, std::string>> params)
-{
- std::vector<PartialName> nameList;
- for (const auto& func : m_funcList) {
- auto result = func(params);
- nameList.insert(nameList.end(), result.begin(), result.end());
- }
-
- return nameList;
-}
-
}
}
diff --git a/src/name-assignments/assignment-or.hpp b/src/name-assignments/assignment-or.hpp
index 68ffd66..8d056f3 100644
--- a/src/name-assignments/assignment-or.hpp
+++ b/src/name-assignments/assignment-or.hpp
@@ -21,16 +21,6 @@
NameAssignmentFunc getFunction(const std::string &factoryParam) override;
- class OrAssignmentFunc {
- public:
- OrAssignmentFunc(std::list<NameAssignmentFunc> funcList);
-
- std::vector<PartialName>
- operator() (const std::vector<std::tuple<std::string, std::string>> params);
- private:
- std::list<NameAssignmentFunc> m_funcList;
- };
-
};
}
}
diff --git a/src/name-assignments/assignment-param.cpp b/src/name-assignments/assignment-param.cpp
index c5cbf09..e32665e 100644
--- a/src/name-assignments/assignment-param.cpp
+++ b/src/name-assignments/assignment-param.cpp
@@ -30,40 +30,32 @@
if (startIndex != factoryParam.size()) {
paramList.push_back(factoryParam.substr(startIndex));
}
- return ParamAssignmentFunc(paramList);
-}
+ return [paramList](const std::vector<std::tuple<std::string, std::string>> params){
+ if (params.size() > paramList.size() * 8) { // might be attack
+ BOOST_THROW_EXCEPTION(std::runtime_error("Too many extra parameters given"));
+ }
+ std::map<std::string, std::string> paramMap;
+ for (const auto& param : params) {
+ paramMap[std::get<0>(param)] = std::get<1>(param);
+ if (std::get<1>(param).size() == 0) { // empty parameter!
+ return std::vector<PartialName>();
+ }
+ }
-AssignmentParam::ParamAssignmentFunc::ParamAssignmentFunc(std::list<std::string> paramList)
- : m_paramList(std::move(paramList))
-{}
-
-std::vector<PartialName>
-AssignmentParam::ParamAssignmentFunc::operator() (const std::vector<std::tuple<std::string, std::string>> params)
-{
- if (params.size() > m_paramList.size() * 8) { // might be attack
- BOOST_THROW_EXCEPTION(std::runtime_error("Too many extra parameters given"));
- }
- std::map<std::string, std::string> paramMap;
- for (const auto& param : params) {
- paramMap[std::get<0>(param)] = std::get<1>(param);
- if (std::get<1>(param).size() == 0) { // empty parameter!
- return std::vector<PartialName>();
- }
- }
-
- //construct name
- PartialName name;
- for (const auto& field : m_paramList) {
- auto it = paramMap.find(field);
- if (it == paramMap.end()) {
- return std::vector<PartialName>();
- } else {
- name.append(it->second);
- }
- }
- std::vector<PartialName> nameList;
- nameList.push_back(name);
- return nameList;
+ //construct name
+ PartialName name;
+ for (const auto& field : paramList) {
+ auto it = paramMap.find(field);
+ if (it == paramMap.end()) {
+ return std::vector<PartialName>();
+ } else {
+ name.append(it->second);
+ }
+ }
+ std::vector<PartialName> nameList;
+ nameList.push_back(name);
+ return nameList;
+ };
}
}
diff --git a/src/name-assignments/assignment-param.hpp b/src/name-assignments/assignment-param.hpp
index 7c6a377..c80f850 100644
--- a/src/name-assignments/assignment-param.hpp
+++ b/src/name-assignments/assignment-param.hpp
@@ -19,16 +19,6 @@
NameAssignmentFunc getFunction(const std::string &factoryParam) override;
- class ParamAssignmentFunc {
- public:
- ParamAssignmentFunc(std::list<std::string> paramList);
-
- std::vector<PartialName>
- operator() (const std::vector<std::tuple<std::string, std::string>> params);
- private:
- std::list<std::string> m_paramList;
- };
-
};
}
}