diff options
Diffstat (limited to 'parameter/Element.h')
-rw-r--r-- | parameter/Element.h | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/parameter/Element.h b/parameter/Element.h new file mode 100644 index 0000000..b3c3060 --- /dev/null +++ b/parameter/Element.h @@ -0,0 +1,145 @@ +/* <auto_header> + * <FILENAME> + * + * INTEL CONFIDENTIAL + * Copyright © 2011 Intel + * Corporation All Rights Reserved. + * + * The source code contained or described herein and all documents related to + * the source code ("Material") are owned by Intel Corporation or its suppliers + * or licensors. Title to the Material remains with Intel Corporation or its + * suppliers and licensors. The Material contains trade secrets and proprietary + * and confidential information of Intel or its suppliers and licensors. The + * Material is protected by worldwide copyright and trade secret laws and + * treaty provisions. No part of the Material may be used, copied, reproduced, + * modified, published, uploaded, posted, transmitted, distributed, or + * disclosed in any way without Intel’s prior express written permission. + * + * No license under any patent, copyright, trade secret or other intellectual + * property right is granted to or conferred upon you by disclosure or delivery + * of the Materials, either expressly, by implication, inducement, estoppel or + * otherwise. Any license under such intellectual property rights must be + * express and approved by Intel in writing. + * + * AUTHOR: Patrick Benavoli (patrickx.benavoli@intel.com) + * CREATED: 2011-06-01 + * UPDATED: 2011-07-27 + * + * + * </auto_header> + */ +#pragma once + +#include <string> +#include <vector> +#include <stdint.h> +#include "XmlSink.h" +#include "XmlSource.h" + +#include "PathNavigator.h" + +using namespace std; + +class CXmlElementSerializingContext; +class CErrorContext; + +class CElement : public IXmlSink, public IXmlSource +{ + friend class CAutoLog; +public: + CElement(const string& strName = ""); + virtual ~CElement(); + + // Logging + void log(const string& strMessage, ...) const; + + // Description + void setDescription(const string& strDescription); + const string& getDescription() const; + + // Name / Path + const string& getName() const; + bool rename(const string& strName, string& strError); + string getPath() const; + string getQualifiedPath() const; + + // Creation / build + virtual bool init(string& strError); + virtual void clean(); + + // Children management + void addChild(CElement* pChild); + bool removeChild(CElement* pChild); + void listChildren(string& strChildList) const; + string listQualifiedPaths(bool bDive, uint32_t uiLevel = 0) const; + void listChildrenPaths(string& strChildPathList) const; + + // Hierarchy query + uint32_t getNbChildren() const; + CElement* findChildOfKind(const string& strKind); + const CElement* findChildOfKind(const string& strKind) const; + const CElement* getParent() const; + const CElement* getChild(uint32_t uiIndex) const; + CElement* getChild(uint32_t uiIndex); + const CElement* findChild(const string& strName) const; + CElement* findChild(const string& strName); + const CElement* findDescendant(CPathNavigator& pathNavigator) const; + CElement* findDescendant(CPathNavigator& pathNavigator); + bool isDescendantOf(const CElement* pCandidateAscendant) const; + + // From IXmlSink + virtual bool fromXml(const CXmlElement& xmlElement, CXmlSerializingContext& serializingContext); + + // From IXmlSource + virtual void toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const; + + // Content structure dump + void dumpContent(string& strContent, CErrorContext& errorContext, const uint32_t uiDepth = 0) const; + + // Checksum for integrity checks + uint8_t computeStructureChecksum() const; + + // Class kind + virtual string getKind() const = 0; +protected: + // Content dumping + virtual void logValue(string& strValue, CErrorContext& errorContext) const; + // Name setting + void setName(const string& strName); + + // Hierarchy + CElement* getLastChild(); + CElement* getParent(); + CElement* findAscendantOfKind(const string& strKind); + CElement* getRoot(); + const CElement* getRoot() const; +private: + // Logging (done by root) + virtual void doLog(const string& strLog) const; + virtual void nestLog() const; + virtual void unnestLog() const; + // Returns Name or Kind if no Name + string getPathName() const; + // Returns true if children dynamic creation is to be dealt with + virtual bool childrenAreDynamic() const; + // House keeping + void removeChildren(); + // For logging + uint32_t getDepth() const; + // Fill XmlElement during XML composing + void setXmlNameAttribute(CXmlElement& xmlElement) const; + + // Name + string _strName; + + // Description + string _strDescription; + + // Child iterators + typedef vector<CElement*>::iterator ChildArrayIterator; + typedef vector<CElement*>::reverse_iterator ChildArrayReverseIterator; + // Children + vector<CElement*> _childArray; + // Parent + CElement* _pParent; +}; |