X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src2%2FcreaImageIOTreeNode.h;h=2905c1a8a0e2784d201da383fe54c2697919afd7;hb=bdd74f95d714a988d85aed66808faf44ef5b4963;hp=07b46cfb20efe18230ecf071bd23697ed205df90;hpb=cbf693fa62cd51f4ca5c881838bbb609edc447b0;p=creaImageIO.git diff --git a/src2/creaImageIOTreeNode.h b/src2/creaImageIOTreeNode.h index 07b46cf..2905c1a 100644 --- a/src2/creaImageIOTreeNode.h +++ b/src2/creaImageIOTreeNode.h @@ -3,21 +3,26 @@ #include #include +#include #include #include + namespace creaImageIO { namespace tree { + /** + * \ingroup Tree + */ //===================================================================== /// Forward declaration of Tree class Tree; //===================================================================== //===================================================================== - /// Abstract class to store user data on a tree node + /// Abstract class to store user data on a Tree node struct NodeData { NodeData() {} @@ -27,15 +32,22 @@ namespace creaImageIO //===================================================================== - /// Node of an attributed tree structure + /// Node of an attributed Tree structure class Node { public: + typedef std::map AttributeMapType; + + /// Ctor with parent Node(Node* parent); + /// Ctor with parent and attributes map + Node(Node* parent, const AttributeMapType& ); /// Virtual destructor virtual ~Node(); + /// Initializes the attribute map i.e. creates the entries + void InitializeAttributeMap(); /// Returns the level descriptor of the node const LevelDescriptor& GetLevelDescriptor() const; @@ -48,6 +60,7 @@ namespace creaImageIO /// Returns the level of the node in the tree virtual int GetLevel() const { return mParent->GetLevel()+1; } + /// Returns the parent of the node Node* GetParent() const { return mParent; } @@ -71,44 +84,51 @@ namespace creaImageIO const ChildrenListType& GetChildrenList() const { return mChildren; } /// Remove the given children from the children list - void RemoveChildrenFromList(Node*); - - typedef std::map AttributeMapType; + int RemoveChildrenFromList(Node*); + + /// Get the Attributes Map AttributeMapType& GetAttributeMap() { return mAttributeMap; } + + /// Get the Attributes Map const AttributeMapType& GetAttributeMap() const { return mAttributeMap; } + + /// Get the Attribute for a specific key const std::string& GetAttribute(const std::string& k) const; - const std::string& GetCleanAttribute(const std::string& k) const; - const std::string& UnsafeGetAttribute(const std::string& k) const - { return mAttributeMap.find(k)->second; } + + /// Get the Attribute for a specific key without OS dependance (not implemented) + // TODO : backslash OS uniformity + const std::string& GetCleanAttribute(const std::string& k) const; + + /// Set an Attribute for a specific key void SetAttribute(const std::string& k, const std::string& v); + + /// Set an Attribute for a specific key(unsafe mode) void UnsafeSetAttribute(const std::string& k, const std::string& v) { mAttributeMap[k] = v; } - const AttributeDescriptor& GetAttributeDescriptor(const std::string& k) - const; - // { return GetTypeDescription().GetFieldDescription(k); } - + /// Get Descriptor for an Attribute + const AttributeDescriptor& GetAttributeDescriptor(const std::string& k)const; + + /// Returns true if the KEY attributes of the node match those of the map provided + bool Matches( const AttributeMapType& ) const; - /// Returns the node data casted into the type T template T GetData() const { if (mData!=0) return dynamic_cast(mData); return 0; } /// Sets the node data. Deletes existing data if any. - void SetData(NodeData* d) { if (mData) delete mData; mData = d; } + void SetData(boost::shared_ptr d) {mData.reset(); mData = d; }//{ if (mData) delete mData; mData = d; } /// Sorts the children of the node void SortChildren(const LexicographicalComparator&); - /* - virtual void Print() const; + /// Print the node + virtual void Print() const; + + /// Get the Label of the node std::string GetLabel() const; - int ImageGetRows() const; - int ImageGetColumns() const; - int ImageGetFrames() const; - const std::string& ImageGetFullFileName() const { return UnsafeGetAttribute("FullFileName"); } - */ + private: /// The parent of the node @@ -118,7 +138,7 @@ namespace creaImageIO /// The map of attributes AttributeMapType mAttributeMap; /// User data - NodeData* mData; + boost::shared_ptr mData; /// Are the children loaded ? bool mChildrenLoaded; /// The number of children