00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef C_DISCRETIZER__H
00033 #define C_DISCRETIZER__H
00034
00035 #include "cstatemodifier.h"
00036
00037 #include <map>
00038
00040
00051 class CAbstractStateDiscretizer : public CStateModifier
00052 {
00053 protected:
00055 std::map<int, std::pair<CStateModifier *, CState *>*> *stateSubstitutions;
00056
00057 public:
00059 CAbstractStateDiscretizer(unsigned int numStates);
00060 virtual ~CAbstractStateDiscretizer();
00061
00063 virtual unsigned int getDiscreteStateSize();
00065 virtual unsigned int getDiscreteStateNumber(CStateCollection *state) = 0;
00066
00068
00073 virtual void getModifiedState(CStateCollection *originalState, CState *modifiedState);
00074
00076 virtual void addStateSubstitution(int discState, CStateModifier *modifier);
00078 virtual void removeStateSubstitution(int discState);
00079 };
00080
00082
00086 class CModelStateDiscretizer : public CAbstractStateDiscretizer
00087 {
00088 protected:
00089 CStateProperties *originalState;
00090 unsigned int numDiscStateVar;
00091 int *discreteStates;
00092
00093 unsigned int calcDiscreteStateSize(CStateProperties *prop, int *discreteStates, unsigned int num);
00094
00095 public:
00097
00102 CModelStateDiscretizer(CStateProperties *properties, int *discretStates = NULL, unsigned int numDiscreteStates = 0);
00103 virtual ~CModelStateDiscretizer();
00104
00106 virtual unsigned int getDiscreteStateNumber(CStateCollection *state);
00107 };
00108
00110
00117 class CSingleStateDiscretizer : public CAbstractStateDiscretizer
00118 {
00119 protected:
00121 int dimension;
00122 int numPartitions;
00123 double *partitions;
00124
00126 CStateProperties *originalState;
00127
00128 public:
00129 CSingleStateDiscretizer(int dimension, int numPartitions, double *partitions);
00130 virtual ~CSingleStateDiscretizer();
00132 virtual unsigned int getDiscreteStateNumber(CStateCollection *state);
00134 virtual void setOriginalState(CStateProperties *originalState);
00135 };
00136
00138
00144 class CDiscreteStateOperatorAnd : public CStateMultiModifier, public CAbstractStateDiscretizer
00145 {
00146 public:
00147 CState *stateBuf;
00148
00149 public:
00150 CDiscreteStateOperatorAnd();
00151 virtual ~CDiscreteStateOperatorAnd();
00153 virtual unsigned int getDiscreteStateNumber(CStateCollection *state);
00154
00156 virtual void addStateModifier(CAbstractStateDiscretizer *featCalc);
00157 };
00158
00159 #endif
00160