00001 00002 #include "cafe/EventFlags.hpp" 00003 00004 #include <algorithm> 00005 #include "cafe/Config.hpp" 00006 #include "cafe/Event.hpp" 00007 #include "tmb_tree/TMBEventFlags.hpp" 00008 00009 00010 namespace cafe { 00011 00012 EventFlags::EventFlags(const char *name) 00013 : Processor(name), 00014 _any(true) 00015 { 00016 using namespace std; 00017 00018 Config config(name); 00019 _flagNames = config.getVString("Any", " ,"); 00020 if(_flagNames.size() == 0) { 00021 _flagNames = config.getVString("All", " ,"); 00022 _any = false; 00023 } 00024 out() << "EventFlags[" << name << "] Flags = " 00025 << (_any ? " Any of :" : "All of :" ); 00026 for(vector<string>::iterator it = _flagNames.begin(); 00027 it != _flagNames.end(); ++it) { 00028 out() << *it << ' '; 00029 } 00030 out() << endl; 00031 TMBEventFlags f; 00032 for(vector<string>::iterator it = _flagNames.begin(); 00033 it != _flagNames.end(); ++it) { 00034 TMBEventFlags::Flag flag = f.GetFlagValue((*it).c_str()); 00035 if (flag == (TMBEventFlags::Flag )128) { 00036 out() << name << " : Unknown flag name: " << *it << endl; 00037 } else { 00038 _flagValues.push_back(flag); 00039 } 00040 } 00041 } 00042 00043 bool EventFlags::processEvent(Event& event) 00044 { 00045 using namespace std; 00046 00047 if(const TMBEventFlags *flags = event.getEventFlags()) { 00048 if(_any) { 00049 for(vector<TMBEventFlags::Flag>::iterator it = _flagValues.begin(); 00050 it != _flagValues.end(); 00051 ++it) { 00052 if(flags->HasFlag(*it)) { 00053 return true; 00054 } 00055 } 00056 return false; 00057 } else { 00058 for(vector<TMBEventFlags::Flag>::iterator it = _flagValues.begin(); 00059 it != _flagValues.end(); 00060 ++it) { 00061 if(!flags->HasFlag(*it)) { 00062 return false; 00063 } 00064 } 00065 return true; 00066 } 00067 } 00068 00069 return false; 00070 00071 } 00072 00073 } 00074 00075 ClassImp(cafe::EventFlags) 00076
1.3.4