Main Page | Modules | Namespace List | Class Hierarchy | Class List | File List | Namespace Members | Class Members | File Members

EventFlags.cpp

Go to the documentation of this file.
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 

Generated on Tue Mar 28 10:13:03 2006 for CAF by doxygen 1.3.4