-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathproperty_predicate.cc
65 lines (53 loc) · 1.86 KB
/
property_predicate.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/*
* ===============================================================
* Description: Implement property predicate.
*
* Author: Ayush Dubey, [email protected]
*
* Copyright (C) 2014, Cornell University, see the LICENSE file
* for licensing agreement
* ===============================================================
*/
#include <assert.h>
#define weaver_debug_
#include "common/weaver_constants.h"
#include "common/property_predicate.h"
using predicate::prop_predicate;
bool
prop_predicate :: check(const node_prog::property &prop) const
{
switch (rel) {
case EQUALS:
return key == prop.get_key() && prop.get_value() == value;
break;
case LESS:
return key == prop.get_key() && prop.get_value() < value;
break;
case GREATER:
return key == prop.get_key() && prop.get_value() > value;
break;
case LESS_EQUAL:
return key == prop.get_key() && prop.get_value() <= value;
break;
case GREATER_EQUAL:
return key == prop.get_key() && prop.get_value() >= value;
break;
case STARTS_WITH:
return key == prop.get_key()
&& prop.get_value().size() >= value.size()
&& prop.get_value().compare(0, value.size(), value) == 0;
break;
case ENDS_WITH:
return key == prop.get_key()
&& prop.get_value().size() >= value.size()
&& prop.get_value().compare(prop.get_value().size()-value.size(), value.size(), value) == 0;
break;
case CONTAINS:
return key == prop.get_key()
&& prop.get_value().find(value) != std::string::npos;
break;
default:
WDEBUG << "bad rel " << rel << std::endl;
return false;
}
}