ControlTrace.hxx
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef CONTROL_TRACE_HXX
00024 #define CONTROL_TRACE_HXX
00025
00026 #include "Processing.hxx"
00027 #include "ProcessingConfig.hxx"
00028 #include "InControlArray.hxx"
00029 #include "OutControlArray.hxx"
00030 #include "Filename.hxx"
00031 #include <vector>
00032
00033 namespace CLAM
00034 {
00035
00036 class ControlTraceEvent : public Component {
00037 public:
00038 typedef std::vector<TControlData> ValueArray;
00039
00040 ControlTraceEvent();
00041 ControlTraceEvent(const InControlArray &inputs);
00042 ControlTraceEvent(const ControlTraceEvent &event);
00043 const ControlTraceEvent& operator=( const ControlTraceEvent& );
00044 virtual ~ControlTraceEvent() { }
00045
00046 const char *GetClassName() const { return "ControlTraceEvent"; }
00047
00048 void LoadFrom( Storage& storage);
00049 void StoreOn( Storage& storage ) const;
00050
00051 void WasRepeated() { mRepeats++; }
00052 unsigned int Repeats() const { return mRepeats; }
00053
00054 size_t Size() const { return mValues.size(); }
00055
00056 void UpdateControls(OutControlArray &array) const;
00057
00058 bool ValuesEqual(const ControlTraceEvent &rhs) const;
00059
00060 private:
00061 unsigned int mRepeats;
00062 ValueArray mValues;
00063 };
00064
00065 class ControlTraceData : public Component {
00066 static const unsigned int DumpVersion;
00067 public:
00068 typedef std::list<ControlTraceEvent> EventList;
00069 virtual ~ControlTraceData() { }
00070
00071 ControlTraceData();
00072 ControlTraceData(const ControlTraceData &obj);
00073
00074 const char *GetClassName() const { return "ControlTraceData"; }
00075
00076 unsigned int GetVersion() const { return mVersion; }
00077
00078 void LoadFrom( Storage& storage);
00079 void StoreOn( Storage& storage ) const;
00080
00081 size_t GetNumberOfControls() const { return mEvents.front().Size(); }
00082
00083 void Append(const ControlTraceEvent &data);
00084
00085 EventList::iterator Begin() { return mEvents.begin(); }
00086 EventList::iterator End() { return mEvents.end(); }
00087
00088 void Clear() { mEvents.clear(); }
00089
00090 private:
00091 unsigned int mVersion;
00092 EventList mEvents;
00093 };
00094
00095
00096 class ControlTraceInFilename : public InFilename
00097 {
00098 public:
00099 ControlTraceInFilename(const std::string & s="") : InFilename(s) {}
00100 ControlTraceInFilename(const char * s) : InFilename(s) {}
00101 const char* TypeFamily() const;
00102 const Filter * Filters() const;
00103 };
00104 CLAM_TYPEINFOGROUP(BasicCTypeInfo, ControlTraceInFilename);
00105
00106 class ControlTraceReaderConfig : public ProcessingConfig {
00107 DYNAMIC_TYPE_USING_INTERFACE
00108 ( ControlTraceReaderConfig, 1, ProcessingConfig );
00109
00110 DYN_ATTRIBUTE( 0, public, ControlTraceInFilename, TraceFile );
00111
00112 protected:
00113 void DefaultInit();
00114 };
00115
00116 class ControlTraceReader : public Processing
00117 {
00118 public:
00119 ControlTraceReader();
00120 ControlTraceReader( const ProcessingConfig& cfg );
00121 virtual ~ControlTraceReader();
00122
00123 const char* GetClassName() const { return "ControlTraceReader"; }
00124 const ProcessingConfig& GetConfig() const { return mConfig; }
00125
00126 bool Do();
00127
00128 protected:
00129 bool ConcreteConfigure( const ProcessingConfig& cfgObject );
00130 bool ConcreteStart();
00131 void RemoveOldControls();
00132
00133 protected:
00134 ControlTraceReaderConfig mConfig;
00135 ControlTraceData mTrace;
00136 ControlTraceData::EventList::iterator mIterator;
00137 unsigned int mRepeatCounter;
00138 OutControlArray mOutputs;
00139 };
00140
00141
00142 class ControlTraceOutFilename : public OutFilename
00143 {
00144 public:
00145 ControlTraceOutFilename(const std::string & s="") : OutFilename(s) {}
00146 ControlTraceOutFilename(const char * s) : OutFilename(s) {}
00147 const char* TypeFamily() const;
00148 const Filter * Filters() const;
00149 };
00150 CLAM_TYPEINFOGROUP(BasicCTypeInfo, ControlTraceOutFilename);
00151
00152 class ControlTraceWriterConfig : public ProcessingConfig {
00153 DYNAMIC_TYPE_USING_INTERFACE
00154 ( ControlTraceWriterConfig, 2, ProcessingConfig );
00155
00156 DYN_ATTRIBUTE( 0, public, ControlTraceOutFilename, TraceFile );
00157 DYN_ATTRIBUTE( 1, public, TData, NumberOfInputs );
00158
00159 protected:
00160 void DefaultInit();
00161 };
00162
00163 class ControlTraceWriter : public Processing
00164 {
00165 public:
00166 ControlTraceWriter();
00167 ControlTraceWriter( const ProcessingConfig& cfg );
00168 virtual ~ControlTraceWriter();
00169
00170 const char* GetClassName() const { return "ControlTraceWriter"; }
00171 const ProcessingConfig& GetConfig() const { return mConfig; }
00172
00173 bool Do();
00174
00175 protected:
00176 bool ConcreteConfigure( const ProcessingConfig& cfgObject );
00177 bool ConcreteStop();
00178 void RemoveOldControls();
00179
00180 protected:
00181 ControlTraceWriterConfig mConfig;
00182 ControlTraceData mTrace;
00183 InControlArray mInputs;
00184 };
00185
00186 }
00187
00188 #endif