00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _TYPEHELPER_HH_
00023 #define _TYPEHELPER_HH_
00024
00025 #if defined(_WIN32) && defined(_MSC_VER)
00026 # ifdef TYPEHELPER_EXPORTS
00027 # define TYPEHELPER_API __declspec(dllexport)
00028 # else
00029 # define TYPEHELPER_API __declspec(dllimport)
00030 # endif
00031 #else
00032 # define TYPEHELPER_API
00033 #endif
00034
00035 #include <list>
00036 #include <deque>
00037 #include <map>
00038 #include <set>
00039 #include <string>
00040 #include <stdexcept>
00041
00042 using namespace std;
00043
00044
00045
00046
00047
00048 class TYPEHELPER_API ProcessEndCallback
00049 {
00050 public:
00051
00052 virtual void notifyProcessTerminate(int pid) = 0;
00053 };
00054
00055
00056 class TYPEHELPER_API DeleteTempFile : public ProcessEndCallback
00057 {
00058 private:
00059 string file;
00060 set<int>* other_pids;
00061 public:
00062
00063
00064
00065 DeleteTempFile(const string& f);
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076 DeleteTempFile(const string& f, set<int>* pidset);
00077
00078 virtual ~DeleteTempFile();
00079 virtual void notifyProcessTerminate(int pid);
00080 };
00081
00082 class TYPEHELPER_API TypeHelper {
00083 private:
00084 string type;
00085 deque<string> parameters;
00086 string target;
00087 typedef enum { DATA, VOBJECT } RunFunc;
00088 RunFunc runFunc;
00089
00090 public:
00091
00092 TypeHelper() :
00093 runFunc(DATA)
00094 { }
00095
00096 TypeHelper(string init_type) :
00097 type(init_type),
00098 runFunc(DATA)
00099 { }
00100
00101 static void init(string filename);
00102 static deque<TypeHelper> findVobjectHelpers(const set<string>& s, const string& objpath);
00103 static deque<TypeHelper> findDataHelpers(const string& s, const string& tempfile);
00104 static void addHelper(const string& configline);
00105 static void addProcessEndCallback(int pid, ProcessEndCallback* pec);
00106 static void removeProcessEndCallback(int pid, ProcessEndCallback* pec);
00107 static void checkProcesses();
00108
00109 string getType() { return type; }
00110 const deque<string>& getParameters() { return parameters; }
00111 string getCommand();
00112 int run();
00113
00114 void setType(string t) { type = t; }
00115 void setParameters(deque<string> params) { parameters = params; }
00116 void setCommand(const string& cmd);
00117 };
00118
00119 #endif