X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src2%2FcreaImageIOTreeNode.cpp;h=faa0bf00cad7982493c084aeb17bce08a0464ee4;hb=71365e2ce56b1ccf93054818d5d5cf64bcbaafb4;hp=8f03924236e30d7e0dd2b824d9d17e4a288028d2;hpb=cbf693fa62cd51f4ca5c881838bbb609edc447b0;p=creaImageIO.git diff --git a/src2/creaImageIOTreeNode.cpp b/src2/creaImageIOTreeNode.cpp index 8f03924..faa0bf0 100644 --- a/src2/creaImageIOTreeNode.cpp +++ b/src2/creaImageIOTreeNode.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include #include namespace creaImageIO @@ -9,13 +9,38 @@ namespace creaImageIO { //============================================================= - /// Ctor with parent + /// Ctor with parent Why does it enter once while charging? Node::Node(Node* parent) : mParent(parent), mData(0), mChildrenLoaded(false) { if (parent) + { + GimmickDebugMessage(6,"Default Node constructor (level "<GetChildrenList().push_back(this); + } + else + { + GimmickDebugMessage(6,"Default Node constructor without parent" + << std::endl); + } + } + //============================================================= + + //============================================================= + /// Ctor with parent and attributes map + Node::Node(Node* parent, const AttributeMapType& attr) + : mParent(parent), + mData(0), + mChildrenLoaded(false) + { + GimmickDebugMessage(6,"Node constructor (level "<GetChildrenList().push_back(this); @@ -25,17 +50,27 @@ namespace creaImageIO a!= GetTree()->GetAttributeDescriptorList(GetLevel()).end(); ++a) { - UnsafeSetAttribute( a->GetName(), "" ); + std::string v; + AttributeMapType::const_iterator i = attr.find(a->GetKey()); + if ( i != attr.end() ) + { + v = i->second; + } + GimmickDebugMessage(6,"Setting attribute '"<GetName()<<"' = '" + <GetKey(), v ); } } + } //============================================================= - //============================================================= Node::~Node() { + GimmickDebugMessage(6,"Node destructor" + << std::endl); ChildrenListType::iterator i; for (i=GetChildrenList().begin(); i!=GetChildrenList().end(); i++) { @@ -49,8 +84,53 @@ namespace creaImageIO } //============================================================= - //============================================================= - void Node::RemoveChildrenFromList(Node* node) + + //============================================================= + /// Initializes the attribute map i.e. creates the entries + void Node::InitializeAttributeMap() + { + // Initialize attributes + LevelDescriptor::AttributeDescriptorListType::const_iterator a; + for (a = GetTree()->GetAttributeDescriptorList(GetLevel()).begin(); + a!= GetTree()->GetAttributeDescriptorList(GetLevel()).end(); + ++a) + { + UnsafeSetAttribute( a->GetKey(), "" ); + } + } + //============================================================= + + //============================================================= + /// Returns the level descriptor of the node + const LevelDescriptor& Node::GetLevelDescriptor() const + { + return GetTree()->GetLevelDescriptor(GetLevel()); + } + + //============================================================= + + //============================================================= + /// Returns the attribute descriptor of the passed parameter + const AttributeDescriptor& Node::GetAttributeDescriptor(const std::string& k)const + { + LevelDescriptor::AttributeDescriptorListType::const_iterator a; + for (a = GetTree()->GetAttributeDescriptorList(GetLevel()).begin(); + a!= GetTree()->GetAttributeDescriptorList(GetLevel()).end(); + ++a) + { + + if(a->GetKey()==k) + { + return *a; + } + + } + return *a; + } + //============================================================= + + //============================================================= + int Node::RemoveChildrenFromList(Node* node) { ChildrenListType::iterator i = find(GetChildrenList().begin(), GetChildrenList().end(), @@ -59,6 +139,7 @@ namespace creaImageIO { GetChildrenList().erase(i); } + return GetChildrenList().size(); } //============================================================= @@ -85,15 +166,79 @@ namespace creaImageIO AttributeMapType::iterator i = mAttributeMap.find(k); if (i==mAttributeMap.end()) { - std::cout<<"[Gimmick!] Node::SetAttribute : no attribute with name '" + std::cout<<"[Gimmick!] Node::SetAttribute : no attribute with key '" <second = v; } - //============================================================= + //============================================================= + //============================================================= + bool Node::Matches( const AttributeMapType& m ) const + { + GimmickDebugMessage(2,"'"<& id + = GetLevelDescriptor().GetIdentifierList(); + std::vector::const_iterator i; + for (i = id.begin(); i != id.end(); ++i) + { + if (mAttributeMap.find(*i)->second != m.find(*i)->second ) + { + GimmickDebugMessage(2,"IDENTIFIER '"<<*i<<"' values do not match"<Print(); + } + } + //============================================================= + + //============================================================= + std::string Node::GetLabel() const + { + std::string l; + const std::vector& label + = GetLevelDescriptor().GetLabelList(); + + std::vector::const_iterator i; + for (i = label.begin(); i != label.end(); ) + { + GimmickDebugMessage(9,"LABEL '"<<*i<<"'"<second; + ++i; + if (i != label.end()) l += "|"; + } + else + { + GimmickError("Node::GetLabel() : LABEL attribute '" + <<*i + <<"' is not in node attribute map (should be!)" ); + } + } + if (l.size()==0) l="?"; + return l; + } + //============================================================= }