]> Creatis software - creaImageIO.git/blob - src/creaImageIOTree.h
#3185 creaImageIO Feature New Normal - Clean code
[creaImageIO.git] / src / creaImageIOTree.h
1 /*
2 # ---------------------------------------------------------------------
3 #
4 # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image 
5 #                        pour la Santé)
6 # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
7 # Previous Authors : Laurent Guigues, Jean-Pierre Roux
8 # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
9 #
10 #  This software is governed by the CeCILL-B license under French law and 
11 #  abiding by the rules of distribution of free software. You can  use, 
12 #  modify and/ or redistribute the software under the terms of the CeCILL-B 
13 #  license as circulated by CEA, CNRS and INRIA at the following URL 
14 #  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html 
15 #  or in the file LICENSE.txt.
16 #
17 #  As a counterpart to the access to the source code and  rights to copy,
18 #  modify and redistribute granted by the license, users are provided only
19 #  with a limited warranty  and the software's author,  the holder of the
20 #  economic rights,  and the successive licensors  have only  limited
21 #  liability. 
22 #
23 #  The fact that you are presently reading this means that you have had
24 #  knowledge of the CeCILL-B license and that you accept its terms.
25 # ------------------------------------------------------------------------
26 */
27
28 #ifndef __creaImageIOTree_h_INCLUDED__
29 #define __creaImageIOTree_h_INCLUDED__
30
31 #include <creaImageIOTreeNode.h>
32 #include <creaImageIOTreeDescriptor.h>
33
34 namespace creaImageIO
35 {
36
37   namespace tree
38   {
39     /**
40      * \ingroup Tree
41      */
42     //=====================================================================
43     /// Abstract class to store user data on a Tree
44     struct TreeData
45     { 
46       TreeData() {}
47       virtual ~TreeData() {}
48     };
49     //=====================================================================
50     
51     //=====================================================================
52     /// An attributed Tree structure
53     /** \ingroup Tree
54      */
55     class Tree : public Node
56     {
57     public:
58       /// Ctor
59       Tree();
60       /// Virtual destructor
61       virtual ~Tree();
62       
63       /// Returns the descriptor of the tree
64     
65       /// Returns the tree to which the node belongs
66       virtual Tree* GetTree() { return this; }
67       /// Returns the tree to which the node belongs
68       virtual const Tree* GetTree() const { return this; }
69       /// Returns the level of the node in the tree
70       virtual int GetLevel() const { return 0; }
71       
72       /// Returns the Descriptor of the tree (const)
73       const Descriptor& GetDescriptor() const { return mDescriptor; }
74       /// Returns the descriptor of the tree 
75       Descriptor& GetDescriptor() { return mDescriptor; }
76
77      /// Returns the number of levels of the tree
78       unsigned int GetNumberOfLevels() 
79       { return GetDescriptor().GetNumberOfLevels(); }
80
81       /// Returns the LevelDescriptor of a given level (const ref)
82       const LevelDescriptor& GetLevelDescriptor(int level) const
83       { return GetDescriptor().GetLevelDescriptor(level); }
84
85       /// Returns the AttributeDescriptorList of a given level (const ref)
86           /// type = 0 all attributes
87           /// type = 1 without ID and PATIENT_ID
88       const LevelDescriptor::AttributeDescriptorListType& 
89       GetAttributeDescriptorList(int level, int type = 0) const
90       { return GetDescriptor().GetAttributeDescriptorList(level, type); }
91   
92       virtual void Print() const;
93
94
95           /// Copy descriptor list without ID tag
96           void CopyAttributeDescriptorList(int level)
97           {
98                   GetDescriptor().CopyAttributeDescriptorList(level);
99           }
100           
101           /// Test if this attribute is available in this tree description
102           const std::string isAttributeExist(const std::string i_attr)
103           {
104                   return mDescriptor.isExist(i_attr);
105           }
106
107     private:
108       Descriptor mDescriptor;
109
110     };
111     // EO class Tree
112     //=====================================================================
113
114   } // EO namespace tree
115   
116 } // EO namespace creaImageIO
117
118 // EOF
119 #endif