00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00024 #ifndef SHCONTEXT_HPP
00025 #define SHCONTEXT_HPP
00026
00027 #include <string>
00028 #include <map>
00029 #include "ShDllExport.hpp"
00030 #include "ShProgram.hpp"
00031
00032 namespace SH {
00033
00034 class
00035 SH_DLLEXPORT ShContext {
00036 public:
00037 static ShContext* current();
00038
00040 int optimization() const;
00041 void optimization(int level);
00042
00045 bool throw_errors() const;
00046 void throw_errors(bool on);
00047
00051 void disable_optimization(const std::string& name);
00053 void enable_optimization(const std::string& name);
00055 bool optimization_disabled(const std::string& name) const;
00056
00057 typedef std::map<std::string, ShProgram> BoundProgramMap;
00058
00059 BoundProgramMap::iterator begin_bound();
00060 BoundProgramMap::iterator end_bound();
00061
00063 void set_binding(const std::string& unit, ShProgram program);
00065 void unset_binding(const std::string& unit);
00066
00068 ShProgramNodePtr parsing();
00069
00071 void enter(const ShProgramNodePtr& program);
00072
00074 void exit();
00075
00076 private:
00077 ShContext();
00078
00079 int m_optimization;
00080 bool m_throw_errors;
00081
00082 BoundProgramMap m_bound;
00083 std::stack<ShProgramNodePtr> m_parsing;
00084
00085 std::set<std::string> m_disabled_optimizations;
00086
00087 static ShContext* m_instance;
00088
00089
00090 ShContext(const ShContext& other);
00091 ShContext& operator=(const ShContext& other);
00092 };
00093
00094 typedef ShContext::BoundProgramMap::iterator ShBoundIterator;
00095
00097 SH_DLLEXPORT
00098 ShBoundIterator shBeginBound();
00099
00101 SH_DLLEXPORT
00102 ShBoundIterator shEndBound();
00103
00104 }
00105
00106 #endif