Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members

UINodeRepository.h

00001 // Copyright (C) 2001 Jean-Marc Valin
00002 
00003 #ifndef UINODE_REPOSITORY_H
00004 #define UINODE_REPOSITORY_H
00005 
00006 #include <vector>
00007 #include <string>
00008 #include <map>
00009 #include <set>
00010 #include <libxml/tree.h>
00011 
00012 namespace FD {
00013 
00014 class UINetwork;
00015 
00016 class ItemInfo {
00017   public:
00018         std::string name;
00019         std::string type;
00020         std::string value;
00021         std::string description;
00022         
00023         ItemInfo() : type("any"), value(""), description("No description available") {}
00024 };
00025 
00026 class NodeInfo {
00027   public:
00028    enum NodeKind {builtin, subnet, external};
00029    std::vector<ItemInfo *> inputs;
00030    std::vector<ItemInfo *> outputs;
00031    std::vector<ItemInfo *> params;
00032    std::string category;
00033    std::string description;
00034    std::string sourceFile;
00035    std::string requireList;
00036    NodeKind kind;
00037   public:
00038    NodeInfo() : category("Unknown"), description("No description available") {}
00039    ~NodeInfo() {for (unsigned int i=0;i<inputs.size();i++) delete inputs[i];
00040                   for (unsigned int i=0;i<outputs.size();i++) delete outputs[i];
00041                   for (unsigned int i=0;i<params.size();i++) delete params[i];}
00042   private:
00043    NodeInfo(const NodeInfo&) {}
00044 
00045 };
00046 
00047 class UINodeRepository {
00048   public:
00049    typedef std::map<std::string, NodeInfo *>::iterator iterator;
00050 
00051   private:
00052    std::map<std::string, NodeInfo *> info;
00053 
00054    static UINodeRepository &GlobalRepository();
00055 
00057    static std::map<std::string, std::set<std::string> > &ModuleDepend();
00058    
00060    static std::map<std::string, std::set<std::string> > &FileDepend();
00061  
00063    static std::map<std::string, std::set<std::string> > &HeaderDepend();
00064 
00065    static void LoadAllInfoRecursive(const std::string &path);
00066    static void LoadNodeDefInfo(const std::string &path, const std::string &name);
00067    static void LoadExtDocInfo(const std::string &path, const std::string &name);
00068    //NodeInfo *&operator[] (const std::string &name) {return info[name];}
00069   public:
00070 
00071    UINodeRepository() {}
00072 
00073    UINodeRepository(const UINodeRepository &);
00074 
00075    ~UINodeRepository();
00076 
00077    iterator begin() {return info.begin();}
00078    iterator end() {return info.end();}
00079 
00080    NodeInfo *findNode(const std::string &name);
00081 
00082    void loadDocInfo(xmlDocPtr doc, const std::string &basename);
00083 
00084    void loadAllSubnetInfo(xmlNodePtr net);
00085       
00086    void loadNetInfo(xmlNodePtr net);
00087 
00088    void updateNetInfo(UINetwork *net);
00089 
00090    void clean();
00091 
00092    static iterator Begin() {return GlobalRepository().info.begin();}
00093 
00094    static iterator End() {return GlobalRepository().info.end();}
00095 
00096    static void Scan();
00097 
00098    static NodeInfo *Find(const std::string &name);
00099 
00100    static std::set<std::string> &FindFileFromModule(const std::string &name);
00101    
00102    static std::set<std::string> &FindModuleFromFile(const std::string &name);
00103    
00104    static std::set<std::string> &FindHeaderFromFile(const std::string &name);
00105    
00106    static std::vector<std::string> Available();
00107 
00108    static void ProcessDependencies(std::set<std::string> &initial_files, bool toplevel=true);
00109 };
00110 }//namespace FD
00111 
00112 #endif

Generated on Wed Oct 5 14:28:56 2005 for FlowDesigner by  doxygen 1.4.4