Commit 5503e82b authored by Alvarez, Gonzalo's avatar Alvarez, Gonzalo
Browse files

Predicates: PredicateAnd tested OK

parent 4041b831
Loading
Loading
Loading
Loading
+10 −7
Original line number Diff line number Diff line
@@ -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,
@@ -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)
@@ -38,7 +41,7 @@ public:

private:

	PsimagLite::String pred_;
	String pred_;
	VectorPredicateSimpleType vPredicateSimple_;
};
}
+8 −6
Original line number Diff line number Diff line
@@ -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;
			}
		}