Loading src/PredicateAnd.h +10 −7 Original line number Diff line number Diff line Loading @@ -4,7 +4,7 @@ #include "PredicateSimple.h" #include "PsimagLite.h" namespace Dmrg { namespace PsimagLite { /* PSIDOC PredicateAnd PredicateAnd is a semicolon-separated list of simple predicates, Loading @@ -17,18 +17,21 @@ class PredicateAnd { public: typedef PsimagLite::Vector<PredicateSimple>::Type VectorPredicateSimpleType; typedef Vector<PredicateSimple>::Type VectorPredicateSimpleType; typedef PredicateSimple::VectorStringType VectorStringType; PredicateAnd(PsimagLite::String pred) PredicateAnd(String pred) : pred_(pred) { PsimagLite::split(tokens, str, ";"); VectorStringType tokens; split(tokens, pred, ";"); const SizeType n = tokens.size(); for (SizeType i = 0; i < n; ++i) vPredicateSimple_.push_back(PredicateSimple(str[i])); vPredicateSimple_.push_back(PredicateSimple(tokens[i])); } template<typename T> bool isTrue(PsimagLite::String name, T val) bool isTrue(String name, T val) { SizeType n = vPredicateSimple_.size(); for (SizeType i = 0; i < n; ++i) Loading @@ -38,7 +41,7 @@ public: private: PsimagLite::String pred_; String pred_; VectorPredicateSimpleType vPredicateSimple_; }; } Loading src/PredicateSimple.h +8 −6 Original line number Diff line number Diff line Loading @@ -29,17 +29,19 @@ public: if (n < 3) err("PredicateSimple: pred must have at least 3 characters\n"); for (SizeType i = 0; i < n - 1; ++i) { String maybeOp = pred.substr(i, 1); if (operatorLength(maybeOp) == 1) { // order matters: test with LONGER FIRST String maybeOp = pred.substr(i, 2); if (operatorLength(maybeOp) == 2) { location = i; length = 1; length = 2; break; } maybeOp = pred.substr(i, 2); if (operatorLength(maybeOp) == 2) { maybeOp = pred.substr(i, 1); if (operatorLength(maybeOp) == 1) { location = i; length = 2; length = 1; break; } } Loading Loading
src/PredicateAnd.h +10 −7 Original line number Diff line number Diff line Loading @@ -4,7 +4,7 @@ #include "PredicateSimple.h" #include "PsimagLite.h" namespace Dmrg { namespace PsimagLite { /* PSIDOC PredicateAnd PredicateAnd is a semicolon-separated list of simple predicates, Loading @@ -17,18 +17,21 @@ class PredicateAnd { public: typedef PsimagLite::Vector<PredicateSimple>::Type VectorPredicateSimpleType; typedef Vector<PredicateSimple>::Type VectorPredicateSimpleType; typedef PredicateSimple::VectorStringType VectorStringType; PredicateAnd(PsimagLite::String pred) PredicateAnd(String pred) : pred_(pred) { PsimagLite::split(tokens, str, ";"); VectorStringType tokens; split(tokens, pred, ";"); const SizeType n = tokens.size(); for (SizeType i = 0; i < n; ++i) vPredicateSimple_.push_back(PredicateSimple(str[i])); vPredicateSimple_.push_back(PredicateSimple(tokens[i])); } template<typename T> bool isTrue(PsimagLite::String name, T val) bool isTrue(String name, T val) { SizeType n = vPredicateSimple_.size(); for (SizeType i = 0; i < n; ++i) Loading @@ -38,7 +41,7 @@ public: private: PsimagLite::String pred_; String pred_; VectorPredicateSimpleType vPredicateSimple_; }; } Loading
src/PredicateSimple.h +8 −6 Original line number Diff line number Diff line Loading @@ -29,17 +29,19 @@ public: if (n < 3) err("PredicateSimple: pred must have at least 3 characters\n"); for (SizeType i = 0; i < n - 1; ++i) { String maybeOp = pred.substr(i, 1); if (operatorLength(maybeOp) == 1) { // order matters: test with LONGER FIRST String maybeOp = pred.substr(i, 2); if (operatorLength(maybeOp) == 2) { location = i; length = 1; length = 2; break; } maybeOp = pred.substr(i, 2); if (operatorLength(maybeOp) == 2) { maybeOp = pred.substr(i, 1); if (operatorLength(maybeOp) == 1) { location = i; length = 2; length = 1; break; } } Loading