Changeset 96
- Timestamp:
- 06/04/10 14:55:53 (14 years ago)
- Location:
- XMLIO_V2/dev/dev_rv
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
XMLIO_V2/dev/dev_rv/context.hpp
r95 r96 17 17 { 18 18 // On modifie le context courrant pour tout les ObjectTemplate 19 Context::SetContext(id); 19 20 FieldGroup::SetContext(id); 20 21 Field::SetContext(id); … … 84 85 85 86 ~Context() 86 { /* Ne rien faire de plus pour le moment */}87 { delete fieldDef; } 87 88 88 89 protected: -
XMLIO_V2/dev/dev_rv/field.hpp
r95 r96 43 43 44 44 ~Field(void) 45 { /* Ne rien faire de plus */}45 { /* Ne rien faire de plus */ } 46 46 47 47 }; // class Field -
XMLIO_V2/dev/dev_rv/field_group.hpp
r95 r96 101 101 } 102 102 103 ~FieldGroup(void)103 virtual ~FieldGroup(void) 104 104 {/* Ne rien faire de plus */} 105 105 -
XMLIO_V2/dev/dev_rv/xmlio_group_template.hpp
r95 r96 65 65 66 66 67 ~GroupTemplate() 68 {/* Ne rien faire de plus pour le moment */ } 67 virtual ~GroupTemplate() 68 { 69 for (unsigned int i = 0; i < childList.getVector().size(); i++) 70 delete childList.getVector()[i]; 71 for (unsigned int i = 0; i < groupList.getVector().size(); i++) 72 delete groupList.getVector()[i]; 73 } 69 74 70 75 protected: -
XMLIO_V2/dev/dev_rv/xmlio_object_template.hpp
r95 r96 41 41 { return (ObjectTemplate<T>::AllListObj[CurrContext].hasMappedValue(_id)); } 42 42 43 static const StrHashMap<T> GetCurrentListObject(void) { return (AllListObj[CurrContext]); } 43 static const StrHashMap<T>& GetCurrentListObject(void) { return (AllListObj[CurrContext]); } 44 static HashMap<string, StrHashMap<T> >& GetAllListObject(void) { return (AllListObj); } 44 45 45 static void SetContext(const string& id) 46 { ObjectTemplate<T>::CurrContext = id; } 46 static void SetContext(const string& id){ ObjectTemplate<T>::CurrContext = id; } 47 47 48 48 static string& GetCurrentContextId(void) { return (CurrContext); } -
XMLIO_V2/dev/dev_rv/xmlio_xml_node.hpp
r91 r96 9 9 #include <Poco/DOM/NamedNodeMap.h> 10 10 11 //#include <Poco/DOM/AutoPtr.h>11 #include <Poco/DOM/AutoPtr.h> 12 12 13 13 // Entêtes Poco SAX … … 38 38 using Poco::HashMap; 39 39 40 using Poco::XML::AutoPtr; 41 40 42 namespace XMLIOSERVER 41 43 { … … 46 48 47 49 // TODO Mettre des auto_ptr ici car gestion de la mémoire lamentable sans. 48 typedef Document*PDocument;49 typedef Node* 50 typedef AutoPtr<Document> PDocument; 51 typedef Node* PNode; 50 52 51 53 class XMLNode 52 54 { 53 protected :54 55 XMLNode(const string& _rootName) : rootName(_rootName) { this->cNode = NULL ; }56 57 55 public : 58 56 59 static XMLNode CreateNode(istream& _istr, const string& _rootName = string("simulation")) 57 XMLNode(const string& _rootName) : rootName(_rootName) 58 { /* Ne rien faire de plus */} 59 60 static XMLNode& CreateNode(XMLNode& node, istream& _istr, const string& _rootName = string("simulation")) 60 61 { 61 XMLNode node(_rootName);62 63 62 if ((_istr.good())) 64 63 { // S'il est possible de lire le flux en entrée ... … … 68 67 // On parse la source XML et on vérifie que le premier noeud (racine) est du type "Element" 69 68 // ... et à pour valeur la chaîne rootName. 70 PDocumentpDoc = parser.parse(&src);71 if (!( pDoc->documentElement()->nodeName().compare(_rootName)))69 node.pDoc = parser.parse(&src); 70 if (!(node.pDoc->documentElement()->nodeName().compare(_rootName))) 72 71 { 73 node. cNode = pDoc->documentElement();72 node.setCNode(node.pDoc->documentElement()); 74 73 node.goToChildElement(); 75 74 } … … 77 76 { 78 77 ostringstream oss; 79 oss << "L'élément racine doit avoir pour valeur <" << _rootName << "> (\"" << ( pDoc->documentElement()->nodeName()) <<"\" lue)";78 oss << "L'élément racine doit avoir pour valeur <" << _rootName << "> (\"" << (node.pDoc->documentElement()->nodeName()) <<"\" lue)"; 80 79 throw XMLParsingException(oss.str()); 81 80 } … … 87 86 } 88 87 89 string getElementName(void) const {return (this-> cNode->nodeName());}88 string getElementName(void) const {return (this->getCNode()->nodeName());} 90 89 91 bool goToNextElement( Node* nextElement = 0)90 bool goToNextElement(void) 92 91 { 93 nextElement = (!nextElement)? this->cNode->nextSibling() : nextElement;92 PNode nextElement = this->getCNode()->nextSibling(); 94 93 95 94 // On parcourt la liste des "siblings" jusqu'à trouver un élément quelconque. 96 95 for(; ; nextElement = nextElement->nextSibling()) 97 if (nextElement == NULL) break;98 else if (nextElement->nodeType() == 1)99 {// Si l'un des noeuds est un élément...100 this->cNode = nextElement;101 return (true);102 }103 return (false);104 96 if (IsPtrNull(nextElement)) break; 97 else if (nextElement->nodeType() == 1) 98 {// Si l'un des noeuds est un élément... 99 this->setCNode(nextElement) ; 100 return (true); 101 } 102 return (false); 103 } 105 104 106 bool goToChildElement(void) 107 { 108 // On parcourt la liste des enfants jusqu'à trouver un élément quelconque. 109 if (this->cNode->firstChild()) 110 if (this->goToNextElement(this->cNode->firstChild())) 111 return (true); 105 bool goToChildElement(void) 106 { 107 PNode nextElement = this->getCNode()->firstChild(); 108 109 // On parcourt la liste des enfants jusqu'à trouver un élément quelconque. 110 if (!IsPtrNull(nextElement)) 111 { 112 for(; ; nextElement = nextElement->nextSibling()) 113 if (IsPtrNull(nextElement)) break; 114 else if (nextElement->nodeType() == 1) 115 {// Si l'un des noeuds est un élément... 116 this->setCNode(nextElement) ; 117 return (true); 118 } 119 return (false); 120 } 112 121 113 return (false);114 122 return (false); 123 } 115 124 116 117 118 // Pas de retour au parent si on est à la racine.119 if (!(this->getElementName().compare(rootName))) return (false);120 this->cNode = this->cNode->parentNode();121 return (true);122 125 bool goToParentElement(void) 126 { 127 // Pas de retour au parent si on est à la racine. 128 if (!(this->getElementName().compare(rootName))) return (false); 129 this->setCNode(this->getCNode()->parentNode()); 130 return (true); 131 } 123 132 124 bool getAttributes(THashAttributes& attributes) const 125 { 126 if(!this->cNode->hasAttributes()) return (false); 127 NamedNodeMap* map = this->cNode->attributes(); 133 bool getAttributes(THashAttributes& attributes) const 134 { 135 136 if(!this->getCNode()->hasAttributes()) return (false); 137 AutoPtr<NamedNodeMap> map = this->getCNode()->attributes(); 128 138 129 139 for(unsigned int i = 0; i< map->length(); i++) … … 131 141 132 142 return (true); 133 143 } 134 144 135 145 ~XMLNode() 136 146 { /* Ne rien faire de plus */ } 137 147 148 protected : 149 150 PNode getCNode(void) const {return (this->cNode); } 151 void setCNode(PNode other) { this->cNode = other; } 152 153 static bool IsPtrNull(PNode ptr) {return (ptr==NULL);} 154 138 155 private : 139 156 PDocument pDoc; 140 157 PNode cNode; 158 141 159 string rootName; 142 160 -
XMLIO_V2/dev/dev_rv/xmlio_xml_parser.hpp
r95 r96 18 18 { 19 19 THashAttributes attributes; 20 20 21 21 do { 22 22 // Traitement de l'identifiant … … 36 36 37 37 } while (_node.goToNextElement()); 38 } 38 } 39 40 static void FreeMemory(void) 41 { 42 HashMap<string, StrHashMap<Context> > &AllListContext = Context::GetAllListObject(); 43 44 for (HashMap<string, StrHashMap<Context> >::Iterator it = AllListContext.begin(); it != AllListContext.end(); it++) 45 { 46 string& id = (*it).first; 47 StrHashMap<Context>& sc = (*it).second; 48 // BUG AllListContext contient une StrHashMap<Context> liée à l'identifiant "" d'où la vérification ci-dessous. 49 if (id.size()>0) delete sc[id]; 50 } 51 } 39 52 40 53 static bool CLASS_TEST(const string& file = string("/local/testsuite/iodef_test.xml"), ostream& log = std::clog) 41 54 { 42 55 ifstream istr( file.c_str() , ifstream::in ); 43 XMLNode node = XMLNode::CreateNode(istr); 56 XMLNode node("simulation"); 57 XMLNode::CreateNode(node, istr); 44 58 XMLParser::Parse(node); 45 log << "Nombre de Contexts listés : " << Context::GetCurrentListObject().getSize() << " contre 2attendus."<< std::endl;59 log << "Nombre de Contexts listés : " << Context::GetCurrentListObject().getSize() << " contre 1 attendus."<< std::endl; 46 60 log << "Nombre de FieldGroups listés : " << FieldGroup::GetCurrentListObject().getSize() << " contre 5 attendus."<< std::endl; 47 61 log << "Description du champs votkeavt : " << Field::GetObject("votkeavt").description << " contre \"Vertical Eddy Diffusivity\" attendus."<< std::endl; 48 62 49 63 log << "Test XMLParser ... ok !" << std::endl; 64 65 FreeMemory(); // Pour supprimer la mémoire liée à l'allocation dynamique. 66 50 67 return (true); 51 68 }
Note: See TracChangeset
for help on using the changeset viewer.