1
#include "relevantset.h"
5
RelevantSet::RelevantSet()
7
memset(RelevantFlag, '\0', sizeof(RelevantFlag));
11
unsigned RelevantSet::add(const string &event) {
12
unsigned u = EventSet::add(event);
13
RelevantFlag[u >> 3] |= 0200 >> (u & 07);
18
void RelevantSet::SetRelevant(const EventSet &relev) {
19
memcpy(RelevantFlag, relev.EventFlag, sizeof(RelevantFlag));
23
void RelevantSet::print() {
24
for ( int i = EventNames.count() ; i != 0 ; ) {
26
if ( EventFlag[i >> 3] & 0200 >> (i & 07) ||
27
RelevantFlag[i >> 3] & 0200 >> (i & 07) )
29
EventFlag[i >> 3] & 0200 >> (i & 07) ? '+' : '-',
30
EventNames[i].getstr());
35
string RelevantSet::GetGuards() const {
36
/* calculates a string composed of all the guards */
38
for ( int i = EventNames.count() ; i != 0 ; ) {
40
const string *str = &EventNames[i];
41
if ( '[' == (*str)[0] && ']' == (*str)[str->length() - 1] &&
42
RelevantFlag[i >> 3] & 0200 >> (i & 07) ) {
43
if ( result.length() )
47
ev.add(str->getstr() + 1,
49
if ( 0 == (EventFlag[i >> 3] & 0200 >> (i & 07)) )
50
for ( int j = 0 ; ; j++ ) {
51
if ( j >= ev.length() ) {
56
if ( '<' == ev[j] || '=' == ev[j] || '>' == ev[j] ) {
57
result.add(ev.getstr(), j);
60
result += &(ev.getstr()[j+1]);
62
result.add(ev.getstr(),j);
64
} else if ( '<' == ev[j] && '>' == ev[j+1] ) {
68
result += char('>' + '<' - ev[j]);
74
result += &(ev.getstr()[j+1]);
79
for ( int j = 0 ; ; j++ ) {
80
if ( j >= ev.length() ) {
84
if ( '<' == ev[j] && '>' == ev[j+1] ) {
85
result.add(ev.getstr(), j);
87
result += &(ev.getstr()[j+2]);
89
result.add(ev.getstr(), j);
91
result += &(ev.getstr()[j+2]);