Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

Tools/Debugging/DebugKeyTable.cpp

Go to the documentation of this file.
00001 /** 
00002 * @file DebugKeyTable.cpp
00003 * Implementation of class DebugKey and DebugKeyTable
00004 *
00005 * @author <a href=mailto:brunn@sim.informatik.tu-darmstadt.de>Ronnie Brunn</a>
00006 * @author <a href=mailto:martin@martin-loetzsch.de>Martin Lötzsch</a>
00007 * @author <a href=mailto:risler@sim.informatik.tu-darmstadt.de>Max Risler</a>
00008 */
00009 
00010 #include "Platform/SystemCall.h"
00011 #include "DebugKeyTable.h"
00012 
00013 
00014 DebugKey::DebugKey(modes mode, unsigned int n) 
00015 : mode(mode), n(n), last(0), active(false) 
00016 {}
00017 
00018 void DebugKey::set(modes mode, unsigned int n)
00019 {
00020   this->mode = mode;
00021   this->n = n;
00022   last = 0;
00023   active = false;
00024 }
00025 
00026 DebugKeyTable::DebugKeyTable()
00027 {
00028   reset();
00029 }
00030 
00031 void DebugKeyTable::set(debugKeyID id, DebugKey::modes mode, int n) 
00032 {
00033   debugKeys[id].set(mode, n);
00034 }
00035 
00036 void DebugKeyTable::setMode(debugKeyID id, DebugKey::modes mode)
00037 {
00038   debugKeys[id].set(mode,debugKeys[id].n);
00039 }
00040 
00041 void DebugKeyTable::setN(debugKeyID id, unsigned int n)
00042 {
00043   debugKeys[id].set(debugKeys[id].mode,n);
00044 }
00045 
00046 DebugKey::modes DebugKeyTable::getMode(debugKeyID id) const
00047 { 
00048   return debugKeys[id].mode;
00049 }
00050 
00051 unsigned int DebugKeyTable::getN(debugKeyID id) const
00052 { 
00053   return debugKeys[id].n;
00054 }
00055 
00056 bool DebugKeyTable::isActive(debugKeyID id) const
00057 {
00058   return debugKeys[id].active;
00059 }
00060 
00061 
00062 void DebugKeyTable::reset()
00063 {
00064   for (int key=0;key<DebugKeyTable::numOfDebugKeys;key++)
00065   {
00066     set((debugKeyID) key, DebugKey::disabled, 0);
00067   }
00068 }
00069 
00070 void DebugKeyTable::activate()
00071 {
00072   for (int key=0;key<DebugKeyTable::numOfDebugKeys;key++)
00073   {
00074     switch (debugKeys[key].mode)
00075     {
00076       case DebugKey::disabled:
00077         debugKeys[key].active = false;
00078         break;
00079       case DebugKey::always:
00080         debugKeys[key].active = true;
00081         break;
00082       case DebugKey::n_times:
00083         if (debugKeys[key].last < debugKeys[key].n) 
00084         {
00085           debugKeys[key].last++;
00086           debugKeys[key].active = true;
00087         }
00088         else
00089         { 
00090           debugKeys[key].active = false;
00091         }    
00092         break;
00093       case DebugKey::every_n_times:
00094         if(debugKeys[key].n == 0) debugKeys[key].n = 1;
00095         debugKeys[key].last++;
00096         debugKeys[key].active = (debugKeys[key].last % debugKeys[key].n == 0);
00097         break;
00098       case DebugKey::every_n_ms:
00099         {
00100           unsigned long currentTime = SystemCall::getCurrentSystemTime();
00101           if (currentTime >= debugKeys[key].last + debugKeys[key].n) 
00102           {
00103             debugKeys[key].last = currentTime;
00104             debugKeys[key].active = true;
00105           }
00106           else
00107           {
00108             debugKeys[key].active = false;
00109           }
00110         }
00111         break;
00112       default:
00113         debugKeys[key].active = false;
00114     }
00115   }
00116 }
00117 
00118 bool DebugKeyTable::operator == (const DebugKeyTable& other)
00119 {
00120   for (int key=0;key<DebugKeyTable::numOfDebugKeys;key++)
00121   {
00122     if (debugKeys[key].mode != other.debugKeys[key].mode
00123       || debugKeys[key].n != other.debugKeys[key].n)
00124       return false;
00125   }    
00126   return true;
00127 }
00128 
00129 In& operator>>(In& stream,DebugKeyTable& debugKeyTable)
00130 {
00131   //old versions of a debugKeyTable might have less entries than numOfDebugKeys.
00132   char numberOfDebugKeysInStream;
00133   stream >> numberOfDebugKeysInStream;
00134 
00135   for (int i = 0;i < numberOfDebugKeysInStream; i++)
00136   {
00137     if(i < DebugKeyTable::numOfDebugKeys)
00138     {
00139       int mode;
00140       unsigned int n;
00141       stream >> mode >> n;
00142       debugKeyTable.set((DebugKeyTable::debugKeyID)i, (DebugKey::modes)mode, n);
00143     }
00144   }
00145   return stream;
00146 }
00147 
00148 Out& operator<<(Out& stream, DebugKeyTable& debugKeyTable)
00149 {
00150   stream << (char)DebugKeyTable::numOfDebugKeys;
00151 
00152   for (int i=0;i<DebugKeyTable::numOfDebugKeys;i++)
00153   {
00154     stream << (int)debugKeyTable.getMode((DebugKeyTable::debugKeyID)i)
00155       << debugKeyTable.getN((DebugKeyTable::debugKeyID)i);
00156   }
00157   return stream;
00158 }
00159 
00160 /*
00161  * Change log :
00162  * 
00163  * $Log: DebugKeyTable.cpp,v $
00164  * Revision 1.1.1.1  2004/05/22 17:36:05  cvsadm
00165  * created new repository GT2004_WM
00166  *
00167  * Revision 1.1  2003/10/07 10:13:22  cvsadm
00168  * Created GT2004 (M.J.)
00169  *
00170  * Revision 1.1.1.1  2003/07/02 09:40:28  cvsadm
00171  * created new repository for the competitions in Padova from the 
00172  * tamara CVS (Tuesday 2:00 pm)
00173  *
00174  * removed unused solutions
00175  *
00176  * Revision 1.7  2002/12/18 16:22:56  dueffert
00177  * doxygen docu corrected
00178  *
00179  * Revision 1.6  2002/11/19 17:38:31  dueffert
00180  * doxygen bugs corrected
00181  *
00182  * Revision 1.5  2002/11/19 15:43:03  dueffert
00183  * doxygen comments corrected
00184  *
00185  * Revision 1.4  2002/10/01 11:14:34  loetzsch
00186  * Redesigned DebugKey and DebugKeyTable
00187  *
00188  * Revision 1.3  2002/09/29 18:03:29  loetzsch
00189  * renamed calculate... to activateDebugKeys
00190  *
00191  * Revision 1.2  2002/09/29 12:32:37  juengel
00192  * Changed semantics of "debug key is active".
00193  * If a debug key is active changes only before the execution of a process.
00194  *
00195  * Revision 1.1  2002/09/10 15:53:58  cvsadm
00196  * Created new project GT2003 (M.L.)
00197  * - Cleaned up the /Src/DataTypes directory
00198  * - Removed challenge related source code
00199  * - Removed processing of incoming audio data
00200  * - Renamed AcousticMessage to SoundRequest
00201  *
00202  * Revision 1.2  2002/06/04 00:11:52  loetzsch
00203  * added == and != operator
00204  *
00205  * Revision 1.1.1.1  2002/05/10 12:40:32  cvsadm
00206  * Moved GT2002 Project from ute to tamara.
00207  *
00208  * Revision 1.5  2002/02/18 14:07:22  juengel
00209  * streaming operators send and receive numberOfDebugKeys
00210  *
00211  * Revision 1.4  2002/01/23 07:50:03  loetzsch
00212  * removed workaround in the >> streaming operator
00213  *
00214  * Revision 1.3  2001/12/20 17:13:42  loetzsch
00215  * streaming operators implemented,  simplified
00216  *
00217  * Revision 1.2  2001/12/13 15:03:02  loetzsch
00218  * DebugKeyToolBar fertig
00219  *
00220  * Revision 1.1  2001/12/12 15:21:09  juengel
00221  * CDebugKeyToolBar in eigenes .cpp und .h File verlagert.
00222  *
00223  * Revision 1.5  2001/12/10 17:47:05  risler
00224  * change log added
00225  *
00226  */

Generated on Thu Sep 23 19:57:37 2004 for GT2004 by doxygen 1.3.6