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 bool is_bound(const std::string& target);
00058 ShProgramNodePtr bound_program(const std::string& target);
00059
00060
00061 typedef std::map<std::string, ShProgram> BoundProgramMap;
00062
00063 BoundProgramMap::iterator begin_bound();
00064 BoundProgramMap::iterator end_bound();
00065
00067 void set_binding(const std::string& unit, const ShProgram& program);
00069 void unset_binding(const std::string& unit);
00070
00072 ShProgramNodePtr parsing();
00073
00075 void enter(const ShProgramNodePtr& program);
00076
00078 void exit();
00079
00080 private:
00081 ShContext();
00082
00083 int m_optimization;
00084 bool m_throw_errors;
00085
00086 BoundProgramMap m_bound;
00087 std::stack<ShProgramNodePtr> m_parsing;
00088
00089 std::set<std::string> m_disabled_optimizations;
00090
00091 static ShContext* m_instance;
00092
00093
00094 ShContext(const ShContext& other);
00095 ShContext& operator=(const ShContext& other);
00096 };
00097
00098 typedef ShContext::BoundProgramMap::iterator ShBoundIterator;
00099
00101 SH_DLLEXPORT
00102 bool shIsBound(const std::string& target);
00103
00105 SH_DLLEXPORT
00106 ShProgramNodePtr shBound(const std::string& target);
00107
00109 SH_DLLEXPORT
00110 ShBoundIterator shBeginBound();
00111
00113 SH_DLLEXPORT
00114 ShBoundIterator shEndBound();
00115
00116 }
00117
00118 #endif