00001
00015 #ifndef OSOUTPUT_H
00016 #define OSOUTPUT_H
00017
00018 #include "OSConfig.h"
00019 #include "OSParameters.h"
00020 #include "OSReferenced.hpp"
00021 #include "OSSmartPtr.hpp"
00022
00023 #include <string>
00024 #include <vector>
00025
00026 #ifdef HAVE_CSTDIO
00027 # include <cstdio>
00028 #else
00029 # ifdef HAVE_STDIO_H
00030 # include <stdio.h>
00031 # else
00032 # error "don't have header file for stdio"
00033 # endif
00034 #endif
00035
00040 enum ENUM_OUTPUT_LEVEL
00041 {
00042 ENUM_OUTPUT_LEVEL_always = 0,
00043 ENUM_OUTPUT_LEVEL_error,
00044 ENUM_OUTPUT_LEVEL_summary,
00045 ENUM_OUTPUT_LEVEL_warning,
00046 ENUM_OUTPUT_LEVEL_info,
00047 ENUM_OUTPUT_LEVEL_debug,
00048 ENUM_OUTPUT_LEVEL_trace,
00049 ENUM_OUTPUT_LEVEL_detailed_trace,
00050
00051 ENUM_OUTPUT_LEVEL_NUMBER_OF_LEVELS
00052 };
00053
00054 #define DEFAULT_OUTPUT_LEVEL ENUM_OUTPUT_LEVEL_error
00055
00061 enum ENUM_OUTPUT_AREA
00062 {
00063 ENUM_OUTPUT_AREA_main = 0,
00064 ENUM_OUTPUT_AREA_OSAgent,
00065 ENUM_OUTPUT_AREA_Command_line_parser,
00066 ENUM_OUTPUT_AREA_OSiL_parser,
00067 ENUM_OUTPUT_AREA_OSoL_parser,
00068 ENUM_OUTPUT_AREA_OSrL_parser,
00069 ENUM_OUTPUT_AREA_OSGeneral,
00070 ENUM_OUTPUT_AREA_OSInstance,
00071 ENUM_OUTPUT_AREA_OSOption,
00072 ENUM_OUTPUT_AREA_OSResult,
00073 ENUM_OUTPUT_AREA_OSExpressionTree,
00074 ENUM_OUTPUT_AREA_OSiLwriter,
00075 ENUM_OUTPUT_AREA_OSoLwriter,
00076 ENUM_OUTPUT_AREA_OSrLwriter,
00077 ENUM_OUTPUT_AREA_OSModelInterfaces,
00078 ENUM_OUTPUT_AREA_OSSolverInterfaces,
00079 ENUM_OUTPUT_AREA_OSUtils,
00080
00081 ENUM_OUTPUT_AREA_NUMBER_OF_AREAS
00082 };
00083
00088 class OSOutputChannel
00089 {
00090 private:
00094 std::string name;
00095
00099 FILE* file;
00100
00104 int printLevel[ENUM_OUTPUT_AREA_NUMBER_OF_AREAS];
00105
00106
00107 public:
00113 OSOutputChannel(std::string name);
00114
00118 ~OSOutputChannel();
00119
00123 std::string Name();
00124
00131 bool setPrintLevel(ENUM_OUTPUT_AREA area, ENUM_OUTPUT_LEVEL level);
00132
00137 bool setAllPrintLevels(ENUM_OUTPUT_LEVEL level);
00138
00144 bool setAllPrintLevels(ENUM_OUTPUT_LEVEL* level, int dim);
00145
00149 bool isAccepted(ENUM_OUTPUT_AREA area, ENUM_OUTPUT_LEVEL level);
00150
00161 void OSPrintf(ENUM_OUTPUT_AREA area, ENUM_OUTPUT_LEVEL level, std::string str);
00162
00166 void flushBuffer();
00167
00172 bool Open();
00173 };
00174
00193 class OSOutput : public OSReferencedObject
00194 {
00195 private:
00196 OSOutput(const OSOutput&);
00197 OSOutput& operator =(const OSOutput&);
00198 public:
00202 OSOutput();
00203
00207 ~OSOutput();
00208
00218 bool OSPrint(ENUM_OUTPUT_AREA area, ENUM_OUTPUT_LEVEL level, std::string outStr);
00219
00223 void FlushAllBuffers();
00224
00231 bool SetPrintLevel(std::string name, ENUM_OUTPUT_LEVEL* level, int dim);
00232
00240 bool SetPrintLevel(std::string name, ENUM_OUTPUT_LEVEL level);
00241
00250 int AddChannel(std::string name);
00251
00252
00257 bool DeleteChannel(std::string name);
00258
00264 int FindChannel(std::string name);
00265
00266 private:
00270 int nOfOutputs;
00271
00275 OSOutputChannel** outputChannel;
00276 };
00277
00278
00279
00280
00281
00282
00283 extern const OSSmartPtr<OSOutput> osoutput;
00284
00285 #endif