00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00024 #ifndef SHPROGRAMSET_HPP
00025 #define SHPROGRAMSET_HPP
00026
00027 #include <list>
00028 #include <map>
00029 #include "ShProgramNode.hpp"
00030
00031 namespace SH {
00032
00033 class ShBackend;
00034 class ShBackendSet;
00035 class ShProgram;
00036
00037 class
00038 SH_DLLEXPORT ShProgramSet : public ShRefCountable {
00039 public:
00040 ShProgramSet();
00041 explicit ShProgramSet(const ShProgram& a);
00042 ShProgramSet(const ShProgram& a, const ShProgram& b);
00043
00044 typedef std::list<ShProgramNodePtr> NodeList;
00045 typedef NodeList::iterator iterator;
00046 typedef NodeList::const_iterator const_iterator;
00047
00048
00049 NodeList::const_iterator begin() const { return m_nodes.begin(); }
00050 NodeList::const_iterator end() const { return m_nodes.end(); }
00051
00052 ShPointer<ShBackendSet> backend_set(const ShPointer<ShBackend>&) const;
00053
00054 private:
00055 NodeList m_nodes;
00056
00057 typedef std::map<ShPointer<ShBackend>, ShPointer<ShBackendSet> > BackendMap;
00058 mutable BackendMap m_backend_sets;
00059
00060
00061 ShProgramSet(const ShProgramSet& other);
00062 ShProgramSet& operator=(const ShProgramSet& other);
00063 };
00064
00065 typedef ShPointer<ShProgramSet> ShProgramSetPtr;
00066 typedef ShPointer<const ShProgramSet> ShProgramSetCPtr;
00067
00068 }
00069
00070 #endif