#ifndef SA_Output_H #define SA_Output_H #include //#include #include #define N_OUTPUT_FCT 11 // number of output funktions enum SA_OUTPUT_VARTYPE {NO_SA_OUTPUT_VARTYPE,SA_BYTE,SA_INT,SA_FLOAT,SA_DOUBLE,SA_LONG,SA_STRING}; enum SA_OUTPUT_FCTTYPE {SA_OUT_INIT, SA_OUT_N, SA_OUT_CDNEG, SA_OUT_CDPOS, SA_OUT_ACC, SA_OUT_NOTACC,SA_OUT_EQUIYES,SA_OUT_EQUINO,SA_OUT_DT,SA_OUT_FROZYES, SA_OUT_FROZNO,NO_SA_OUTPUT_FCTTYPE,}; static const char* SA_OUTPUT_FCTTYPE_NAMES[N_OUTPUT_FCT] = { "SA_OUT_INIT","SA_OUT_N","SA_OUT_CDNEG","SA_OUT_CDPOS","SA_OUT_ACC", "SA_OUT_NOTACC","SA_OUT_EQUIYES","SA_OUT_EQUINO","SA_OUT_DT","SA_OUT_FROZYES", "SA_OUT_FROZNO"}; struct OutStr { int level; char *outstr; int varnumber; }; class SA_Output { private: TIntKeyList *variables; TIntKeyList *outstrs; char *identifier; // identifier of this instance, is used to find block in rsc file int outlevel; // the current outlevel SA_Output *prevoutput; // SA_Output which functions are called also if a function of the current is called // can be used to produce extended output in derivated classes etc. int printid; // 1 = print identifier (default), 0 = do not print identifier int printlevel; // 1 = print outlevel of output strings (default), 0 = do not print them SA_OUTPUT_FCTTYPE DetermineFctType(char *fktstr); void ParseLine(int,SA_OUTPUT_FCTTYPE,char *); char *ExtractString(int,int,char *); void StripLeadingPosInt(int *, char *); struct OutVariable { void (SA_Output::*outfct)(void *); void *data; }; void OutByte(void *data); void OutInt(void *data); void OutLong(void *data); void OutFloat(void *data); void OutDouble(void *data); void OutString(void *data); protected: void OutputFunction(SA_OUTPUT_FCTTYPE); public: void AddVariable(int,SA_OUTPUT_VARTYPE,void *); SA_Output(char *,char *); virtual ~SA_Output(); void SetPreviousOutput(SA_Output *); virtual void OutputInit(); virtual void OutputNeighbor(); virtual void OutputCostDiffNeg(); virtual void OutputCostDiffPos(); virtual void OutputAccept(); virtual void OutputNotAccept(); virtual void OutputEquiYes(); virtual void OutputEquiNo(); virtual void OutputDecrT(); virtual void OutputFrozenYes(); virtual void OutputFrozenNo(); void SetOutputLevel(int); void EnableIdentifier(int); void EnableLevelNumbers(int); }; #endif