]> Creatis software - creaImageIO.git/blob - src2/creaImageIOTreeHandler.h
Documentation Updated
[creaImageIO.git] / src2 / creaImageIOTreeHandler.h
1 #ifndef __creaImageIOTreeHandler_h_INCLUDED__
2 #define __creaImageIOTreeHandler_h_INCLUDED__
3
4 #include <creaImageIOTree.h>
5
6 namespace creaImageIO
7 {
8
9
10   //=======================================================================
11   //class TreeHandlerStatistics;
12   //=======================================================================
13   /**
14    * \ingroup Model
15    */
16   //=======================================================================
17
18   /// Abstract class which 'handles' a Tree structure 
19   class TreeHandler
20   {
21   public:
22
23     //====================================================================
24     //  typedef TreeHandlerStatistics Statistics;
25     //====================================================================
26
27     //====================================================================
28     /// Ctor
29     TreeHandler() {}
30     /// Virtual dtor
31     virtual ~TreeHandler() {}
32     //====================================================================
33
34     //====================================================================
35     /// Returns the Tree handled 
36     tree::Tree& GetTree() { return mTree; }
37     /// Returns the Tree handled (const)
38     const tree::Tree& GetTree() const { return mTree; }
39     //====================================================================
40
41     //====================================================================
42     // QUERY METHODS
43     /// Is the 'source' readable ?
44     virtual bool IsReadable() { return false; }
45     /// Is the 'source' writable ?
46     virtual bool IsWritable() { return false; }
47     //====================================================================
48
49
50     //====================================================================
51     // INITIALIZATION / FINALIZATION
52     //====================================================================
53
54     //====================================================================
55     /// Opens an existing 'source' 
56     // Default mode is read only 
57     // If IsWritable and writable==true then opens in read/write mode
58     virtual bool Open(bool writable = false) { return false; }
59     /// Closes the 'source'
60     virtual bool Close() { return false; }
61     /// Creates a new 'source' 
62     // Default mode is read only 
63     // If IsWritable and writable==true then opens in read/write mode
64     virtual bool Create(bool writable = false) { return false; }
65     /// Destroys the 'source'
66     virtual bool Destroy() { return false; }
67     //====================================================================
68
69
70     //====================================================================
71     // READ METHODS
72     //====================================================================
73
74
75     //====================================================================
76     /// Returns the number of children of the Node *WITHOUT LOADING THEM*
77     // REM : The Tree itself is a Node and asking for its number of 
78     //       children returns the number of children of level 1.
79     virtual unsigned int GetNumberOfChildren(tree::Node* n) { return 0; }
80     //====================================================================
81
82     //====================================================================
83     /// Recursively loads the children of node 'parent' until maxlevel 
84     // is reached.
85     // If maxlevel <= 0 then loads all the sub-tree rooted at parent 
86     // If parent == NULL or parent == tree then starts with the 'children' of 
87     // the tree itself.
88     // Returns the total number of children loaded.
89     virtual int LoadChildren(tree::Node* parent, int maxlevel) 
90     { return 0; }
91     //====================================================================
92
93     //====================================================================
94     /// Unloads the Node and its descendants
95     // WITHOUT altering the source, e.g. the database
96     virtual void UnLoad(tree::Node* n) { return; }
97     //====================================================================
98
99
100     //====================================================================
101     // WRITE METHODS : WORK ONLY IN WRITE MODE
102     //====================================================================
103     typedef tree::Node::AttributeMapType AttributeMapType;
104     /// Adds a branch in the tree with the attributes provided
105     // returns the Level in the tree where the branch was connected 
106     // (-1 for error, 0 for top level, etc. ) 
107     // Of course the branch is loaded on exit
108     virtual int AddBranch( const AttributeMapType& ) { return -1; }
109     /// Removes the node and its descendants 
110     virtual bool Remove(tree::Node*)  { return false; }
111     /// Sets an attribute of a Node
112     virtual bool SetAttribute(tree::Node*, 
113                               const std::string& key,
114                               const std::string& value) { return false; }
115     //====================================================================
116
117
118   private:
119     /// The handled tree
120     tree::Tree mTree;
121
122   };
123   // EO class TreeHandler
124   //=======================================================================
125   /*
126   //=======================================================================
127   /// Memorizes statistics on operations done by a tree handler
128   // (nodes created, removed, ...)
129   class TreeHandlerStatistics
130   {
131   public:
132     //====================================================================
133     /// Ctor
134     TreeHandler(TreeHandler* tree) : mTreeHandler(tree) { Reset(); }
135     /// Dtor
136     ~TreeHandler() {}
137     /// Resets the stats
138     void Reset();
139     /// Prints the stats
140     void Print();
141
142     /// 
143     void CreateNode(int level) { mNumberCreatedNode[level]++; }
144     void DeleteNode(int level) { mNumberDeletedNode[level]++; }
145
146   protected:
147       TreeHandler* mTreeHandler;
148     std::vector<int> mNumberCreatedNode;
149     std::vector<int> mNumberDeletedNode;
150     
151     
152     ///====================================================================
153   };
154   // EO class TreeHandlerStatistics
155   //=======================================================================
156   */
157
158 } // EO namespace creaImageIO
159
160 // EOF
161 #endif  
162